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.
This commit is contained in:
Johan Bjork 2013-10-13 08:38:30 -04:00
parent 6371252cb7
commit 6055bcdec2
3 changed files with 24 additions and 2 deletions

View File

@ -1703,7 +1703,7 @@ def trydiff(repo, revs, ctx1, ctx2, modified, added, removed,
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 @@ def trydiff(repo, revs, ctx1, ctx2, modified, added, removed,
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

View File

@ -360,3 +360,23 @@ There should be a trailing TAB if there are spaces in the file name:
+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

View File

@ -228,6 +228,7 @@ ensure that we have a merge with unresolved conflicts
+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 @@ ensure that we have a merge with unresolved conflicts
@@ -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 @@