comparison mercurial/hg.py @ 724:1c0c413cccdd

Get add and locate to use new repo and dirstate walk code. They use a walk function that abstracts out the irritating details, so that there's a higher likelihood of commands behaving uniformly.
author Bryan O'Sullivan <bos@serpentine.com>
date Mon, 18 Jul 2005 06:54:21 -0800
parents 9e0f3ba4a9c2
children c6b912f8b5b2
comparison
equal deleted inserted replaced
723:9e0f3ba4a9c2 724:1c0c413cccdd
10 from revlog import * 10 from revlog import *
11 from demandload import * 11 from demandload import *
12 demandload(globals(), "re lock urllib urllib2 transaction time socket") 12 demandload(globals(), "re lock urllib urllib2 transaction time socket")
13 demandload(globals(), "tempfile httprangereader bdiff") 13 demandload(globals(), "tempfile httprangereader bdiff")
14 demandload(globals(), "bisect select") 14 demandload(globals(), "bisect select")
15
16 def always(fn):
17 return True
18 15
19 class filelog(revlog): 16 class filelog(revlog):
20 def __init__(self, opener, path): 17 def __init__(self, opener, path):
21 revlog.__init__(self, opener, 18 revlog.__init__(self, opener,
22 os.path.join("data", path + ".i"), 19 os.path.join("data", path + ".i"),
414 f = f + "\0" + c 411 f = f + "\0" + c
415 e = struct.pack(">cllll", e[0], e[1], e[2], e[3], len(f)) 412 e = struct.pack(">cllll", e[0], e[1], e[2], e[3], len(f))
416 st.write(e + f) 413 st.write(e + f)
417 self.dirty = 0 414 self.dirty = 0
418 415
419 def walk(self, files = None, match = always): 416 def walk(self, files = None, match = util.always):
420 self.read() 417 self.read()
421 dc = self.map.copy() 418 dc = self.map.copy()
422 # walk all files by default 419 # walk all files by default
423 if not files: files = [self.root] 420 if not files: files = [self.root]
424 def traverse(): 421 def traverse():
452 elif self.ignore(fn): 449 elif self.ignore(fn):
453 continue 450 continue
454 if match(fn): 451 if match(fn):
455 yield fn 452 yield fn
456 453
457 def changes(self, files = None, match = always): 454 def changes(self, files = None, match = util.always):
458 self.read() 455 self.read()
459 dc = self.map.copy() 456 dc = self.map.copy()
460 lookup, changed, added, unknown = [], [], [], [] 457 lookup, changed, added, unknown = [], [], [], []
461 458
462 for fn in self.walk(files, match): 459 for fn in self.walk(files, match):
838 self.dirstate.forget(remove) 835 self.dirstate.forget(remove)
839 836
840 if not self.hook("commit", node=hex(n)): 837 if not self.hook("commit", node=hex(n)):
841 return 1 838 return 1
842 839
843 def walk(self, rev = None, files = [], match = always): 840 def walk(self, node = None, files = [], match = util.always):
844 if rev is None: fns = self.dirstate.walk(files, match) 841 if node:
845 else: fns = filter(match, self.manifest.read(rev)) 842 change = self.changelog.read(node)
843 fns = filter(match, self.manifest.read(change[0]))
844 else:
845 fns = self.dirstate.walk(files, match)
846 for fn in fns: yield fn 846 for fn in fns: yield fn
847 847
848 def changes(self, node1 = None, node2 = None, files = [], match = always): 848 def changes(self, node1 = None, node2 = None, files = [],
849 match = util.always):
849 mf2, u = None, [] 850 mf2, u = None, []
850 851
851 def fcmp(fn, mf): 852 def fcmp(fn, mf):
852 t1 = self.wfile(fn).read() 853 t1 = self.wfile(fn).read()
853 t2 = self.file(fn).revision(mf[fn]) 854 t2 = self.file(fn).revision(mf[fn])
920 p = self.wjoin(f) 921 p = self.wjoin(f)
921 if not os.path.exists(p): 922 if not os.path.exists(p):
922 self.ui.warn("%s does not exist!\n" % f) 923 self.ui.warn("%s does not exist!\n" % f)
923 elif not os.path.isfile(p): 924 elif not os.path.isfile(p):
924 self.ui.warn("%s not added: mercurial only supports files currently\n" % f) 925 self.ui.warn("%s not added: mercurial only supports files currently\n" % f)
925 elif self.dirstate.state(f) == 'n': 926 elif self.dirstate.state(f) in 'an':
926 self.ui.warn("%s already tracked!\n" % f) 927 self.ui.warn("%s already tracked!\n" % f)
927 else: 928 else:
928 self.dirstate.update([f], "a") 929 self.dirstate.update([f], "a")
929 930
930 def forget(self, list): 931 def forget(self, list):