Mercurial > hg-stable
changeset 16112:d7829b2ecf32 stable
import: handle git renames and --similarity (issue3187)
There is no reason to discard copy sources from the set of files considered by
addremove(). It was done to handle the case where a first patch would create
'a' and a second one would move 'a' to 'b'. If these patches were applied with
--no-commit, 'a' would first be marked as added, then unlinked and dropped from
the dirstate but still passed to addremove(). A better fix is thus to exclude
removed files which ends being dropped from the dirstate instead of removed.
Reported by Jason Harris <jason@jasonfharris.com>
author | Patrick Mezard <patrick@mezard.eu> |
---|---|
date | Thu, 16 Feb 2012 13:03:42 +0100 |
parents | 131d1a09108a |
children | 3f75fb837638 |
files | mercurial/patch.py tests/test-import-git.t tests/test-import.t |
diffstat | 3 files changed, 25 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/patch.py Thu Feb 16 12:56:48 2012 +0100 +++ b/mercurial/patch.py Thu Feb 16 13:03:42 2012 +0100 @@ -475,9 +475,15 @@ addremoved = set(self.changed) for src, dst in self.copied: scmutil.dirstatecopy(self.ui, self.repo, wctx, src, dst) - addremoved.discard(src) - if (not self.similarity) and self.removed: + if self.removed: wctx.forget(sorted(self.removed)) + for f in self.removed: + if f not in self.repo.dirstate: + # File was deleted and no longer belongs to the + # dirstate, it was probably marked added then + # deleted, and should not be considered by + # addremove(). + addremoved.discard(f) if addremoved: cwd = self.repo.getcwd() if cwd:
--- a/tests/test-import-git.t Thu Feb 16 12:56:48 2012 +0100 +++ b/tests/test-import-git.t Thu Feb 16 13:03:42 2012 +0100 @@ -402,6 +402,23 @@ A b a R a + +Renames, similarity and git diff + + $ hg revert -aC + undeleting a + forgetting b + $ rm b + $ hg import --similarity 90 --no-commit - <<EOF + > diff --git a/a b/b + > rename from a + > rename to b + > EOF + applying patch from stdin + $ hg st --copies + A b + a + R a $ cd .. Pure copy with existing destination
--- a/tests/test-import.t Thu Feb 16 12:56:48 2012 +0100 +++ b/tests/test-import.t Thu Feb 16 13:03:42 2012 +0100 @@ -663,7 +663,6 @@ applying ../rename.diff patching file a patching file b - removing a adding b recording removal of a as rename to b (88% similar) applied to working directory @@ -679,7 +678,6 @@ applying ../rename.diff patching file a patching file b - removing a adding b applied to working directory $ hg st -C