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)