
             CLIENT-SIDE TRACKING OF RENAMES
             ===============================


CONTENTS

    1. Introduction

    2. Behaviour of Local Renames

    3. Behaviour of Incoming Renames

    4. Copies


1. Introduction

    See issue #3631, "Client-side tracking of renames", and issue #3630,
    "Rename tracking".

    This document specifies the desired client-side behaviour for tracking
    a rename.

    A local, scheduled rename can result from a Subversion "rename" command
    or from an incoming rename during an update, switch or merge.  The
    behaviour of local renames is specified in section 2.

    The other necessary part of client-side behaviour is handling an
    incoming rename during an update, switch or merge.  That behaviour is
    specified in section 3.

    A. What is a Rename?

        A "rename" operation moves a node from one path to another, in a
        single operation.  The original node is then in a different
        directory and/or has a new name within its directory.

        No distinction is made between the words "rename" and "move": either
        word refers to the operation that moves a node to a different
        directory and/or changes its base name.

        No distinction is made between renaming a file, a directory or a
        symlink, unless otherwise noted.

        A rename cannot change the node kind.

        A node can be renamed and edited in the same change.

    B. What is New?

        The rename operation can be viewed as having two halves - removal
        from the source path, and adding or copying to the target path - but
        unlike in previous versions of Subversion, these two actions are:

          - atomic (indivisible), and

          - not quite the same as the separate "svn delete" and "svn copy"
            operations.

        The rename is remembered and propagated as a rename.  One result is
        that when a node 'foo' is renamed to 'bar' in branch B1 and that
        change is then merged to branch B2, the corresponding node 'foo' in
        branch B2 is renamed to 'bar'.  In previous version of Subversion,
        that did not happen; instead, node 'foo' in B2 was deleted and then
        a new node 'bar' was created in B2 by copying the original 'foo'
        from B1.


2. Behaviour of Local Renames

    A local rename is a scheduled change in the working copy.

    A. Atomicity

        - commit either path: fail, or commit both halves (TBD)

        - resolve either path: fail, or resolve both halves (TBD)

        - revert either path: fail, or revert both halves (TBD)

        - merge from either path: fail, or include both halves (TBD)

        - update/switch: fail, or include both halves (TBD)

        - changelist: ?

        - export: ?

        - lock/unlock: ?

        - ...

    B. Incoming edits (from update/switch/merge)

       Here, "edit" means any modification including a property change or,
       for a directory, an add or delete or edit of a child.

        - Incoming edit to the source path of any rename (even if a
          replacement node exists at that path): apply to the target path.
          ### Or tree conflict if a replacement node exists?

        - Incoming edit to the target path: tree conflict (?) (not possible
          with up/sw)

        - Incoming add at the source path: tree conflict.

        - Incoming add at the target path: tree conflict.

        - Incoming delete of the source path: tree conflict.

        - Incoming delete of the target path: tree conflict.

        - For incoming renames, and cases where there is both an incoming
          rename and a local rename, see section 3.

    C. Commit

        - Transmit the rename information to the server.

        - See issue #3632, "Subversion's RA subsystem should carry rename
          information".

    D. Renaming and Copying

        - copy from source path: fail (can't reference a gone-away node)

        - copy from target path: record as copy of that target path? (can we
          guarantee ordering such that that will be propagated correctly?)

        - copy/move a dir with a whole rename inside it: DTRT (ordering?)

        - rename from source path: fail (can't reference a gone-away node)
          (unless the source has since been replaced by a new node, in which
          case that new node is referenced)

        - rename from target path: adapt the original rename

        ### Peter Samuelson says:
            I think this operation,    {mv A B; cp B C},
            should behave exactly like {cp A C; mv A B}.

    E. Other WC commands

        - delete target path: convert the rename into a delete.

        - 'svn info': on source node, display the target path; on target
          path, indicate it is a tracked rename.

        - 'svn status': indicate source and target paths are parts of a
          rename.

        - 'svn log --stop-on-copy' does not stop at a rename.

        - 'svn diff' and 'svnlook diff' do not show either a whole-file add
          or a whole-file delete, but just show an indication that the file
          was renamed and show any content change that was made at the same
          time.

        - ...


3. Behaviour of Incoming Renames

    An incoming rename is a rename described to the client by the server
    during an update, switch or merge operation.

    A. Automatically merge the incoming rename with the local working copy,
       if possible.  If not possible, raise a tree conflict.

        - Incoming rename, identical to a local rename: merge the two
          identical changes and unschedule the local rename

        - Incoming rename, where source is source of a local rename:
          adjust the local rename accordingly

        - Incoming rename, where target is target of a local rename:
          tree conflict

        - Incoming rename, where source is target of a local rename:
          tree conflict (not possible for up/sw)

        - Incoming rename, where target is source of a local rename:
          tree conflict (not possible for up/sw)

        - Incoming rename, local edit: rename the local node, keeping the
          local edits (including any unversioned nodes in it, if it's a dir)

        - Incoming rename, local delete: tree conflict

    B. Source of Information on Incoming Renames

        - The intended source is from an updated RA interface.  See issue
          #3632, "Subversion's RA subsystem should carry rename information"

        - A possible backward compatibility measure, when talking to servers
          that do not support rename tracking, could be to infer renames
          from heuristics on incoming deletes and copies.


4. Copies

    ### TO DO

    Copies should exhibit behaviour in line with renames.  During a merge,
    an incoming copy should result in a local copy from a local source,
    rather than a local copy from a source in the source branch.  ...

