# HG changeset patch # User Thomas Arendsen Hein # Date 1119037043 -3600 # Node ID 8f8bb77d560e70bcc95577e4dfa877df18d876ab # Parent fbe8834923c57e2222b621c3cc1a78f326ed59d6 Show revisions in diffs like CVS, based on a patch from Goffredo Baroncelli. -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Show revisions in diffs like CVS, based on a patch from Goffredo Baroncelli. Changes from the original patch: - - Use 'diff -r ...' instead of 'hg diff -r ...' to support filetype detection by at least file(1) and vim. - - Adjusted tests for this change. - - Some cleanups. manifest hash: 5f37d1ef75ea7f4e48b53f02371053ba54fb70f8 -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.1 (GNU/Linux) iD8DBQFCsyZzW7P1GVgWeRoRAqczAJ479lR9Z289sP+VH5L+N7pQRU14SACfUueq 88ABloIR3VyRIa4qbujnZio= =Vva9 -----END PGP SIGNATURE----- diff -r fbe8834923c5 -r 8f8bb77d560e contrib/hgit --- a/contrib/hgit Fri Jun 17 11:03:44 2005 -0800 +++ b/contrib/hgit Fri Jun 17 20:37:23 2005 +0100 @@ -10,7 +10,7 @@ import time, sys, signal from mercurial import hg, mdiff, fancyopts, commands, ui -def difftree(args, repo): +def difftree(args, ui, repo): def __difftree(repo, files = None, node1 = None, node2 = None): def date(c): return time.asctime(time.gmtime(float(c[2].split(' ')[0]))) @@ -61,7 +61,7 @@ revs.append(repo.lookup(args[1])) args = args[2:] if doptions['patch']: - commands.dodiff(repo, "", args, *revs) + commands.dodiff(ui, repo, "", args, *revs) else: __difftree(repo, args, *revs) @@ -236,10 +236,10 @@ repo = hg.repository(ui = u) if cmd == "diff-tree": - difftree(args, repo) + difftree(args, u, repo) elif cmd == "cat-file": - catfile(args, ui, repo) + catfile(args, u, repo) elif cmd == "rev-tree": revtree(args, repo) diff -r fbe8834923c5 -r 8f8bb77d560e mercurial/commands.py --- a/mercurial/commands.py Fri Jun 17 11:03:44 2005 -0800 +++ b/mercurial/commands.py Fri Jun 17 20:37:23 2005 +0100 @@ -32,7 +32,7 @@ return [ os.path.normpath(os.path.join(p, x)) for x in args ] return args -def dodiff(repo, path, files = None, node1 = None, node2 = None): +def dodiff(ui, repo, path, files = None, node1 = None, node2 = None): def date(c): return time.asctime(time.gmtime(float(c[2].split(' ')[0]))) @@ -49,6 +49,12 @@ node1 = repo.dirstate.parents()[0] def read(f): return file(os.path.join(repo.root, f)).read() + if ui.quiet: + r = None + else: + hexfunc = ui.verbose and hg.hex or hg.short + r = [hexfunc(node) for node in [node1, node2] if node] + change = repo.changelog.read(node1) mmap = repo.manifest.read(change[0]) date1 = date(change) @@ -61,15 +67,15 @@ if f in mmap: to = repo.file(f).read(mmap[f]) tn = read(f) - sys.stdout.write(mdiff.unidiff(to, date1, tn, date2, f)) + sys.stdout.write(mdiff.unidiff(to, date1, tn, date2, f, r)) for f in a: to = None tn = read(f) - sys.stdout.write(mdiff.unidiff(to, date1, tn, date2, f)) + sys.stdout.write(mdiff.unidiff(to, date1, tn, date2, f, r)) for f in d: to = repo.file(f).read(mmap[f]) tn = None - sys.stdout.write(mdiff.unidiff(to, date1, tn, date2, f)) + sys.stdout.write(mdiff.unidiff(to, date1, tn, date2, f, r)) def show_changeset(ui, repo, rev=0, changenode=None, filelog=None): """show a single changeset or file revision""" @@ -290,7 +296,7 @@ revs = [] if opts['rev']: revs = map(lambda x: repo.lookup(x), opts['rev']) - + if len(revs) > 2: self.ui.warn("too many revisions to diff\n") sys.exit(1) @@ -300,7 +306,7 @@ else: files = relpath(repo, [""]) - dodiff(repo, os.getcwd(), files, *revs) + dodiff(ui, repo, os.getcwd(), files, *revs) def export(ui, repo, changeset): """dump the changeset header and diffs for a revision""" @@ -316,8 +322,8 @@ print "# Parent %s" % hg.hex(other) print change[4].rstrip() print - - dodiff(repo, "", None, prev, node) + + dodiff(ui, repo, "", None, prev, node) def forget(ui, repo, file, *files): """don't add the specified files on the next commit""" diff -r fbe8834923c5 -r 8f8bb77d560e mercurial/mdiff.py --- a/mercurial/mdiff.py Fri Jun 17 11:03:44 2005 -0800 +++ b/mercurial/mdiff.py Fri Jun 17 20:37:23 2005 +0100 @@ -8,7 +8,8 @@ import difflib, struct from mercurial.mpatch import * -def unidiff(a, ad, b, bd, fn): +def unidiff(a, ad, b, bd, fn, r=None): + if not a and not b: return "" if a == None: @@ -36,6 +37,10 @@ if l[ln][-1] != '\n': l[ln] += "\n\ No newline at end of file\n" + if r: + l.insert(0, "diff %s %s\n" % + (' '.join(["-r %s" % rev for rev in r]), fn)) + return "".join(l) def textdiff(a, b): diff -r fbe8834923c5 -r 8f8bb77d560e tests/test-up-local-change.out --- a/tests/test-up-local-change.out Fri Jun 17 11:03:44 2005 -0800 +++ b/tests/test-up-local-change.out Fri Jun 17 20:37:23 2005 +0100 @@ -12,6 +12,7 @@ + echo abc + hg diff + sed 's/\(\(---\|+++\).*\)\t.*/\1/' +diff -r c19d34741b0a a --- a/a +++ b/a @@ -1,1 +1,1 @@ @@ -65,6 +66,7 @@ + hg diff + sed 's/\(\(---\|+++\).*\)\t.*/\1/' +diff -r 1e71731e6fbb a --- a/a +++ b/a @@ -1,1 +1,1 @@