From patchwork Tue Oct 22 00:11:44 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [STABLE] patch: Always ensure valid git diffs in case source/destination file is missing (issue4046) From: =?utf-8?q?Johan_Bj=C3=B6rk?= X-Patchwork-Id: 2799 Message-Id: <5c1c1bfada42fccd41fe.1382400704@phbs-MacBook-Air.local> To: mercurial-devel@selenic.com Date: Mon, 21 Oct 2013 20:11:44 -0400 # HG changeset patch # User Johan Bjork # Date 1381667910 14400 # Sun Oct 13 08:38:30 2013 -0400 # Branch stable # Node ID 5c1c1bfada42fccd41fe4a3a4236be3ddadc1d72 # Parent 2c886dedd9021598b6290d95ea0f068731ea4e2b patch: Always ensure valid git diffs in case 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. diff -r 2c886dedd902 -r 5c1c1bfada42 mercurial/patch.py --- a/mercurial/patch.py Mon Oct 21 10:50:58 2013 -0700 +++ b/mercurial/patch.py Sun Oct 13 08:38:30 2013 -0400 @@ -1693,6 +1693,7 @@ revs = None for f in sorted(modified + added + removed): + #print f to = None tn = None dodiff = True @@ -1703,7 +1704,9 @@ 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 not to): + #print "added: " + str(f in added) + #print "removed: " + str(f in removed) mode = gitmode[ctx2.flags(f)] if f in copy or f in copyto: if opts.git: @@ -1720,7 +1723,8 @@ op = 'copy' header.append('%s from %s\n' % (op, join(a))) header.append('%s to %s\n' % (op, join(f))) - to = getfilectx(a, ctx1).data() + if a in man1: + to = getfilectx(a, ctx1).data() else: losedatafn(f) else: @@ -1739,7 +1743,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 not tn): if opts.git: # have we already reported a copy above? if ((f in copy and copy[f] in added diff -r 2c886dedd902 -r 5c1c1bfada42 tests/test-git-export.t --- a/tests/test-git-export.t Mon Oct 21 10:50:58 2013 -0700 +++ 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