mercurial/patch.py
changeset 17946 1e13b1184292
parent 17945 45766e2a7384
child 17968 a9f4a6076740
--- a/mercurial/patch.py	Thu Nov 15 15:06:32 2012 -0800
+++ b/mercurial/patch.py	Thu Nov 15 15:16:41 2012 -0800
@@ -10,7 +10,7 @@
 import tempfile, zlib, shutil
 
 from i18n import _
-from node import hex, short
+from node import hex, nullid, short
 import base85, mdiff, scmutil, util, diffhelpers, copies, encoding, error
 import context
 
@@ -1662,6 +1662,22 @@
             header.append('old mode %s\n' % omode)
             header.append('new mode %s\n' % nmode)
 
+    def addindexmeta(meta, revs):
+        if opts.git:
+            i = len(revs)
+            if i==2:
+                meta.append('index %s..%s\n' % tuple(revs))
+            elif i==3:
+                meta.append('index %s,%s..%s\n' % tuple(revs))
+
+    def gitindex(text):
+        if not text:
+            return hex(nullid)
+        l = len(text)
+        s = util.sha1('blob %d\0' % l)
+        s.update(text)
+        return s.hexdigest()
+
     def diffline(a, b, revs):
         if opts.git:
             line = 'diff --git a/%s b/%s\n' % (a, b)
@@ -1763,6 +1779,8 @@
                 header.insert(0, diffline(join(a), join(b), revs))
             if dodiff == 'binary':
                 text = mdiff.b85diff(to, tn)
+                if text:
+                    addindexmeta(header, [gitindex(to), gitindex(tn)])
             else:
                 text = mdiff.unidiff(to, date1,
                                     # ctx2 date may be dynamic