diff -r 7d589d923b8a -r 8dc254198a8f mercurial/context.py --- a/mercurial/context.py Wed Jan 15 16:46:20 2014 -0800 +++ b/mercurial/context.py Tue Jan 14 13:49:19 2014 -0800 @@ -410,6 +410,15 @@ # for dirstate.walk, files=['.'] means "walk the whole tree". # follow that here, too fset.discard('.') + + # avoid the entire walk if we're only looking for specific files + if fset and not match.anypats(): + if util.all([fn in self for fn in fset]): + for fn in sorted(fset): + if match(fn): + yield fn + raise StopIteration + for fn in self: if fn in fset: # specified pattern is the exact name