git binary patches: don't print the header for identical files
authorAlexis S. L. Carvalho <alexis@cecm.usp.br>
Sat, 17 Feb 2007 09:55:00 -0200
changeset 4106 797dbdd4d7e1
parent 4105 ed46895aa38c
child 4107 f5f171785e29
git binary patches: don't print the header for identical files
mercurial/patch.py
tests/test-diff-binary-file.out
--- a/mercurial/patch.py	Sat Feb 17 09:54:59 2007 -0200
+++ b/mercurial/patch.py	Sat Feb 17 09:55:00 2007 -0200
@@ -415,14 +415,15 @@
     tohash = gitindex(to)
     tnhash = gitindex(tn)
     if tohash == tnhash:
-        return
+        return ""
+
     # TODO: deltas
-    fp.write('index %s..%s\nGIT binary patch\nliteral %s\n' %
-             (tohash, tnhash, len(tn)))
-
-    tn = ''.join([fmtline(l) for l in chunk(zlib.compress(tn))])
-    fp.write(tn)
-    fp.write('\n')
+    ret = ['index %s..%s\nGIT binary patch\nliteral %s\n' %
+           (tohash, tnhash, len(tn))]
+    for l in chunk(zlib.compress(tn)):
+        ret.append(fmtline(l))
+    ret.append('\n')
+    return ''.join(ret)
 
 def diff(repo, node1=None, node2=None, files=None, match=util.always,
          fp=None, changes=None, opts=None):
@@ -615,11 +616,11 @@
                     dodiff = 'binary'
             r = None
             header.insert(0, 'diff --git a/%s b/%s\n' % (a, b))
-        if dodiff == 'binary':
-            fp.write(''.join(header))
-            b85diff(fp, to, tn)
-        elif dodiff:
-            text = mdiff.unidiff(to, date1, tn, date2(f), f, r, opts=opts)
+        if dodiff:
+            if dodiff == 'binary':
+                text = b85diff(fp, to, tn)
+            else:
+                text = mdiff.unidiff(to, date1, tn, date2(f), f, r, opts=opts)
             if text or len(header) > 1:
                 fp.write(''.join(header))
             fp.write(text)
--- a/tests/test-diff-binary-file.out	Sat Feb 17 09:54:59 2007 -0200
+++ b/tests/test-diff-binary-file.out	Sat Feb 17 09:55:00 2007 -0200
@@ -21,4 +21,3 @@
 gQItJW-{SoTm)8|5##k|m00000NkvXXu0mjf3JwksH2?qr
 
 % diff --git -r 0 -r 2
-diff --git a/binfile.bin b/binfile.bin