Mercurial > hg
changeset 16362:16b75661828e stable
mdiff: fix diff header generation for files with spaces (issue3357)
diff ---/+++ should end filenames with a TAB when they contain spaces. Current
code failed to do so when only the +++ file had spaces. This only happened with
git renames from a name without space to one with space.
author | Patrick Mezard <patrick@mezard.eu> |
---|---|
date | Thu, 05 Apr 2012 15:39:07 +0200 |
parents | a1b6a63f9f39 |
children | f64b25f147d7 |
files | mercurial/mdiff.py tests/test-diff-unified.t |
diffstat | 2 files changed, 61 insertions(+), 10 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/mdiff.py Thu Apr 05 19:15:23 2012 +0200 +++ b/mercurial/mdiff.py Thu Apr 05 15:39:07 2012 +0200 @@ -156,10 +156,10 @@ return ' '.join(parts) + '\n' def unidiff(a, ad, b, bd, fn1, fn2, r=None, opts=defaultopts): - def datetag(date, addtab=True): + def datetag(date, fn=None): if not opts.git and not opts.nodates: return '\t%s\n' % date - if addtab and ' ' in fn1: + if fn and ' ' in fn: return '\t\n' return '\n' @@ -177,19 +177,19 @@ elif not a: b = splitnewlines(b) if a is None: - l1 = '--- /dev/null%s' % datetag(epoch, False) + l1 = '--- /dev/null%s' % datetag(epoch) else: - l1 = "--- %s%s" % ("a/" + fn1, datetag(ad)) - l2 = "+++ %s%s" % ("b/" + fn2, datetag(bd)) + l1 = "--- %s%s" % ("a/" + fn1, datetag(ad, fn1)) + l2 = "+++ %s%s" % ("b/" + fn2, datetag(bd, fn2)) l3 = "@@ -0,0 +1,%d @@\n" % len(b) l = [l1, l2, l3] + ["+" + e for e in b] elif not b: a = splitnewlines(a) - l1 = "--- %s%s" % ("a/" + fn1, datetag(ad)) + l1 = "--- %s%s" % ("a/" + fn1, datetag(ad, fn1)) if b is None: - l2 = '+++ /dev/null%s' % datetag(epoch, False) + l2 = '+++ /dev/null%s' % datetag(epoch) else: - l2 = "+++ %s%s" % ("b/" + fn2, datetag(bd)) + l2 = "+++ %s%s" % ("b/" + fn2, datetag(bd, fn2)) l3 = "@@ -1,%d +0,0 @@\n" % len(a) l = [l1, l2, l3] + ["-" + e for e in a] else: @@ -199,8 +199,8 @@ if not l: return "" - l.insert(0, "--- a/%s%s" % (fn1, datetag(ad))) - l.insert(1, "+++ b/%s%s" % (fn2, datetag(bd))) + l.insert(0, "--- a/%s%s" % (fn1, datetag(ad, fn1))) + l.insert(1, "+++ b/%s%s" % (fn2, datetag(bd, fn2))) for ln in xrange(len(l)): if l[ln][-1] != '\n':
--- a/tests/test-diff-unified.t Thu Apr 05 19:15:23 2012 +0200 +++ b/tests/test-diff-unified.t Thu Apr 05 15:39:07 2012 +0200 @@ -140,3 +140,54 @@ +c3 @@ -3,1 +4,0 @@ c4 -c5 + + $ echo a > f1 + $ hg ci -m movef2 + +Test diff headers terminating with TAB when necessary (issue3357) +Regular diff --nodates, file creation + + $ hg mv f1 'f 1' + $ echo b > 'f 1' + $ hg diff --nodates 'f 1' + diff -r 7574207d0d15 f 1 + --- /dev/null + +++ b/f 1 + @@ -0,0 +1,1 @@ + +b + +Git diff, adding space + + $ hg diff --git + diff --git a/f1 b/f 1 + rename from f1 + rename to f 1 + --- a/f1 + +++ b/f 1 + @@ -1,1 +1,1 @@ + -a + +b + +Regular diff --nodates, file deletion + + $ hg ci -m addspace + $ hg mv 'f 1' f1 + $ echo a > f1 + $ hg diff --nodates 'f 1' + diff -r ca50fe67c9c7 f 1 + --- a/f 1 + +++ /dev/null + @@ -1,1 +0,0 @@ + -b + +Git diff, removing space + + $ hg diff --git + diff --git a/f 1 b/f1 + rename from f 1 + rename to f1 + --- a/f 1 + +++ b/f1 + @@ -1,1 +1,1 @@ + -b + +a