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)