Mercurial > hg-stable
changeset 5403:477136fa6571
Always copy the necessary files before applying a git patch
This patch removes the "copymod" attribute from the gitpatch
class.
AFAICS, that attribute was only used to delay the copying of
renamed/copied files if there are no other changes to the target,
but in this case, if there are changes to the source, we'll end
up copying the wrong version.
This should fix issue762.
author | Alexis S. L. Carvalho <alexis@cecm.usp.br> |
---|---|
date | Sat, 06 Oct 2007 15:30:15 -0300 |
parents | ad0b580cad35 |
children | 67d3daa8ac42 |
files | mercurial/patch.py tests/test-git-import tests/test-git-import.out |
diffstat | 3 files changed, 23 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/patch.py Sat Oct 06 15:30:15 2007 -0300 +++ b/mercurial/patch.py Sat Oct 06 15:30:15 2007 -0300 @@ -151,7 +151,6 @@ self.oldpath = None self.mode = None self.op = 'MODIFY' - self.copymod = False self.lineno = 0 self.binary = False @@ -182,7 +181,6 @@ elif gp: if line.startswith('--- '): if gp.op in ('COPY', 'RENAME'): - gp.copymod = True dopatch |= GP_FILTER gitpatches.append(gp) gp = None @@ -858,7 +856,7 @@ (dopatch, gitpatches) = readgitpatch(fp, firstline) for gp in gitpatches: - if gp.copymod: + if gp.op in ('COPY', 'RENAME'): copyfile(gp.oldpath, gp.path, basedir=cwd) fp.seek(pos) @@ -1030,15 +1028,13 @@ for f in patches: ctype, gp = patches[f] if ctype == 'RENAME': - copies.append((gp.oldpath, gp.path, gp.copymod)) + copies.append((gp.oldpath, gp.path)) removes[gp.oldpath] = 1 elif ctype == 'COPY': - copies.append((gp.oldpath, gp.path, gp.copymod)) + copies.append((gp.oldpath, gp.path)) elif ctype == 'DELETE': removes[gp.path] = 1 - for src, dst, after in copies: - if not after: - copyfile(src, dst, repo.root) + for src, dst in copies: repo.copy(src, dst) removes = removes.keys() if removes:
--- a/tests/test-git-import Sat Oct 06 15:30:15 2007 -0300 +++ b/tests/test-git-import Sat Oct 06 15:30:15 2007 -0300 @@ -198,3 +198,19 @@ EOF cat "foo bar" +echo % copy then modify the original file +hg import -m copy-mod-orig - <<EOF +diff --git a/foo2 b/foo2 +index 257cc56..fe08ec6 100644 +--- a/foo2 ++++ b/foo2 +@@ -1 +1,2 @@ + foo ++new line +diff --git a/foo2 b/foo3 +similarity index 100% +copy from foo2 +copy to foo3 +EOF + +cat foo3