44 for f in files: |
44 for f in files: |
45 if f[-1] != os.sep: f += os.sep |
45 if f[-1] != os.sep: f += os.sep |
46 l += [ x for x in list if x.startswith(f) ] |
46 l += [ x for x in list if x.startswith(f) ] |
47 return l |
47 return l |
48 |
48 |
|
49 def diff(files = None, node1 = None, node2 = None): |
|
50 |
|
51 if node2: |
|
52 change = repo.changelog.read(node2) |
|
53 mmap2 = repo.manifest.read(change[0]) |
|
54 (c, a, d) = repo.diffrevs(node1, node2) |
|
55 def read(f): return repo.file(f).read(mmap2[f]) |
|
56 else: |
|
57 if not node1: |
|
58 node1 = repo.current |
|
59 (c, a, d) = repo.diffdir(repo.root, node1) |
|
60 def read(f): return file(f).read() |
|
61 |
|
62 change = repo.changelog.read(node1) |
|
63 mmap = repo.manifest.read(change[0]) |
|
64 |
|
65 if files: |
|
66 (c, a, d) = map(lambda x: filterfiles(x, files), (c, a, d)) |
|
67 |
|
68 for f in c: |
|
69 to = repo.file(f).read(mmap[f]) |
|
70 tn = read(f) |
|
71 sys.stdout.write(mdiff.unidiff(to, tn, f)) |
|
72 for f in a: |
|
73 to = "" |
|
74 tn = read(f) |
|
75 sys.stdout.write(mdiff.unidiff(to, tn, f)) |
|
76 for f in d: |
|
77 to = repo.file(f).read(mmap[f]) |
|
78 tn = "" |
|
79 sys.stdout.write(mdiff.unidiff(to, tn, f)) |
|
80 |
|
81 |
49 options = {} |
82 options = {} |
50 opts = [('v', 'verbose', None, 'verbose'), |
83 opts = [('v', 'verbose', None, 'verbose'), |
51 ('d', 'debug', None, 'debug')] |
84 ('d', 'debug', None, 'debug')] |
52 |
85 |
53 args = fancyopts.fancyopts(sys.argv[1:], opts, options, |
86 args = fancyopts.fancyopts(sys.argv[1:], opts, options, |
125 for f in a: print "?", f |
158 for f in a: print "?", f |
126 for f in d: print "R", f |
159 for f in d: print "R", f |
127 |
160 |
128 elif cmd == "diff": |
161 elif cmd == "diff": |
129 doptions = {} |
162 doptions = {} |
130 revs = [repo.current] |
163 revs = [] |
131 |
164 |
132 if args: |
165 if args: |
133 opts = [('r', 'revision', [], 'revision')] |
166 opts = [('r', 'revision', [], 'revision')] |
134 args = fancyopts.fancyopts(args, opts, doptions, |
167 args = fancyopts.fancyopts(args, opts, doptions, |
135 'hg diff [options] [files]') |
168 'hg diff [options] [files]') |
137 revs = [hg.bin(x) for x in doptions['revision']] |
170 revs = [hg.bin(x) for x in doptions['revision']] |
138 |
171 |
139 if len(revs) > 2: |
172 if len(revs) > 2: |
140 print "too many revisions to diff" |
173 print "too many revisions to diff" |
141 sys.exit(1) |
174 sys.exit(1) |
142 elif len(revs) == 2: |
175 else: |
143 change = repo.changelog.read(revs[1]) |
176 diff(args, *revs) |
144 mmap2 = repo.manifest.read(change[0]) |
177 |
145 (c, a, d) = repo.diffrevs(revs[0], revs[1]) |
178 elif cmd == "export": |
146 def read(f): return repo.file(f).read(mmap2[f]) |
179 node = hg.bin(args[0]) |
147 else: |
180 prev = repo.changelog.parents(node)[0] |
148 if len(revs) < 1: |
181 diff(None, prev, node) |
149 if not repo.current: |
|
150 sys.exit(0) |
|
151 (c, a, d) = repo.diffdir(repo.root, revs[0]) |
|
152 def read(f): return file(f).read() |
|
153 |
|
154 change = repo.changelog.read(revs[0]) |
|
155 mmap = repo.manifest.read(change[0]) |
|
156 |
|
157 if args: |
|
158 c = filterfiles(c, args) |
|
159 a = filterfiles(a, args) |
|
160 d = filterfiles(d, args) |
|
161 |
|
162 for f in c: |
|
163 to = repo.file(f).read(mmap[f]) |
|
164 tn = read(f) |
|
165 sys.stdout.write(mdiff.unidiff(to, tn, f)) |
|
166 for f in a: |
|
167 to = "" |
|
168 tn = read(f) |
|
169 sys.stdout.write(mdiff.unidiff(to, tn, f)) |
|
170 for f in d: |
|
171 to = repo.file(f).read(mmap[f]) |
|
172 tn = "" |
|
173 sys.stdout.write(mdiff.unidiff(to, tn, f)) |
|
174 |
182 |
175 elif cmd == "addremove": |
183 elif cmd == "addremove": |
176 (c, a, d) = repo.diffdir(repo.root, repo.current) |
184 (c, a, d) = repo.diffdir(repo.root, repo.current) |
177 repo.add(a) |
185 repo.add(a) |
178 repo.remove(d) |
186 repo.remove(d) |