Development

NAVIGATION
CATEGORIES
REFERRENCE
LINKS
  • Issue 571: A+D should be R in update

    15 answers - 689 bytes - related search similar search Add To My Delicious Add To My Stumble Upon Add To My Google Mark Add To My Facebook Add To My Digg Add To My Reddit

    Hi,
    I've been looking at the second half of the open issue 571
    There is a patch posted at the end that filters the output of the
    command line client, but doesn't use a hash table.
    I'm trying to decide if this is the best method.
    - or -
    Looking into the internals of how the update method(s) work to add a new
    enumeration to svn_wc_notify_t such as:
    svn_wc_notify_update_replace
    I am having some problems understanding the notification handlers, but
    am slowly plugging away.
    The new type could easily be handled by
    just like all the other types of
    notifications are.
    Thoughts, comments, ideas?
    Chris
  • No.1 | | 3421 bytes | |

    Hi All,

    This is my first crack at this issue. I've still got some problems.

    I'm going to review the parts of the patch I'm having trouble with, and
    have attached the complete patch for your perusal.

    I have also attached my test repository with the dump file.
    r1:2 is a replace of trunk/file.c

    Much thanks to `eh' on the IRC channel for his patience and guidance!

    @@ -50,6 +50,12 @@
    #include "lock.h"
    #include "props.h"

    +#define ADD "add"
    +#define DEL "del"
    +#define NESS_DEBUG 1
    +
    +const char * hash_get_set (apr_hash_t * ht, const void * key,
    + const char * add_or_del);

    Not sure what to do with my own private functions and defines. HACKING
    seems to be quiet on the matter. But I haven't seen any other functions
    in code - so does everything go into header files?

    Comment out the NESS_DEBUG define to stop the verbose trace lines.

    @@ -995,18 +1013,6 @@
    logfile_path, parent_path, pool));
    *log_number = 0;
    - /* The passed-in `path' is relative to the anchor of the edit, so if
    - * the operation was invoked on something other than ".", then
    - * `path' will be wrong for purposes of notification. However, we
    - * can always count on the parent_path being the parent of base_name,
    - * so we just join them together to get a good notification path.
    - */
    - if (eb->notify_func)
    - (*eb->notify_func)
    - (eb->notify_baton,
    - svn_wc_create_notify (svn_path_join (parent_path, base_name, pool),
    - svn_wc_notify_update_delete, pool), pool);

    Looking at this comment now I didn't use the svn_path_join() method like
    it warns against. Does this comment still apply today as it did in
    2002?

    Now to the part that is getting me.

    + for (hi = apr_hash_first(db->pool, db->deleted_targets); hi; hi = apr_hash_next(hi))
    + {
    +#ifdef NESS_DEBUG
    + i++;
    +#endif
    + const void *vkey;
    + void *vval;
    + const char *key;
    + const svn_string_t *val;
    +
    + apr_hash_this(hi, &vkey, NULL, &vval);
    + key = vkey;
    + val = vval;
    +#ifdef NESS_DEBUG
    + fprintf(stderr, "[%d] hash key = '%s' was found with val = '%s'\n", i, key, (char *)val);
    +#endif
    + if ((char*)val == DEL && db->edit_baton->notify_func)
    + {
    + (*db->edit_baton->notify_func)
    + (db->edit_baton->notify_baton,
    + svn_wc_create_notify (key,
    + svn_wc_notify_update_delete, pool), pool);
    + }
    + }

    I'm thinking the const char * is killing me. In my testing it is giving
    the same entries (yes, I know what the constant keyword means), and not
    seeming to loop though the hash table as I expected for the key values.
    But this is what the function arp_hash_this() returns for the key!

    How can I get around the const void * above and loop through the hash
    table with proper keys returned? This seems rather common to me to want
    to get back the keys you entered.

    The next loop is bigger and uglier than needed but it tries to delete
    the entries in the loop and probably fails to do so since the keys do
    not appear to be updating.

    Comments and hints on beating this apr_hash_this() problem please.

    I'm helping a friend build a shed tomorrow so I won't be around for most
    of the day.

    Cheers,
    Chris
  • No.2 | | 3748 bytes | |

    Can you resend with a log message, as described in our hacking.html
    file?

    (You can also run 'svn log' on the svn repository for 16,000 examples.)

    Sep 11, 2005, at 7:39 PM, Christopher Ness wrote:

    Hi All,

    This is my first crack at this issue. I've still got some problems.

    I'm going to review the parts of the patch I'm having trouble with,
    and
    have attached the complete patch for your perusal.

    I have also attached my test repository with the dump file.
    r1:2 is a replace of trunk/file.c

    Much thanks to `eh' on the IRC channel for his patience and guidance!
    --
    @@ -50,6 +50,12 @@
    #include "lock.h"
    #include "props.h"

    +#define ADD "add"
    +#define DEL "del"
    +#define NESS_DEBUG 1
    +
    +const char * hash_get_set (apr_hash_t * ht, const void * key,
    + const char * add_or_del);

    Not sure what to do with my own private functions and defines.
    HACKING
    seems to be quiet on the matter. But I haven't seen any other
    functions
    in code - so does everything go into header files?

    Comment out the NESS_DEBUG define to stop the verbose trace lines.

    @@ -995,18 +1013,6 @@
    logfile_path, parent_path, pool));
    *log_number = 0;

    - /* The passed-in `path' is relative to the anchor of the edit,
    so if
    - * the operation was invoked on something other than ".", then
    - * `path' will be wrong for purposes of notification. However, we
    - * can always count on the parent_path being the parent of
    base_name,
    - * so we just join them together to get a good notification path.
    - */
    - if (eb->notify_func)
    - (*eb->notify_func)
    - (eb->notify_baton,
    - svn_wc_create_notify (svn_path_join (parent_path,
    base_name, pool),
    - svn_wc_notify_update_delete, pool),
    pool);

    Looking at this comment now I didn't use the svn_path_join() method
    like
    it warns against. Does this comment still apply today as it did in
    2002?

    Now to the part that is getting me.

    + for (hi = apr_hash_first(db->pool, db->deleted_targets); hi; hi
    = apr_hash_next(hi))
    + {
    +#ifdef NESS_DEBUG
    + i++;
    +#endif
    + const void *vkey;
    + void *vval;
    + const char *key;
    + const svn_string_t *val;
    +
    + apr_hash_this(hi, &vkey, NULL, &vval);
    + key = vkey;
    + val = vval;
    +#ifdef NESS_DEBUG
    + fprintf(stderr, "[%d] hash key = '%s' was found with val = '%
    s'\n", i, key, (char *)val);
    +#endif
    + if ((char*)val == DEL && db->edit_baton->notify_func)
    + {
    + (*db->edit_baton->notify_func)
    + (db->edit_baton->notify_baton,
    + svn_wc_create_notify (key,
    + svn_wc_notify_update_delete, pool),
    pool);
    + }
    + }

    I'm thinking the const char * is killing me. In my testing it is
    giving
    the same entries (yes, I know what the constant keyword means), and
    not
    seeming to loop though the hash table as I expected for the key
    values.
    But this is what the function arp_hash_this() returns for the key!

    How can I get around the const void * above and loop through the hash
    table with proper keys returned? This seems rather common to me to
    want
    to get back the keys you entered.

    The next loop is bigger and uglier than needed but it tries to delete
    the entries in the loop and probably fails to do so since the keys do
    not appear to be updating.
    >
    >
    >

    Comments and hints on beating this apr_hash_this() problem please.

    I'm helping a friend build a shed tomorrow so I won't be around for
    most
    of the day.

    Cheers,
    Chris
  • No.3 | | 5287 bytes | |

    Sun, 2005-09-11 at 21:42 -0500, Ben Collins-Sussman wrote:
    Can you resend with a log message, as described in our hacking.html
    file?

    (You can also run 'svn log' on the svn repository for 16,000 examples.)

    I do not want this committed. It isn't ready. There are problems that
    I need help solving.

    But if it will help with the review process I'll add a log message.

    [[[
    THIS PATCH IS NT READY T BE CMMITTED.

    Closure of the second half of issue 571, "svn update: D+A should say R"

    Patch By: Chris Ness <chris (AT) nesser (DOT) org>
    Design By: eh
    Review By:

    * subversion/include/svn_wc.h
    (svn_wc_notify_action_t): New enumerated type
    svn_wc_notify_update_replace
    *
    (): New defines
    (struct dir_baton): New hash table deleted_targets
    (make_dir_baton): Initialize hash table when a new dir_baton is
    created.
    (do_entry_deletion): No longer notifies about file deletions, this is
    delayed by use of the hash table.
    (delete_entry): Adds to hash table, and if key exists notifies of
    a replacement of a file and removes that key from the hash.
    (close_directory): Walks hash for leftover keys marked as deleted
    and notifies them as deleted. Ignores added hashes.
    Removes entries from the hash.
    (close_file): Adds targets to the hash as added since reverse merges
    of replaced files can also occur. If target exists it notifies of
    a replacement and removes the target from the hash.
    (hash_get_set): New local function which tries to return the hash
    key. If not found it adds the target to the hash table.
    *
    (notify): New case to handle svn_wc_notify_update_replace
    ]]]

    Reattaching the patch.
    For the test repos, please see grandparent post.

    Cheers,
    Chris

    Sep 11, 2005, at 7:39 PM, Christopher Ness wrote:

    Hi All,

    This is my first crack at this issue. I've still got some problems.

    I'm going to review the parts of the patch I'm having trouble with,
    and
    have attached the complete patch for your perusal.

    I have also attached my test repository with the dump file.
    r1:2 is a replace of trunk/file.c

    Much thanks to `eh' on the IRC channel for his patience and guidance!
    --
    @@ -50,6 +50,12 @@
    #include "lock.h"
    #include "props.h"

    +#define ADD "add"
    +#define DEL "del"
    +#define NESS_DEBUG 1
    +
    +const char * hash_get_set (apr_hash_t * ht, const void * key,
    + const char * add_or_del);

    Not sure what to do with my own private functions and defines.
    HACKING
    seems to be quiet on the matter. But I haven't seen any other
    functions
    in code - so does everything go into header files?

    Comment out the NESS_DEBUG define to stop the verbose trace lines.

    @@ -995,18 +1013,6 @@
    logfile_path, parent_path, pool));
    *log_number = 0;

    - /* The passed-in `path' is relative to the anchor of the edit,
    so if
    - * the operation was invoked on something other than ".", then
    - * `path' will be wrong for purposes of notification. However, we
    - * can always count on the parent_path being the parent of
    base_name,
    - * so we just join them together to get a good notification path.
    - */
    - if (eb->notify_func)
    - (*eb->notify_func)
    - (eb->notify_baton,
    - svn_wc_create_notify (svn_path_join (parent_path,
    base_name, pool),
    - svn_wc_notify_update_delete, pool),
    pool);

    Looking at this comment now I didn't use the svn_path_join() method
    like
    it warns against. Does this comment still apply today as it did in
    2002?

    Now to the part that is getting me.

    + for (hi = apr_hash_first(db->pool, db->deleted_targets); hi; hi
    = apr_hash_next(hi))
    + {
    +#ifdef NESS_DEBUG
    + i++;
    +#endif
    + const void *vkey;
    + void *vval;
    + const char *key;
    + const svn_string_t *val;
    +
    + apr_hash_this(hi, &vkey, NULL, &vval);
    + key = vkey;
    + val = vval;
    +#ifdef NESS_DEBUG
    + fprintf(stderr, "[%d] hash key = '%s' was found with val = '%
    s'\n", i, key, (char *)val);
    +#endif
    + if ((char*)val == DEL && db->edit_baton->notify_func)
    + {
    + (*db->edit_baton->notify_func)
    + (db->edit_baton->notify_baton,
    + svn_wc_create_notify (key,
    + svn_wc_notify_update_delete, pool),
    pool);
    + }
    + }

    I'm thinking the const char * is killing me. In my testing it is
    giving
    the same entries (yes, I know what the constant keyword means), and
    not
    seeming to loop though the hash table as I expected for the key
    values.
    But this is what the function arp_hash_this() returns for the key!

    How can I get around the const void * above and loop through the hash
    table with proper keys returned? This seems rather common to me to
    want
    to get back the keys you entered.

    The next loop is bigger and uglier than needed but it tries to delete
    the entries in the loop and probably fails to do so since the keys do
    not appear to be updating.
    >
    >
    >

    Comments and hints on beating this apr_hash_this() problem please.
  • No.4 | | 544 bytes | |

    Sep 12, 2005, at 7:10 AM, Christopher Ness wrote:

    I do not want this committed. It isn't ready. There are problems
    that
    I need help solving.

    But if it will help with the review process I'll add a log message.

    Thanks, it makes a huge difference for anyone doing review. It's a
    great "top down" description of the overall strategy.

    To unsubscribe, e-mail: dev-unsubscribe (AT) subversion (DOT) tigris.org
    For additional commands, e-mail: dev-help (AT) subversion (DOT) tigris.org
  • No.5 | | 2677 bytes | |

    Christopher Ness wrote:
    [[[
    THIS PATCH IS NT READY T BE CMMITTED.

    Closure of the second half of issue 571, "svn update: D+A should say R"

    Patch By: Chris Ness <chris (AT) nesser (DOT) org>
    Design By: eh
    Review By:

    * subversion/include/svn_wc.h
    (svn_wc_notify_action_t): New enumerated type
    svn_wc_notify_update_replace
    *
    (): New defines
    (struct dir_baton): New hash table deleted_targets
    (make_dir_baton): Initialize hash table when a new dir_baton is
    created.
    (do_entry_deletion): No longer notifies about file deletions, this is
    delayed by use of the hash table.
    (delete_entry): Adds to hash table, and if key exists notifies of
    a replacement of a file and removes that key from the hash.
    (close_directory): Walks hash for leftover keys marked as deleted
    and notifies them as deleted. Ignores added hashes.
    Removes entries from the hash.
    (close_file): Adds targets to the hash as added since reverse merges
    of replaced files can also occur. If target exists it notifies of
    a replacement and removes the target from the hash.
    (hash_get_set): New local function which tries to return the hash
    key. If not found it adds the target to the hash table.
    *
    (notify): New case to handle svn_wc_notify_update_replace
    ]]]

    I'm a bit hesitant about the way many delete notifications can be saved up
    until close_directory().

    Do we really need a hash at all? Are not all D+A combinations immediately
    consecutive, meaning that all we have to do is to queue exactly one delete
    notification at any one time, in case the next notification is an add for
    the same path?
    That ought to reduce the complexity of the code quite a lot.

    Pseudocode:
    do_notify (notification)
    {
    if (pending_delete_notification)
    {
    if (notification->action == ADD &&
    strcmp(notification->path, pending_delete_notification->path) == 0)
    {
    output (REPLACE, notification->path);
    pending_delete_notification = NULL;
    return; /* All done */
    }
    else
    {
    output (pending_delete_notification->action,
    pending_delete_notification->path);
    pending_delete_notification = NULL;
    }
    }

    if (notification->action == DELETE)
    pending_delete_notification = notification;
    else
    output (notification->action, notification->path);
    }

    Plus code to flush pending_delete_notification on close_directory()

    Max.

    To unsubscribe, e-mail: dev-unsubscribe (AT) subversion (DOT) tigris.org
    For additional commands, e-mail: dev-help (AT) subversion (DOT) tigris.org
  • No.6 | | 3159 bytes | |

    9/13/05, Max Bowsher <maxb (AT) ukf (DOT) netwrote:
    Christopher Ness wrote:
    [[[
    THIS PATCH IS NT READY T BE CMMITTED.

    Closure of the second half of issue 571, "svn update: D+A should say R"

    Patch By: Chris Ness <chris (AT) nesser (DOT) org>
    Design By: eh
    Review By:

    * subversion/include/svn_wc.h
    (svn_wc_notify_action_t): New enumerated type
    svn_wc_notify_update_replace
    *
    (): New defines
    (struct dir_baton): New hash table deleted_targets
    (make_dir_baton): Initialize hash table when a new dir_baton is
    created.
    (do_entry_deletion): No longer notifies about file deletions, this is
    delayed by use of the hash table.
    (delete_entry): Adds to hash table, and if key exists notifies of
    a replacement of a file and removes that key from the hash.
    (close_directory): Walks hash for leftover keys marked as deleted
    and notifies them as deleted. Ignores added hashes.
    Removes entries from the hash.
    (close_file): Adds targets to the hash as added since reverse merges
    of replaced files can also occur. If target exists it notifies of
    a replacement and removes the target from the hash.
    (hash_get_set): New local function which tries to return the hash
    key. If not found it adds the target to the hash table.
    *
    (notify): New case to handle svn_wc_notify_update_replace
    ]]]

    I'm a bit hesitant about the way many delete notifications can be saved up
    until close_directory().

    Well, I have a different point:

    I know breser modified the code to send deletes first, but is that an
    editor API guarantee?

    Do we really need a hash at all? Are not all D+A combinations immediately
    consecutive, meaning that all we have to do is to queue exactly one delete
    notification at any one time, in case the next notification is an add for
    the same path?
    That ought to reduce the complexity of the code quite a lot.

    Yes, but even if the current code does it that way, do we have an
    editor guarantee that it will always work that way?

    Pseudocode:
    do_notify (notification)
    {
    if (pending_delete_notification)
    {
    if (notification->action == ADD &&
    strcmp(notification->path, pending_delete_notification->path) == 0)
    {
    output (REPLACE, notification->path);
    pending_delete_notification = NULL;
    return; /* All done */
    }
    else
    {
    output (pending_delete_notification->action,
    pending_delete_notification->path);
    pending_delete_notification = NULL;
    }
    }

    if (notification->action == DELETE)
    pending_delete_notification = notification;
    else
    output (notification->action, notification->path);
    }

    Plus code to flush pending_delete_notification on close_directory()

    If we require D+A to be consecutive, then, yes that's a possibility,
    but what if we only require that the list of changes is ordered in
    such a way that D's are first and A's are later (but not consecutive)?
    Might any future code change benefit from not having too strict
    requirements?

    bye,

    Erik.
  • No.7 | | 886 bytes | |

    Erik Huelsmann wrote:

    If we require D+A to be consecutive, then, yes that's a possibility,
    but what if we only require that the list of changes is ordered in
    such a way that D's are first and A's are later (but not consecutive)?

    Should the code ever delete batches first, and then add files in batches
    afterwards, I would like to be notified of that fact by individual D and A
    notifications, showing what has and has not taken place at a given point in
    time.

    What if I cancel the operation after some deletes have taken place, but
    before the add (and R-notify) has occurred?
    I would not see any output to explain why the deleted files had vanished.

    Max.

    To unsubscribe, e-mail: dev-unsubscribe (AT) subversion (DOT) tigris.org
    For additional commands, e-mail: dev-help (AT) subversion (DOT) tigris.org
  • No.8 | | 1075 bytes | |

    Tue, Sep 13, 2005 at 03:39:33PM +0100, Max Bowsher wrote:
    Do we really need a hash at all? Are not all D+A combinations immediately
    consecutive, meaning that all we have to do is to queue exactly one delete
    notification at any one time, in case the next notification is an add for
    the same path?

    No - check the doc-comments for svn_delta_editor_t. All that's promised is
    that a delete will occur at some point prior to an add.

    I've not really looked at this, but one things I was wondering: instead of
    just adding a 'replace' notification type to svn_wc_notify_action_t and
    generating it artificially from the individual D+A changes (as per the
    current patch), would it make sense to also rev svn_delta_editor_t and
    add something like replace_entry, so that a tree editor can indicate a
    replace operation directly?

    Regards,
    Malcolm

    To unsubscribe, e-mail: dev-unsubscribe (AT) subversion (DOT) tigris.org
    For additional commands, e-mail: dev-help (AT) subversion (DOT) tigris.org
  • No.9 | | 1235 bytes | |

    9/13/05, Malcolm Rowe <malcolm-svn-dev (AT) farside (DOT) org.ukwrote:
    Tue, Sep 13, 2005 at 03:39:33PM +0100, Max Bowsher wrote:
    Do we really need a hash at all? Are not all D+A combinations immediately
    consecutive, meaning that all we have to do is to queue exactly one delete
    notification at any one time, in case the next notification is an add for
    the same path?

    No - check the doc-comments for svn_delta_editor_t. All that's promised is
    that a delete will occur at some point prior to an add.

    I've not really looked at this, but one things I was wondering: instead of
    just adding a 'replace' notification type to svn_wc_notify_action_t and
    generating it artificially from the individual D+A changes (as per the
    current patch), would it make sense to also rev svn_delta_editor_t and
    add something like replace_entry, so that a tree editor can indicate a
    replace operation directly?

    Yes, ofcourse, but that's a longer-term goal.

    This issue is just about what's reported, there's another plan (maybe
    not in an issue?) called 'implement true renames' which includes your
    suggestion.

    bye,

    Erik.
  • No.10 | | 766 bytes | |

    Christopher Ness <chris (AT) nesser (DOT) orgwrites:

    * subversion/include/svn_wc.h
    (svn_wc_notify_action_t): New enumerated type
    svn_wc_notify_update_replace

    It's not a new enumerated type, it's a new value in an existing type.

    Such a change may well contravene Subversion's ABI compatability
    guidelines; it's likely to break existing notification callbacks. I
    see that we added locking values to svn_wc_notify_action_t in 1.2, but
    that didn't break things in quite the same way. A 1.1 client using
    1.2 libraries would continue to work so long as no locks were
    involved, whereas your proposed change is likely to break 1.2 clients
    using 1.3 libraries. You may need to rev the notification API.
  • No.11 | | 1202 bytes | |

    Tue, 2005-09-13 at 16:47 +0100, Philip Martin wrote:
    Christopher Ness <chris (AT) nesser (DOT) orgwrites:

    * subversion/include/svn_wc.h
    (svn_wc_notify_action_t): New enumerated type
    svn_wc_notify_update_replace

    It's not a new enumerated type, it's a new value in an existing type.

    Your correct, my mistake.

    Such a change may well contravene Subversion's ABI compatability
    guidelines; it's likely to break existing notification callbacks. I
    see that we added locking values to svn_wc_notify_action_t in 1.2, but
    that didn't break things in quite the same way. A 1.1 client using
    1.2 libraries would continue to work so long as no locks were
    involved, whereas your proposed change is likely to break 1.2 clients
    using 1.3 libraries. You may need to rev the notification API.

    At first I had the new value in the middle of the enumerated list which
    caused the values after to be n+1 in the binary. Eric mentioned that I
    was breaking binary compatibility.

    In this patch the new value comes at the end of the list and therefore
    all values for 1.{1,2} shall be the same as this.

    Cheers,
    Chris
  • No.12 | | 1286 bytes | |

    Tue, 13 Sep 2005, Philip Martin wrote:

    Christopher Ness <chris (AT) nesser (DOT) orgwrites:

    Such a change may well contravene Subversion's ABI compatability
    guidelines; it's likely to break existing notification callbacks. I
    see that we added locking values to svn_wc_notify_action_t in 1.2, but
    that didn't break things in quite the same way. A 1.1 client using
    1.2 libraries would continue to work so long as no locks were
    involved, whereas your proposed change is likely to break 1.2 clients
    using 1.3 libraries. You may need to rev the notification API.
    --
    ! N again, please! I think you're a bit extreme when you claim that
    we break ABI by just adding an enumeration value (K, in a very strict
    sense, but we're a library, not a standards body:-). But in this case,
    when you *replace* some values with a new value, we would break ABI in a
    way that isn't acceptable. But, why can't this stuff be kept in the CLI
    code. We could leave it up to each notifier implementation to coelsce D/A
    into R.

    Thanks,
    //Peter

    To unsubscribe, e-mail: dev-unsubscribe (AT) subversion (DOT) tigris.org
    For additional commands, e-mail: dev-help (AT) subversion (DOT) tigris.org
  • No.13 | | 2063 bytes | |

    "Peter N. Lundblad" <peter (AT) famlundblad (DOT) sewrites:

    Tue, 13 Sep 2005, Philip Martin wrote:
    >
    >Christopher Ness <chris (AT) nesser (DOT) orgwrites:
    >>

    >Such a change may well contravene Subversion's ABI compatability
    >guidelines; it's likely to break existing notification callbacks. I
    >see that we added locking values to svn_wc_notify_action_t in 1.2, but
    >that didn't break things in quite the same way. A 1.1 client using
    >1.2 libraries would continue to work so long as no locks were
    >involved, whereas your proposed change is likely to break 1.2 clients
    >using 1.3 libraries. You may need to rev the notification API.
    >>
    >>

    ! N again, please! I think you're a bit extreme when you claim that
    we break ABI by just adding an enumeration value (K, in a very strict
    sense, but we're a library, not a standards body:-). But in this case,
    when you *replace* some values with a new value, we would break ABI in a
    way that isn't acceptable.

    Perhaps my point wasn't clear.

    Adding the enum value does not break the ABI, it's the rest of the
    patch that does that: when it stops sending 'D'+'A' and sends the
    newly introduced 'R' instead. The patch modifies the svn client to
    cope, but obviously third-party clients will still get broken.

    To be acceptable the patch needs to provide an interface that causes
    unmodified clients to continue to receive 'D'+'A' while allowing more
    up to date clients to receive 'R'. That probably means new fields in
    svn_client_ctx_t.

    But, why can't this stuff be kept in the CLI
    code. We could leave it up to each notifier implementation to coelsce D/A
    into R.

    That would be another way to do it, although it would mean every
    individual client has to implement it separately.
  • No.14 | | 2346 bytes | |

    Tue, 13 Sep 2005, Philip Martin wrote:

    "Peter N. Lundblad" <peter (AT) famlundblad (DOT) sewrites:

    Tue, 13 Sep 2005, Philip Martin wrote:
    >
    >Christopher Ness <chris (AT) nesser (DOT) orgwrites:
    >>

    >Such a change may well contravene Subversion's ABI compatability
    >guidelines; it's likely to break existing notification callbacks. I
    >see that we added locking values to svn_wc_notify_action_t in 1.2, but
    >that didn't break things in quite the same way. A 1.1 client using
    >1.2 libraries would continue to work so long as no locks were
    >involved, whereas your proposed change is likely to break 1.2 clients
    >using 1.3 libraries. You may need to rev the notification API.
    >>
    >>

    ! N again, please! I think you're a bit extreme when you claim that
    we break ABI by just adding an enumeration value (K, in a very strict
    sense, but we're a library, not a standards body:-). But in this case,
    when you *replace* some values with a new value, we would break ABI in a
    way that isn't acceptable.

    Perhaps my point wasn't clear.

    Yes, it was celar to me. What I meant was that adding (and using) new enum
    values shouldn't be a problem in practice (like we did for locking). IN
    this case, we are stopping to use some values as you point out below.
    That's when it becomes a problem in practice.

    But, why can't this stuff be kept in the CLI
    code. We could leave it up to each notifier implementation to coelsce D/A
    into R.

    That would be another way to do it, although it would mean every
    individual client has to implement it separately.

    Yes, but is that a big problem? Yes, when I think about it, I see that
    the client would have to keep the list of deleted items until the end of
    the whole operation, which is not nice.

    I wanted to avoid revving the notification API again, since it touches a
    lot of places. Maybe there is some other way around this.

    Thanks,
    //Peter

    To unsubscribe, e-mail: dev-unsubscribe (AT) subversion (DOT) tigris.org
    For additional commands, e-mail: dev-help (AT) subversion (DOT) tigris.org
  • No.15 | | 624 bytes | |

    Good evening,

    After reading some of the comments and thinking this through again I
    have to agree with Max that queuing up the DELETE messages is a bad
    idea.

    So I think this patch is dead in the water. I put a link to the ML in
    the issue, but some more design would be needed.
    #desc12

    I think the best solution is to get the server to generate the replaced
    message (somehow) but that knowledge is a bit beyond me right now.

    I do suggest that the new enumeration value be added for the 1.3 release
    if that is an appropriate place for binary compatibility.

    Cheers,
    Chris

Re: Issue 571: A+D should be R in update


max 4000 letters.
Your nickname that display:
In order to stop the spam: 3 + 2 =
QUESTION ON "Development"

EMSDN.COM