Marc Strapetz wrote: > Using copy with the new metadataOnly option (through the API) only allows to > "move" or "copy" a missing file onto an unversioned file. It could also be > helpful to copy/move metadata from a removed (or replaced) source to an > already added (or replaced) target. > > > Use case 1: the user has removed file "a" and moved file "b" to file "a" > without using SVN: > > $ svn status > M a > ! b > > Goal is to preserve "b"'s history for the new "a" and have the history of > the old "a" being ended.
Marc, If I understand correctly, the goal of this example is to make the version control operations reflect the filesystem operations, so that we end up with: path 'a': replaced with a copy from 'b' path 'b': deleted (or rather the object that was here has been moved to path 'a') > With metadataOnly being more tolerant, this could > then be done by: > > $ svn rm --keep-local a > $ svn add a > $ svn cp --metadata-only b a I don't understand why you suggest that sequence of commands. I don't expect 'svn cp' should allow copying to a destination that's already under version control (that is, 'a' after 'svn add a'), metadata-only or not. I would expect 'svn cp --metadata-only' to do everything just the same as plain 'svn cp' except not touch or look at what's on disk: so not try to copy the disk file and not care about whether the file is present on disk at either the source or target location. Therefore I think the appropriate sequence for your example would be: $ svn rm --keep-local a $ svn mv --metadata-only b a or, more-or-less equivalently (but without 'local move tracking'): $ svn rm --keep-local a $ svn cp --metadata-only b a $ svn rm --metadata-only b In other words, I would expect the required svn metadata-only commands to mirror the disk-level commands that the user performed initially. > Use case 2: the user has moved file "a" to file "b" and created a new file > "a" without using SVN: > > $ svn status > M a > ? b > > Goal is to preserve old "a"'s history for "b" and start a new history for > new "a". With metadataOnly being more tolerant, this could then be done by: > > $ svn rm --keep-local a > $ svn add a > $ svn cp --metadata-only a b And there again, I would expect: $ svn mv --metadata-only a b $ svn add a or $ svn cp --metadata-only a b $ svn rm --metadata-only a $ svn add a Does that make more sense? - Julian