Mercurial > hg
comparison mercurial/hg.py @ 726:809a870a0e73
Add a source designator to the walk methods.
If the source is 'f' (the filesystem), the file definitely exists in
the filesystem. If 'm' (a rev or dirstate manifest), the file may not
still exist with the given name.
author | Bryan O'Sullivan <bos@serpentine.com> |
---|---|
date | Tue, 19 Jul 2005 07:15:59 -0800 |
parents | c6b912f8b5b2 |
children | d2dc7663d512 |
comparison
equal
deleted
inserted
replaced
725:c6b912f8b5b2 | 726:809a870a0e73 |
---|---|
432 ds = os.path.join(d, sd +'/') | 432 ds = os.path.join(d, sd +'/') |
433 if self.ignore(ds) or not match(ds): | 433 if self.ignore(ds) or not match(ds): |
434 subdirs.remove(sd) | 434 subdirs.remove(sd) |
435 for fn in fl: | 435 for fn in fl: |
436 fn = util.pconvert(os.path.join(d, fn)) | 436 fn = util.pconvert(os.path.join(d, fn)) |
437 yield fn | 437 yield 'f', fn |
438 else: | 438 else: |
439 yield f[len(self.root) + 1:] | 439 yield 'f', f[len(self.root) + 1:] |
440 | 440 |
441 for k in dc.keys(): | 441 for k in dc.keys(): |
442 yield k | 442 yield 'm', k |
443 | 443 |
444 # yield only files that match: all in dirstate, others only if | 444 # yield only files that match: all in dirstate, others only if |
445 # not in .hgignore | 445 # not in .hgignore |
446 | 446 |
447 for fn in util.unique(traverse()): | 447 for src, fn in util.unique(traverse()): |
448 if fn in dc: | 448 if fn in dc: |
449 del dc[fn] | 449 del dc[fn] |
450 elif self.ignore(fn): | 450 elif self.ignore(fn): |
451 continue | 451 continue |
452 if match(fn): | 452 if match(fn): |
453 yield fn | 453 yield src, fn |
454 | 454 |
455 def changes(self, files = None, match = util.always): | 455 def changes(self, files = None, match = util.always): |
456 self.read() | 456 self.read() |
457 dc = self.map.copy() | 457 dc = self.map.copy() |
458 lookup, changed, added, unknown = [], [], [], [] | 458 lookup, changed, added, unknown = [], [], [], [] |
459 | 459 |
460 for fn in self.walk(files, match): | 460 for src, fn in self.walk(files, match): |
461 try: s = os.stat(os.path.join(self.root, fn)) | 461 try: s = os.stat(os.path.join(self.root, fn)) |
462 except: continue | 462 except: continue |
463 | 463 |
464 if fn in dc: | 464 if fn in dc: |
465 c = dc[fn] | 465 c = dc[fn] |
838 if not self.hook("commit", node=hex(n)): | 838 if not self.hook("commit", node=hex(n)): |
839 return 1 | 839 return 1 |
840 | 840 |
841 def walk(self, node = None, files = [], match = util.always): | 841 def walk(self, node = None, files = [], match = util.always): |
842 if node: | 842 if node: |
843 change = self.changelog.read(node) | 843 for fn in self.manifest.read(self.changelog.read(node)[0]): |
844 fns = filter(match, self.manifest.read(change[0])) | 844 yield 'm', fn |
845 else: | 845 else: |
846 fns = self.dirstate.walk(files, match) | 846 for src, fn in self.dirstate.walk(files, match): |
847 for fn in fns: yield fn | 847 yield src, fn |
848 | 848 |
849 def changes(self, node1 = None, node2 = None, files = [], | 849 def changes(self, node1 = None, node2 = None, files = [], |
850 match = util.always): | 850 match = util.always): |
851 mf2, u = None, [] | 851 mf2, u = None, [] |
852 | 852 |