Mercurial > public > mercurial-scm > hg-stable
comparison mercurial/commands.py @ 396:8f8bb77d560e
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-----
author | Thomas Arendsen Hein <thomas@intevation.de> |
---|---|
date | Fri, 17 Jun 2005 20:37:23 +0100 |
parents | fbe8834923c5 |
children | af4848f83e68 25afb21d97ba |
comparison
equal
deleted
inserted
replaced
395:fbe8834923c5 | 396:8f8bb77d560e |
---|---|
30 if os.getcwd() != repo.root: | 30 if os.getcwd() != repo.root: |
31 p = os.getcwd()[len(repo.root) + 1: ] | 31 p = os.getcwd()[len(repo.root) + 1: ] |
32 return [ os.path.normpath(os.path.join(p, x)) for x in args ] | 32 return [ os.path.normpath(os.path.join(p, x)) for x in args ] |
33 return args | 33 return args |
34 | 34 |
35 def dodiff(repo, path, files = None, node1 = None, node2 = None): | 35 def dodiff(ui, repo, path, files = None, node1 = None, node2 = None): |
36 def date(c): | 36 def date(c): |
37 return time.asctime(time.gmtime(float(c[2].split(' ')[0]))) | 37 return time.asctime(time.gmtime(float(c[2].split(' ')[0]))) |
38 | 38 |
39 if node2: | 39 if node2: |
40 change = repo.changelog.read(node2) | 40 change = repo.changelog.read(node2) |
47 (c, a, d, u) = repo.diffdir(path, node1) | 47 (c, a, d, u) = repo.diffdir(path, node1) |
48 if not node1: | 48 if not node1: |
49 node1 = repo.dirstate.parents()[0] | 49 node1 = repo.dirstate.parents()[0] |
50 def read(f): return file(os.path.join(repo.root, f)).read() | 50 def read(f): return file(os.path.join(repo.root, f)).read() |
51 | 51 |
52 if ui.quiet: | |
53 r = None | |
54 else: | |
55 hexfunc = ui.verbose and hg.hex or hg.short | |
56 r = [hexfunc(node) for node in [node1, node2] if node] | |
57 | |
52 change = repo.changelog.read(node1) | 58 change = repo.changelog.read(node1) |
53 mmap = repo.manifest.read(change[0]) | 59 mmap = repo.manifest.read(change[0]) |
54 date1 = date(change) | 60 date1 = date(change) |
55 | 61 |
56 if files: | 62 if files: |
59 for f in c: | 65 for f in c: |
60 to = None | 66 to = None |
61 if f in mmap: | 67 if f in mmap: |
62 to = repo.file(f).read(mmap[f]) | 68 to = repo.file(f).read(mmap[f]) |
63 tn = read(f) | 69 tn = read(f) |
64 sys.stdout.write(mdiff.unidiff(to, date1, tn, date2, f)) | 70 sys.stdout.write(mdiff.unidiff(to, date1, tn, date2, f, r)) |
65 for f in a: | 71 for f in a: |
66 to = None | 72 to = None |
67 tn = read(f) | 73 tn = read(f) |
68 sys.stdout.write(mdiff.unidiff(to, date1, tn, date2, f)) | 74 sys.stdout.write(mdiff.unidiff(to, date1, tn, date2, f, r)) |
69 for f in d: | 75 for f in d: |
70 to = repo.file(f).read(mmap[f]) | 76 to = repo.file(f).read(mmap[f]) |
71 tn = None | 77 tn = None |
72 sys.stdout.write(mdiff.unidiff(to, date1, tn, date2, f)) | 78 sys.stdout.write(mdiff.unidiff(to, date1, tn, date2, f, r)) |
73 | 79 |
74 def show_changeset(ui, repo, rev=0, changenode=None, filelog=None): | 80 def show_changeset(ui, repo, rev=0, changenode=None, filelog=None): |
75 """show a single changeset or file revision""" | 81 """show a single changeset or file revision""" |
76 changelog = repo.changelog | 82 changelog = repo.changelog |
77 if filelog: | 83 if filelog: |
288 def diff(ui, repo, *files, **opts): | 294 def diff(ui, repo, *files, **opts): |
289 """diff working directory (or selected files)""" | 295 """diff working directory (or selected files)""" |
290 revs = [] | 296 revs = [] |
291 if opts['rev']: | 297 if opts['rev']: |
292 revs = map(lambda x: repo.lookup(x), opts['rev']) | 298 revs = map(lambda x: repo.lookup(x), opts['rev']) |
293 | 299 |
294 if len(revs) > 2: | 300 if len(revs) > 2: |
295 self.ui.warn("too many revisions to diff\n") | 301 self.ui.warn("too many revisions to diff\n") |
296 sys.exit(1) | 302 sys.exit(1) |
297 | 303 |
298 if files: | 304 if files: |
299 files = relpath(repo, files) | 305 files = relpath(repo, files) |
300 else: | 306 else: |
301 files = relpath(repo, [""]) | 307 files = relpath(repo, [""]) |
302 | 308 |
303 dodiff(repo, os.getcwd(), files, *revs) | 309 dodiff(ui, repo, os.getcwd(), files, *revs) |
304 | 310 |
305 def export(ui, repo, changeset): | 311 def export(ui, repo, changeset): |
306 """dump the changeset header and diffs for a revision""" | 312 """dump the changeset header and diffs for a revision""" |
307 node = repo.lookup(changeset) | 313 node = repo.lookup(changeset) |
308 prev, other = repo.changelog.parents(node) | 314 prev, other = repo.changelog.parents(node) |
314 print | 320 print |
315 if other != hg.nullid: | 321 if other != hg.nullid: |
316 print "# Parent %s" % hg.hex(other) | 322 print "# Parent %s" % hg.hex(other) |
317 print change[4].rstrip() | 323 print change[4].rstrip() |
318 print | 324 print |
319 | 325 |
320 dodiff(repo, "", None, prev, node) | 326 dodiff(ui, repo, "", None, prev, node) |
321 | 327 |
322 def forget(ui, repo, file, *files): | 328 def forget(ui, repo, file, *files): |
323 """don't add the specified files on the next commit""" | 329 """don't add the specified files on the next commit""" |
324 repo.forget(relpath(repo, (file,) + files)) | 330 repo.forget(relpath(repo, (file,) + files)) |
325 | 331 |