mercurial/commands.py
changeset 1015 22571b8d35d3
parent 1014 e37cd99fa909
child 1016 836667830fee
equal deleted inserted replaced
1014:e37cd99fa909 1015:22571b8d35d3
   139         return pat
   139         return pat
   140     return open(make_filename(repo, r, pat, node, total, seqno, revwidth),
   140     return open(make_filename(repo, r, pat, node, total, seqno, revwidth),
   141                 mode)
   141                 mode)
   142 
   142 
   143 def dodiff(fp, ui, repo, node1, node2, files=None, match=util.always,
   143 def dodiff(fp, ui, repo, node1, node2, files=None, match=util.always,
   144            changes=None):
   144            changes=None, text=False):
   145     def date(c):
   145     def date(c):
   146         return time.asctime(time.gmtime(float(c[2].split(' ')[0])))
   146         return time.asctime(time.gmtime(float(c[2].split(' ')[0])))
   147 
   147 
   148     if not changes:
   148     if not changes:
   149         (c, a, d, u) = repo.changes(node1, node2, files, match = match)
   149         (c, a, d, u) = repo.changes(node1, node2, files, match = match)
   181     for f in c:
   181     for f in c:
   182         to = None
   182         to = None
   183         if f in mmap:
   183         if f in mmap:
   184             to = repo.file(f).read(mmap[f])
   184             to = repo.file(f).read(mmap[f])
   185         tn = read(f)
   185         tn = read(f)
   186         fp.write(mdiff.unidiff(to, date1, tn, date2, f, r))
   186         fp.write(mdiff.unidiff(to, date1, tn, date2, f, r, text=text))
   187     for f in a:
   187     for f in a:
   188         to = None
   188         to = None
   189         tn = read(f)
   189         tn = read(f)
   190         fp.write(mdiff.unidiff(to, date1, tn, date2, f, r))
   190         fp.write(mdiff.unidiff(to, date1, tn, date2, f, r, text=text))
   191     for f in d:
   191     for f in d:
   192         to = repo.file(f).read(mmap[f])
   192         to = repo.file(f).read(mmap[f])
   193         tn = None
   193         tn = None
   194         fp.write(mdiff.unidiff(to, date1, tn, date2, f, r))
   194         fp.write(mdiff.unidiff(to, date1, tn, date2, f, r, text=text))
   195 
   195 
   196 def show_changeset(ui, repo, rev=0, changenode=None, filelog=None, brinfo=None):
   196 def show_changeset(ui, repo, rev=0, changenode=None, filelog=None, brinfo=None):
   197     """show a single changeset or file revision"""
   197     """show a single changeset or file revision"""
   198     changelog = repo.changelog
   198     changelog = repo.changelog
   199     if filelog:
   199     if filelog:
   642     for src, abs, rel, exact in items:
   642     for src, abs, rel, exact in items:
   643         print fmt % (src, abs, rel, exactly[exact])
   643         print fmt % (src, abs, rel, exactly[exact])
   644 
   644 
   645 def diff(ui, repo, *pats, **opts):
   645 def diff(ui, repo, *pats, **opts):
   646     """diff working directory (or selected files)"""
   646     """diff working directory (or selected files)"""
   647     revs = []
       
   648     if opts['rev']:
       
   649         revs = map(lambda x: repo.lookup(x), opts['rev'])
       
   650 
       
   651     node1, node2 = None, None
   647     node1, node2 = None, None
       
   648     revs = [repo.lookup(x) for x in opts['rev']]
       
   649 
   652     if len(revs) > 0:
   650     if len(revs) > 0:
   653         node1 = revs[0]
   651         node1 = revs[0]
   654     if len(revs) > 1:
   652     if len(revs) > 1:
   655         node2 = revs[1]
   653         node2 = revs[1]
   656     if len(revs) > 2:
   654     if len(revs) > 2:
   661     if pats:
   659     if pats:
   662         roots, match, results = makewalk(repo, pats, opts)
   660         roots, match, results = makewalk(repo, pats, opts)
   663         for src, abs, rel, exact in results:
   661         for src, abs, rel, exact in results:
   664             files.append(abs)
   662             files.append(abs)
   665 
   663 
   666     dodiff(sys.stdout, ui, repo, node1, node2, files, match=match)
   664     dodiff(sys.stdout, ui, repo, node1, node2, files, match=match,
       
   665            text=opts['text'])
   667 
   666 
   668 def doexport(ui, repo, changeset, seqno, total, revwidth, opts):
   667 def doexport(ui, repo, changeset, seqno, total, revwidth, opts):
   669     node = repo.lookup(changeset)
   668     node = repo.lookup(changeset)
   670     prev, other = repo.changelog.parents(node)
   669     prev, other = repo.changelog.parents(node)
   671     change = repo.changelog.read(node)
   670     change = repo.changelog.read(node)
   683     if other != hg.nullid:
   682     if other != hg.nullid:
   684         fp.write("# Parent  %s\n" % hg.hex(other))
   683         fp.write("# Parent  %s\n" % hg.hex(other))
   685     fp.write(change[4].rstrip())
   684     fp.write(change[4].rstrip())
   686     fp.write("\n\n")
   685     fp.write("\n\n")
   687 
   686 
   688     dodiff(fp, ui, repo, prev, node)
   687     dodiff(fp, ui, repo, prev, node, text=opts['text'])
   689     if fp != sys.stdout: fp.close()
   688     if fp != sys.stdout: fp.close()
   690 
   689 
   691 def export(ui, repo, *changesets, **opts):
   690 def export(ui, repo, *changesets, **opts):
   692     """dump the header and diffs for one or more changesets"""
   691     """dump the header and diffs for one or more changesets"""
   693     if not changesets:
   692     if not changesets:
  1324           ('X', 'exclude', [], 'exclude path from search')],
  1323           ('X', 'exclude', [], 'exclude path from search')],
  1325          'debugwalk [OPTION]... [FILE]...'),
  1324          'debugwalk [OPTION]... [FILE]...'),
  1326     "^diff":
  1325     "^diff":
  1327         (diff,
  1326         (diff,
  1328          [('r', 'rev', [], 'revision'),
  1327          [('r', 'rev', [], 'revision'),
       
  1328           ('a', 'text', None, 'treat all files as text'),
  1329           ('I', 'include', [], 'include path in search'),
  1329           ('I', 'include', [], 'include path in search'),
  1330           ('X', 'exclude', [], 'exclude path from search')],
  1330           ('X', 'exclude', [], 'exclude path from search')],
  1331          'hg diff [-I] [-X] [-r REV1 [-r REV2]] [FILE]...'),
  1331          'hg diff [-I] [-X] [-r REV1 [-r REV2]] [FILE]...'),
  1332     "^export":
  1332     "^export":
  1333         (export,
  1333         (export,
  1334          [('o', 'output', "", 'output to file')],
  1334          [('o', 'output', "", 'output to file'),
       
  1335           ('a', 'text', None, 'treat all files as text')],
  1335          "hg export [-o OUTFILE] REV..."),
  1336          "hg export [-o OUTFILE] REV..."),
  1336     "forget":
  1337     "forget":
  1337         (forget,
  1338         (forget,
  1338          [('I', 'include', [], 'include path in search'),
  1339          [('I', 'include', [], 'include path in search'),
  1339           ('X', 'exclude', [], 'exclude path from search')],
  1340           ('X', 'exclude', [], 'exclude path from search')],