Re: Rename tracking - client side
From: Julian Foad <julian.foad_at_wandisco.com>
Date: Fri, 28 May 2010 17:59:40 +0100
I (Julian Foad) wrote:
I made a start on documenting what's needed for the client side of
[[[
[[[
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,
This document specifies the desired client-side behaviour for tracking
A local, scheduled rename can result from a Subversion "rename" command
The other necessary part of client-side behaviour is handling an
A. What is a Rename?
A "rename" operation moves a node from one path to another, in a
No distinction is made between the words "rename" and "move": either
No distinction is made between renaming a file, a directory or a
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
- atomic (indivisible), and
- not quite the same as the separate "svn delete" and "svn copy"
The rename is remembered and propagated as a rename. One result is
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,
- Incoming edit to the source path of any rename (even if a
- Incoming edit to the target path: tree conflict (?) (not possible
- 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
C. Commit
- Transmit the rename information to the server.
- See issue #3632, "Subversion's RA subsystem should carry rename
D. Other WC commands
- 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
- copy/move a dir with a whole rename inside it: DTRT (ordering?)
- delete target path: convert the rename into a delete.
- info: on source node, display the target path; on target path,
- rename from source path: fail (can't reference a gone-away node)
- rename from target path: adapt the original rename
- status: indicate source and target paths are parts of a rename
- ...
3. Behaviour of Incoming Renames
An incoming rename is a rename described to the client by the server
A. Automatically merge the incoming rename with the local working copy,
- Incoming rename, identical to a local rename: merge the two
- Incoming rename, where source is source of a local rename:
- Incoming rename, where target is target of a local rename:
- Incoming rename, where source is target of a local rename:
- Incoming rename, where target is source of a local rename:
- Incoming rename, local edit: rename the local node, keeping the
- Incoming rename, local delete: tree conflict
B. Source of Information on Incoming Renames
- The intended source is from an updated RA interface. See issue
- A possible backward compatibility measure, when talking to servers
4. Copies
### TO DO
Copies should exhibit behaviour in line with renames. During a merge,
]]]
- Julian
|
This is an archived mail posted to the Subversion Dev mailing list.
This site is subject to the Apache Privacy Policy and the Apache Public Forum Archive Policy.