Mercurial > hg-stable
changeset 1514:faf46d810a85
avoid to copy more than one file to the same destination file
author | Robin Farine <robin.farine@terminus.org> |
---|---|
date | Tue, 08 Nov 2005 10:35:13 -0800 |
parents | 5c3b93b244aa |
children | 3bd6d27cb81c |
files | mercurial/commands.py tests/test-rename tests/test-rename.out |
diffstat | 3 files changed, 26 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/commands.py Tue Nov 08 10:35:09 2005 -0800 +++ b/mercurial/commands.py Tue Nov 08 10:35:13 2005 -0800 @@ -790,6 +790,7 @@ cwd = repo.getcwd() errors = 0 copied = [] + targets = {} def okaytocopy(abs, rel, exact): reasons = {'?': _('is not managed'), @@ -803,7 +804,12 @@ def copy(abssrc, relsrc, target, exact): abstarget = util.canonpath(repo.root, cwd, target) reltarget = util.pathto(cwd, abstarget) - if os.path.exists(reltarget): + prevsrc = targets.get(abstarget) + if prevsrc is not None: + ui.warn(_('%s: not overwriting - %s collides with %s\n') % + (reltarget, abssrc, prevsrc)) + return + elif os.path.exists(reltarget): if opts['force']: os.unlink(reltarget) else: @@ -829,6 +835,7 @@ (relsrc, inst.strerror)) errors += 1 return + targets[abstarget] = abssrc repo.copy(abssrc, abstarget) copied.append((abssrc, relsrc, exact))
--- a/tests/test-rename Tue Nov 08 10:35:09 2005 -0800 +++ b/tests/test-rename Tue Nov 08 10:35:13 2005 -0800 @@ -76,3 +76,9 @@ hg rename --force d1/ba d1/ca hg status hg update -C + +echo "# do not copy more than one source file to the same destination file" +mkdir d3 +hg rename d1/* d2/* d3 +hg status +hg update -C
--- a/tests/test-rename.out Tue Nov 08 10:35:09 2005 -0800 +++ b/tests/test-rename.out Tue Nov 08 10:35:13 2005 -0800 @@ -101,3 +101,15 @@ # replace a symlink with a file A d1/ca R d1/ba +# do not copy more than one source file to the same destination file +copying d1/d11/a1 to d3/d11/a1 +d3/b: not overwriting - d2/b collides with d1/b +removing d1/d11/a1 +A d3/a +A d3/b +A d3/ba +A d3/d11/a1 +R d1/a +R d1/b +R d1/ba +R d1/d11/a1