Mercurial > public > mercurial-scm > hg
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): |