mercurial/patch.py
changeset 17946 1e13b1184292
parent 17945 45766e2a7384
child 17968 a9f4a6076740
equal deleted inserted replaced
17945:45766e2a7384 17946:1e13b1184292
     8 
     8 
     9 import cStringIO, email.Parser, os, errno, re
     9 import cStringIO, email.Parser, os, errno, re
    10 import tempfile, zlib, shutil
    10 import tempfile, zlib, shutil
    11 
    11 
    12 from i18n import _
    12 from i18n import _
    13 from node import hex, short
    13 from node import hex, nullid, short
    14 import base85, mdiff, scmutil, util, diffhelpers, copies, encoding, error
    14 import base85, mdiff, scmutil, util, diffhelpers, copies, encoding, error
    15 import context
    15 import context
    16 
    16 
    17 gitre = re.compile('diff --git a/(.*) b/(.*)')
    17 gitre = re.compile('diff --git a/(.*) b/(.*)')
    18 
    18 
  1659 
  1659 
  1660     def addmodehdr(header, omode, nmode):
  1660     def addmodehdr(header, omode, nmode):
  1661         if omode != nmode:
  1661         if omode != nmode:
  1662             header.append('old mode %s\n' % omode)
  1662             header.append('old mode %s\n' % omode)
  1663             header.append('new mode %s\n' % nmode)
  1663             header.append('new mode %s\n' % nmode)
       
  1664 
       
  1665     def addindexmeta(meta, revs):
       
  1666         if opts.git:
       
  1667             i = len(revs)
       
  1668             if i==2:
       
  1669                 meta.append('index %s..%s\n' % tuple(revs))
       
  1670             elif i==3:
       
  1671                 meta.append('index %s,%s..%s\n' % tuple(revs))
       
  1672 
       
  1673     def gitindex(text):
       
  1674         if not text:
       
  1675             return hex(nullid)
       
  1676         l = len(text)
       
  1677         s = util.sha1('blob %d\0' % l)
       
  1678         s.update(text)
       
  1679         return s.hexdigest()
  1664 
  1680 
  1665     def diffline(a, b, revs):
  1681     def diffline(a, b, revs):
  1666         if opts.git:
  1682         if opts.git:
  1667             line = 'diff --git a/%s b/%s\n' % (a, b)
  1683             line = 'diff --git a/%s b/%s\n' % (a, b)
  1668         elif not repo.ui.quiet:
  1684         elif not repo.ui.quiet:
  1761         if dodiff:
  1777         if dodiff:
  1762             if opts.git or revs:
  1778             if opts.git or revs:
  1763                 header.insert(0, diffline(join(a), join(b), revs))
  1779                 header.insert(0, diffline(join(a), join(b), revs))
  1764             if dodiff == 'binary':
  1780             if dodiff == 'binary':
  1765                 text = mdiff.b85diff(to, tn)
  1781                 text = mdiff.b85diff(to, tn)
       
  1782                 if text:
       
  1783                     addindexmeta(header, [gitindex(to), gitindex(tn)])
  1766             else:
  1784             else:
  1767                 text = mdiff.unidiff(to, date1,
  1785                 text = mdiff.unidiff(to, date1,
  1768                                     # ctx2 date may be dynamic
  1786                                     # ctx2 date may be dynamic
  1769                                     tn, util.datestr(ctx2.date()),
  1787                                     tn, util.datestr(ctx2.date()),
  1770                                     join(a), join(b), opts=opts)
  1788                                     join(a), join(b), opts=opts)