Mercurial > hg > pyhgsh
comparison hg @ 34:8708c75da2ac
Add export command
author | mpm@selenic.com |
---|---|
date | Sat, 07 May 2005 11:37:28 -0800 |
parents | 98633e60067c |
children | ed1d3e3ca8e0 |
comparison
equal
deleted
inserted
replaced
33:98633e60067c | 34:8708c75da2ac |
---|---|
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) |