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 |