comparison mercurial/commands.py @ 312:09375250eb31

Optimize diff and status in subdirectories -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Optimize diff and status in subdirectories This walks the tree from the subdirectory down. Based on a patch by Arun Sharma manifest hash: 3a8545369b4eb6911b9d0fcdd8e4dc77784fa3d8 -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.0 (GNU/Linux) iD8DBQFCrF6/ywK+sNU5EO8RAosUAKC0KWcMfsLErEInDk1X1vpM54HFEgCfUwcN gXhaAviQZJ8h0ssl3BMmMfI= =KnRD -----END PGP SIGNATURE-----
author mpm@selenic.com
date Sun, 12 Jun 2005 08:11:43 -0800
parents 273f6a01d18b
children b18ce742566a
comparison
equal deleted inserted replaced
311:3b17056b72dc 312:09375250eb31
30 if os.getcwd() != repo.root: 30 if os.getcwd() != repo.root:
31 p = os.getcwd()[len(repo.root) + 1: ] 31 p = os.getcwd()[len(repo.root) + 1: ]
32 return [ os.path.normpath(os.path.join(p, x)) for x in args ] 32 return [ os.path.normpath(os.path.join(p, x)) for x in args ]
33 return args 33 return args
34 34
35 def dodiff(repo, files = None, node1 = None, node2 = None): 35 def dodiff(repo, path, files = None, node1 = None, node2 = None):
36 def date(c): 36 def date(c):
37 return time.asctime(time.gmtime(float(c[2].split(' ')[0]))) 37 return time.asctime(time.gmtime(float(c[2].split(' ')[0])))
38 38
39 if node2: 39 if node2:
40 change = repo.changelog.read(node2) 40 change = repo.changelog.read(node2)
42 (c, a, d) = repo.diffrevs(node1, node2) 42 (c, a, d) = repo.diffrevs(node1, node2)
43 def read(f): return repo.file(f).read(mmap2[f]) 43 def read(f): return repo.file(f).read(mmap2[f])
44 date2 = date(change) 44 date2 = date(change)
45 else: 45 else:
46 date2 = time.asctime() 46 date2 = time.asctime()
47 (c, a, d, u) = repo.diffdir(repo.root, node1) 47 (c, a, d, u) = repo.diffdir(path, node1)
48 if not node1: 48 if not node1:
49 node1 = repo.dirstate.parents()[0] 49 node1 = repo.dirstate.parents()[0]
50 def read(f): return file(os.path.join(repo.root, f)).read() 50 def read(f): return file(os.path.join(repo.root, f)).read()
51 51
52 change = repo.changelog.read(node1) 52 change = repo.changelog.read(node1)
222 if files: 222 if files:
223 files = relpath(repo, files) 223 files = relpath(repo, files)
224 else: 224 else:
225 files = relpath(repo, [""]) 225 files = relpath(repo, [""])
226 226
227 dodiff(repo, files, *revs) 227 dodiff(repo, os.getcwd(), files, *revs)
228 228
229 def export(ui, repo, changeset): 229 def export(ui, repo, changeset):
230 """dump the changeset header and diffs for a revision""" 230 """dump the changeset header and diffs for a revision"""
231 node = repo.lookup(changeset) 231 node = repo.lookup(changeset)
232 prev, other = repo.changelog.parents(node) 232 prev, other = repo.changelog.parents(node)
239 if other != hg.nullid: 239 if other != hg.nullid:
240 print "# Parent %s" % hg.hex(other) 240 print "# Parent %s" % hg.hex(other)
241 print change[4].rstrip() 241 print change[4].rstrip()
242 print 242 print
243 243
244 dodiff(repo, None, prev, node) 244 dodiff(repo, "", None, prev, node)
245 245
246 def forget(ui, repo, file, *files): 246 def forget(ui, repo, file, *files):
247 """don't add the specified files on the next commit""" 247 """don't add the specified files on the next commit"""
248 repo.forget(relpath(repo, (file,) + files)) 248 repo.forget(relpath(repo, (file,) + files))
249 249
447 447
448 C = changed 448 C = changed
449 A = added 449 A = added
450 R = removed 450 R = removed
451 ? = not tracked''' 451 ? = not tracked'''
452 452
453 (c, a, d, u) = repo.diffdir(repo.root) 453 (c, a, d, u) = repo.diffdir(os.getcwd())
454 (c, a, d, u) = map(lambda x: relfilter(repo, x), (c, a, d, u)) 454 (c, a, d, u) = map(lambda x: relfilter(repo, x), (c, a, d, u))
455 455
456 for f in c: print "C", f 456 for f in c: print "C", f
457 for f in a: print "A", f 457 for f in a: print "A", f
458 for f in d: print "R", f 458 for f in d: print "R", f