Mercurial > hg > pyhgsh
comparison hg @ 64:b3e2ddff0159
Diff in subdirectories from Jake Edge
Dates in diff
Fix O(n^2) behaviour of manifest diff
Add a/ and b/ to work with patch -p1
author | mpm@selenic.com |
---|---|
date | Thu, 12 May 2005 17:54:55 -0800 |
parents | 022d98aa0a2a |
children | d40cc5aacc31 |
comparison
equal
deleted
inserted
replaced
63:1c590d34bf61 | 64:b3e2ddff0159 |
---|---|
46 if f[-1] != os.sep: f += os.sep | 46 if f[-1] != os.sep: f += os.sep |
47 l += [ x for x in list if x.startswith(f) ] | 47 l += [ x for x in list if x.startswith(f) ] |
48 return l | 48 return l |
49 | 49 |
50 def diff(files = None, node1 = None, node2 = None): | 50 def diff(files = None, node1 = None, node2 = None): |
51 def date(c): | |
52 return time.asctime(time.gmtime(float(c[2].split(' ')[0]))) | |
51 | 53 |
52 if node2: | 54 if node2: |
53 change = repo.changelog.read(node2) | 55 change = repo.changelog.read(node2) |
54 mmap2 = repo.manifest.read(change[0]) | 56 mmap2 = repo.manifest.read(change[0]) |
55 (c, a, d) = repo.diffrevs(node1, node2) | 57 (c, a, d) = repo.diffrevs(node1, node2) |
56 def read(f): return repo.file(f).read(mmap2[f]) | 58 def read(f): return repo.file(f).read(mmap2[f]) |
57 else: | 59 date2 = date(change) |
60 else: | |
61 date2 = time.asctime() | |
58 if not node1: | 62 if not node1: |
59 node1 = repo.current | 63 node1 = repo.current |
60 (c, a, d) = repo.diffdir(repo.root, node1) | 64 (c, a, d) = repo.diffdir(repo.root, node1) |
61 def read(f): return file(f).read() | 65 def read(f): return file(os.path.join(repo.root, f)).read() |
62 | 66 |
63 change = repo.changelog.read(node1) | 67 change = repo.changelog.read(node1) |
64 mmap = repo.manifest.read(change[0]) | 68 mmap = repo.manifest.read(change[0]) |
69 date1 = date(change) | |
65 | 70 |
66 if files: | 71 if files: |
67 (c, a, d) = map(lambda x: filterfiles(x, files), (c, a, d)) | 72 (c, a, d) = map(lambda x: filterfiles(x, files), (c, a, d)) |
68 | 73 |
69 for f in c: | 74 for f in c: |
70 to = repo.file(f).read(mmap[f]) | 75 to = repo.file(f).read(mmap[f]) |
71 tn = read(f) | 76 tn = read(f) |
72 sys.stdout.write(mdiff.unidiff(to, tn, f)) | 77 sys.stdout.write(mdiff.unidiff(to, date1, tn, date2, f)) |
73 for f in a: | 78 for f in a: |
74 to = "" | 79 to = "" |
75 tn = read(f) | 80 tn = read(f) |
76 sys.stdout.write(mdiff.unidiff(to, tn, f)) | 81 sys.stdout.write(mdiff.unidiff(to, date1, tn, date2, f)) |
77 for f in d: | 82 for f in d: |
78 to = repo.file(f).read(mmap[f]) | 83 to = repo.file(f).read(mmap[f]) |
79 tn = "" | 84 tn = "" |
80 sys.stdout.write(mdiff.unidiff(to, tn, f)) | 85 sys.stdout.write(mdiff.unidiff(to, date1, tn, date2, f)) |
81 | |
82 | 86 |
83 options = {} | 87 options = {} |
84 opts = [('v', 'verbose', None, 'verbose'), | 88 opts = [('v', 'verbose', None, 'verbose'), |
85 ('d', 'debug', None, 'debug')] | 89 ('d', 'debug', None, 'debug')] |
86 | 90 |
176 revs = map(lambda x: repo.changelog.lookup(x), doptions['revision']) | 180 revs = map(lambda x: repo.changelog.lookup(x), doptions['revision']) |
177 | 181 |
178 if len(revs) > 2: | 182 if len(revs) > 2: |
179 print "too many revisions to diff" | 183 print "too many revisions to diff" |
180 sys.exit(1) | 184 sys.exit(1) |
181 else: | 185 |
182 diff(args, *revs) | 186 if os.getcwd() != repo.root: |
187 relpath = os.getcwd()[len(repo.root) + 1: ] | |
188 if not args: args = [ relpath ] | |
189 else: args = [ os.path.join(relpath, x) for x in args ] | |
190 | |
191 diff(args, *revs) | |
183 | 192 |
184 elif cmd == "export": | 193 elif cmd == "export": |
185 node = repo.changelog.lookup(args[0]) | 194 node = repo.changelog.lookup(args[0]) |
186 prev = repo.changelog.parents(node)[0] | 195 prev = repo.changelog.parents(node)[0] |
187 diff(None, prev, node) | 196 diff(None, prev, node) |