diff --git a/mercurial/localrepo.py b/mercurial/localrepo.py --- a/mercurial/localrepo.py +++ b/mercurial/localrepo.py @@ -873,7 +873,13 @@ class localrepository(repo.repository): if node: fdict = dict.fromkeys(files) - for fn in self.manifest.read(self.changelog.read(node)[0]): + # for dirstate.walk, files=['.'] means "walk the whole tree". + # follow that here, too + fdict.pop('.', None) + mdict = self.manifest.read(self.changelog.read(node)[0]) + mfiles = mdict.keys() + mfiles.sort() + for fn in mfiles: for ffn in fdict: # match if the file is the exact name or a directory if ffn == fn or fn.startswith("%s/" % ffn): @@ -881,7 +887,9 @@ class localrepository(repo.repository): break if match(fn): yield 'm', fn - for fn in fdict: + ffiles = fdict.keys() + ffiles.sort() + for fn in ffiles: if badmatch and badmatch(fn): if match(fn): yield 'b', fn