mercurial/commands.py
changeset 1014 e37cd99fa909
parent 989 1b6eb272b238
child 1015 22571b8d35d3
equal deleted inserted replaced
1013:2e8b8da9a86e 1014:e37cd99fa909
   138     if hasattr(pat, 'read') and 'r' in mode:
   138     if hasattr(pat, 'read') and 'r' in mode:
   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, files=None, node1=None, node2=None, match=util.always, changes=None):
   143 def dodiff(fp, ui, repo, node1, node2, files=None, match=util.always,
       
   144            changes=None):
   144     def date(c):
   145     def date(c):
   145         return time.asctime(time.gmtime(float(c[2].split(' ')[0])))
   146         return time.asctime(time.gmtime(float(c[2].split(' ')[0])))
   146 
   147 
   147     if not changes:
   148     if not changes:
   148         (c, a, d, u) = repo.changes(node1, node2, files, match = match)
   149         (c, a, d, u) = repo.changes(node1, node2, files, match = match)
   645     """diff working directory (or selected files)"""
   646     """diff working directory (or selected files)"""
   646     revs = []
   647     revs = []
   647     if opts['rev']:
   648     if opts['rev']:
   648         revs = map(lambda x: repo.lookup(x), opts['rev'])
   649         revs = map(lambda x: repo.lookup(x), opts['rev'])
   649 
   650 
       
   651     node1, node2 = None, None
       
   652     if len(revs) > 0:
       
   653         node1 = revs[0]
       
   654     if len(revs) > 1:
       
   655         node2 = revs[1]
   650     if len(revs) > 2:
   656     if len(revs) > 2:
   651         raise util.Abort("too many revisions to diff")
   657         raise util.Abort("too many revisions to diff")
   652 
   658 
   653     files = []
   659     files = []
   654     match = util.always
   660     match = util.always
   655     if pats:
   661     if pats:
   656         roots, match, results = makewalk(repo, pats, opts)
   662         roots, match, results = makewalk(repo, pats, opts)
   657         for src, abs, rel, exact in results:
   663         for src, abs, rel, exact in results:
   658             files.append(abs)
   664             files.append(abs)
   659     dodiff(sys.stdout, ui, repo, files, *revs, **{'match': match})
   665 
       
   666     dodiff(sys.stdout, ui, repo, node1, node2, files, match=match)
   660 
   667 
   661 def doexport(ui, repo, changeset, seqno, total, revwidth, opts):
   668 def doexport(ui, repo, changeset, seqno, total, revwidth, opts):
   662     node = repo.lookup(changeset)
   669     node = repo.lookup(changeset)
   663     prev, other = repo.changelog.parents(node)
   670     prev, other = repo.changelog.parents(node)
   664     change = repo.changelog.read(node)
   671     change = repo.changelog.read(node)
   676     if other != hg.nullid:
   683     if other != hg.nullid:
   677         fp.write("# Parent  %s\n" % hg.hex(other))
   684         fp.write("# Parent  %s\n" % hg.hex(other))
   678     fp.write(change[4].rstrip())
   685     fp.write(change[4].rstrip())
   679     fp.write("\n\n")
   686     fp.write("\n\n")
   680 
   687 
   681     dodiff(fp, ui, repo, None, prev, node)
   688     dodiff(fp, ui, repo, prev, node)
   682     if fp != sys.stdout: fp.close()
   689     if fp != sys.stdout: fp.close()
   683 
   690 
   684 def export(ui, repo, *changesets, **opts):
   691 def export(ui, repo, *changesets, **opts):
   685     """dump the header and diffs for one or more changesets"""
   692     """dump the header and diffs for one or more changesets"""
   686     if not changesets:
   693     if not changesets:
   859             if filelog:
   866             if filelog:
   860                 filenode = filelog.node(i)
   867                 filenode = filelog.node(i)
   861                 i = filelog.linkrev(filenode)
   868                 i = filelog.linkrev(filenode)
   862             changenode = repo.changelog.node(i)
   869             changenode = repo.changelog.node(i)
   863             prev, other = repo.changelog.parents(changenode)
   870             prev, other = repo.changelog.parents(changenode)
   864             dodiff(sys.stdout, ui, repo, files, prev, changenode)
   871             dodiff(sys.stdout, ui, repo, prev, changenode, files)
   865             ui.write("\n\n")
   872             ui.write("\n\n")
   866 
   873 
   867 def manifest(ui, repo, rev=None):
   874 def manifest(ui, repo, rev=None):
   868     """output the latest or given revision of the project manifest"""
   875     """output the latest or given revision of the project manifest"""
   869     if rev:
   876     if rev: