# HG changeset patch # User Patrick Mezard # Date 1285620430 -7200 # Node ID 77600d697d0e60a74e39aaba6771c5fd8c05cabb # Parent 2702bea2ee76d0633841a176ba9425f8550c12f7 patch: fix rename text to binary file (issue2400) diff -r 2702bea2ee76 -r 77600d697d0e mercurial/patch.py --- a/mercurial/patch.py Mon Sep 27 10:48:21 2010 -0500 +++ b/mercurial/patch.py Mon Sep 27 22:47:10 2010 +0200 @@ -1184,7 +1184,9 @@ gp.path = pathstrip(gp.path, strip - 1)[1] if gp.oldpath: gp.oldpath = pathstrip(gp.oldpath, strip - 1)[1] - if gp.op in ('COPY', 'RENAME'): + # Binary patches really overwrite target files, copying them + # will just make it fails with "target file exists" + if gp.op in ('COPY', 'RENAME') and not gp.binary: copyfn(gp.oldpath, gp.path, cwd) changed[gp.path] = gp else: diff -r 2702bea2ee76 -r 77600d697d0e tests/test-git-import --- a/tests/test-git-import Mon Sep 27 10:48:21 2010 -0500 +++ b/tests/test-git-import Mon Sep 27 22:47:10 2010 +0200 @@ -1,5 +1,7 @@ #!/bin/sh +. $TESTDIR/helpers.sh + hg init a cd a @@ -226,5 +228,20 @@ copy to foo3 EOF hg tip -q +cat foo3 -cat foo3 +echo % move text file and patch as binary +echo a > text2 +hg ci -Am0 +hg import -d "1000000 0" -m rename-as-binary - <<"EOF" +diff --git a/text2 b/binary2 +rename from text2 +rename to binary2 +index 78981922613b2afb6025042ff6bd878ac1994e85..10efcb362e9f3b3420fcfbfc0e37f3dc16e29757 +GIT binary patch +literal 5 +Mc$`b*O5$Pw00T?_*Z=?k + +EOF +cat binary2 | repr +hg st --copies --change . \ No newline at end of file diff -r 2702bea2ee76 -r 77600d697d0e tests/test-git-import.out --- a/tests/test-git-import.out Mon Sep 27 10:48:21 2010 -0500 +++ b/tests/test-git-import.out Mon Sep 27 22:47:10 2010 +0200 @@ -80,3 +80,10 @@ applying patch from stdin 14:c4cd9cdeaa74 foo +% move text file and patch as binary +adding text2 +applying patch from stdin +'a\nb\n\x00' +A binary2 + text2 +R text2