Mercurial > hg-stable
changeset 3701:05c8704a3743
handle git patches that rename a file to more than one destination
author | Alexis S. L. Carvalho <alexis@cecm.usp.br> |
---|---|
date | Mon, 20 Nov 2006 19:32:45 -0200 |
parents | 4c158de5f245 |
children | 70c3ee224c08 |
files | mercurial/patch.py tests/test-git-import tests/test-git-import.out |
diffstat | 3 files changed, 38 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/patch.py Mon Nov 20 19:32:43 2006 -0200 +++ b/mercurial/patch.py Mon Nov 20 19:32:45 2006 -0200 @@ -341,7 +341,7 @@ if not patches: return copies = [] - removes = [] + removes = {} cfiles = patches.keys() cwd = repo.getcwd() if cwd: @@ -350,16 +350,18 @@ ctype, gp = patches[f] if ctype == 'RENAME': copies.append((gp.oldpath, gp.path, gp.copymod)) - removes.append(gp.oldpath) + removes[gp.oldpath] = 1 elif ctype == 'COPY': copies.append((gp.oldpath, gp.path, gp.copymod)) elif ctype == 'DELETE': - removes.append(gp.path) + removes[gp.path] = 1 for src, dst, after in copies: if not after: copyfile(src, dst, repo.root) repo.copy(src, dst, wlock=wlock) + removes = removes.keys() if removes: + removes.sort() repo.remove(removes, True, wlock=wlock) for f in patches: ctype, gp = patches[f]
--- a/tests/test-git-import Mon Nov 20 19:32:43 2006 -0200 +++ b/tests/test-git-import Mon Nov 20 19:32:45 2006 -0200 @@ -127,3 +127,19 @@ hg locate copy2 hg cat rename2 + +echo % one file renamed multiple times +hg import -mmultirenames - <<EOF +diff --git a/rename2 b/rename3 +rename from rename2 +rename to rename3 +diff --git a/rename2 b/rename3-2 +rename from rename2 +rename to rename3-2 +EOF +hg log -vCr. --template '{rev} {files} / {file_copies%filecopy}\n' + +hg locate rename2 rename3 rename3-2 +hg cat rename3 +echo +hg cat rename3-2
--- a/tests/test-git-import.out Mon Nov 20 19:32:43 2006 -0200 +++ b/tests/test-git-import.out Mon Nov 20 19:32:45 2006 -0200 @@ -37,3 +37,20 @@ b c a +% one file renamed multiple times +applying patch from stdin +9 rename2 rename3 rename3-2 / rename3 (rename2)rename3-2 (rename2) +rename2: No such file or directory +rename3 +rename3-2 +a +a +b +c +a + +a +a +b +c +a