patch: ensure valid git diffs if source/destination file is missing (
issue4046)
This is arguably a workaround, a better fix may be in the repo to
ensure that it won't list a file 'modified' unless there is a file
context for the previous version.
--- a/mercurial/patch.py Sun Oct 27 00:24:25 2013 +0900
+++ b/mercurial/patch.py Sun Oct 13 08:38:30 2013 -0400
@@ -1703,7 +1703,7 @@
tn = getfilectx(f, ctx2).data()
a, b = f, f
if opts.git or losedatafn:
- if f in added:
+ if f in added or (f in modified and to is None):
mode = gitmode[ctx2.flags(f)]
if f in copy or f in copyto:
if opts.git:
@@ -1739,7 +1739,7 @@
if not opts.git and not tn:
# regular diffs cannot represent new empty file
losedatafn(f)
- elif f in removed:
+ elif f in removed or (f in modified and tn is None):
if opts.git:
# have we already reported a copy above?
if ((f in copy and copy[f] in added
--- a/tests/test-git-export.t Sun Oct 27 00:24:25 2013 +0900
+++ b/tests/test-git-export.t Sun Oct 13 08:38:30 2013 -0400
@@ -360,3 +360,23 @@
+foo
$ hg ci -m 'add filename with spaces'
+Additions should be properly marked even in the middle of a merge
+
+ $ hg up -r -2
+ 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+ $ echo "New File" >> inmerge
+ $ hg add inmerge
+ $ hg ci -m "file in merge"
+ created new head
+ $ hg up 23
+ 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
+ $ hg merge
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ (branch merge, don't forget to commit)
+ $ hg diff -g
+ diff --git a/inmerge b/inmerge
+ new file mode 100644
+ --- /dev/null
+ +++ b/inmerge
+ @@ -0,0 +1,1 @@
+ +New File
--- a/tests/test-shelve.t Sun Oct 27 00:24:25 2013 +0900
+++ b/tests/test-shelve.t Sun Oct 13 08:38:30 2013 -0400
@@ -228,6 +228,7 @@
+a
+>>>>>>> other
diff --git a/b.rename/b b/b.rename/b
+ new file mode 100644
--- /dev/null
+++ b/b.rename/b
@@ -0,0 +1,1 @@
@@ -239,6 +240,7 @@
@@ -1,1 +0,0 @@
-b
diff --git a/c.copy b/c.copy
+ new file mode 100644
--- /dev/null
+++ b/c.copy
@@ -0,0 +1,1 @@