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.
--- a/mercurial/commands.py Tue Jul 19 07:00:03 2005 -0800
+++ b/mercurial/commands.py Tue Jul 19 07:15:59 2005 -0800
@@ -65,9 +65,9 @@
def walk(repo, pats, opts):
cwd = repo.getcwd()
if cwd: c = len(cwd) + 1
- for fn in repo.walk(match = matchpats(repo.ui, cwd, pats, opts)):
- if cwd: yield fn, fn[c:]
- else: yield fn, fn
+ for src, fn in repo.walk(match = matchpats(repo.ui, cwd, pats, opts)):
+ if cwd: yield src, fn, fn[c:]
+ else: yield src, fn, fn
revrangesep = ':'
@@ -325,7 +325,7 @@
'''add the specified files on the next commit'''
names = []
q = dict(zip(pats, pats))
- for abs, rel in walk(repo, pats, opts):
+ for src, abs, rel in walk(repo, pats, opts):
if rel in q or abs in q:
names.append(abs)
elif repo.dirstate.state(abs) == '?':
@@ -715,7 +715,7 @@
if opts['print0']: end = '\0'
else: end = '\n'
opts['rootless'] = True
- for abs, rel in walk(repo, pats, opts):
+ for src, abs, rel in walk(repo, pats, opts):
if repo.dirstate.state(abs) == '?': continue
if opts['fullpath']:
ui.write(os.path.join(repo.root, abs), end)
--- a/mercurial/hg.py Tue Jul 19 07:00:03 2005 -0800
+++ b/mercurial/hg.py Tue Jul 19 07:15:59 2005 -0800
@@ -434,30 +434,30 @@
subdirs.remove(sd)
for fn in fl:
fn = util.pconvert(os.path.join(d, fn))
- yield fn
+ yield 'f', fn
else:
- yield f[len(self.root) + 1:]
+ yield 'f', f[len(self.root) + 1:]
for k in dc.keys():
- yield k
+ yield 'm', k
# yield only files that match: all in dirstate, others only if
# not in .hgignore
- for fn in util.unique(traverse()):
+ for src, fn in util.unique(traverse()):
if fn in dc:
del dc[fn]
elif self.ignore(fn):
continue
if match(fn):
- yield fn
+ yield src, fn
def changes(self, files = None, match = util.always):
self.read()
dc = self.map.copy()
lookup, changed, added, unknown = [], [], [], []
- for fn in self.walk(files, match):
+ for src, fn in self.walk(files, match):
try: s = os.stat(os.path.join(self.root, fn))
except: continue
@@ -840,11 +840,11 @@
def walk(self, node = None, files = [], match = util.always):
if node:
- change = self.changelog.read(node)
- fns = filter(match, self.manifest.read(change[0]))
+ for fn in self.manifest.read(self.changelog.read(node)[0]):
+ yield 'm', fn
else:
- fns = self.dirstate.walk(files, match)
- for fn in fns: yield fn
+ for src, fn in self.dirstate.walk(files, match):
+ yield src, fn
def changes(self, node1 = None, node2 = None, files = [],
match = util.always):