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: |