mercurial/patch.py
changeset 7308 b6f5490effbf
parent 7267 6a51ca1e05c3
child 7319 eae1767cc6a8
equal deleted inserted replaced
7307:56380212d630 7308:b6f5490effbf
  1167 def _addmodehdr(header, omode, nmode):
  1167 def _addmodehdr(header, omode, nmode):
  1168     if omode != nmode:
  1168     if omode != nmode:
  1169         header.append('old mode %s\n' % omode)
  1169         header.append('old mode %s\n' % omode)
  1170         header.append('new mode %s\n' % nmode)
  1170         header.append('new mode %s\n' % nmode)
  1171 
  1171 
  1172 def diff(repo, node1=None, node2=None, match=None,
  1172 def diff(repo, node1=None, node2=None, match=None, changes=None, opts=None):
  1173          fp=None, changes=None, opts=None):
  1173     '''yields diff of changes to files between two nodes, or node and
  1174     '''print diff of changes to files between two nodes, or node and
       
  1175     working directory.
  1174     working directory.
  1176 
  1175 
  1177     if node1 is None, use first dirstate parent instead.
  1176     if node1 is None, use first dirstate parent instead.
  1178     if node2 is None, compare node1 with working directory.'''
  1177     if node2 is None, compare node1 with working directory.'''
  1179 
  1178 
  1180     if not match:
  1179     if not match:
  1181         match = cmdutil.matchall(repo)
  1180         match = cmdutil.matchall(repo)
  1182 
  1181 
  1183     if opts is None:
  1182     if opts is None:
  1184         opts = mdiff.defaultopts
  1183         opts = mdiff.defaultopts
  1185     if fp is None:
       
  1186         fp = repo.ui
       
  1187 
  1184 
  1188     if not node1:
  1185     if not node1:
  1189         node1 = repo.dirstate.parents()[0]
  1186         node1 = repo.dirstate.parents()[0]
  1190 
  1187 
  1191     flcache = {}
  1188     flcache = {}
  1272             else:
  1269             else:
  1273                 text = mdiff.unidiff(to, date1,
  1270                 text = mdiff.unidiff(to, date1,
  1274                                     # ctx2 date may be dynamic
  1271                                     # ctx2 date may be dynamic
  1275                                     tn, util.datestr(ctx2.date()),
  1272                                     tn, util.datestr(ctx2.date()),
  1276                                     a, b, r, opts=opts)
  1273                                     a, b, r, opts=opts)
  1277             if text or len(header) > 1:
  1274             if header and (text or len(header) > 1):
  1278                 fp.write(''.join(header))
  1275                 yield ''.join(header)
  1279             fp.write(text)
  1276             if text:
       
  1277                 yield text
  1280 
  1278 
  1281 def export(repo, revs, template='hg-%h.patch', fp=None, switch_parent=False,
  1279 def export(repo, revs, template='hg-%h.patch', fp=None, switch_parent=False,
  1282            opts=None):
  1280            opts=None):
  1283     '''export changesets as hg patches.'''
  1281     '''export changesets as hg patches.'''
  1284 
  1282 
  1310         if len(parents) > 1:
  1308         if len(parents) > 1:
  1311             fp.write("# Parent  %s\n" % hex(parents[1]))
  1309             fp.write("# Parent  %s\n" % hex(parents[1]))
  1312         fp.write(ctx.description().rstrip())
  1310         fp.write(ctx.description().rstrip())
  1313         fp.write("\n\n")
  1311         fp.write("\n\n")
  1314 
  1312 
  1315         diff(repo, prev, node, fp=fp, opts=opts)
  1313         for chunk in diff(repo, prev, node, opts=opts):
       
  1314             fp.write(chunk)
  1316         if fp not in (sys.stdout, repo.ui):
  1315         if fp not in (sys.stdout, repo.ui):
  1317             fp.close()
  1316             fp.close()
  1318 
  1317 
  1319     for seqno, rev in enumerate(revs):
  1318     for seqno, rev in enumerate(revs):
  1320         single(rev, seqno+1, fp)
  1319         single(rev, seqno+1, fp)