Mercurial > hg
changeset 14385:7709cc983025
patch: git metadata was ignored if strip > 1
gitpatch objects emitted by iterhunks() are modified in place by applydiff().
Processing them earlier improves iterhunks() isolation. applydiff() modifying
them should still be fixed though.
author | Patrick Mezard <pmezard@gmail.com> |
---|---|
date | Thu, 19 May 2011 22:44:01 +0200 |
parents | 9d59c596eb9e |
children | c2ef8cc50748 |
files | mercurial/patch.py tests/test-git-import.t |
diffstat | 2 files changed, 22 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/patch.py Thu May 19 22:44:01 2011 +0200 +++ b/mercurial/patch.py Thu May 19 22:44:01 2011 +0200 @@ -1158,14 +1158,12 @@ if not git: git = True gitpatches = scangitpatch(lr, x) - yield 'git', gitpatches for gp in gitpatches: changed[gp.path] = gp - # else error? + yield 'git', gitpatches # copy/rename + modify should modify target, not source - gp = changed.get(bfile) - if gp and (gp.op in ('COPY', 'DELETE', 'RENAME', 'ADD') - or gp.mode): + gp = changed[bfile] + if gp.op in ('COPY', 'DELETE', 'RENAME', 'ADD') or gp.mode: afile = bfile newfile = True elif x.startswith('---'):
--- a/tests/test-git-import.t Thu May 19 22:44:01 2011 +0200 +++ b/tests/test-git-import.t Thu May 19 22:44:01 2011 +0200 @@ -383,3 +383,22 @@ a 0 -1 unset b $ hg ci -m done $ cd .. + +Renames and strip + + $ hg init renameandstrip + $ cd renameandstrip + $ echo a > a + $ hg ci -Am adda + adding a + $ hg import --no-commit -p2 - <<EOF + > diff --git a/foo/a b/foo/b + > rename from foo/a + > rename to foo/b + > EOF + applying patch from stdin + $ hg st --copies + A b + a + R a + $ cd ..