diff -r 2164226a5637 -r 32e68271a037 mercurial/cmdutil.py --- a/mercurial/cmdutil.py Tue Dec 09 12:39:23 2014 -0600 +++ b/mercurial/cmdutil.py Tue Dec 09 13:32:19 2014 -0600 @@ -1745,6 +1745,9 @@ else: slowpath = False + fpats = ('_patsfollow', '_patsfollowfirst') + fnopats = (('_ancestors', '_fancestors'), + ('_descendants', '_fdescendants')) if slowpath: # See walkchangerevs() slow path. # @@ -1763,11 +1766,10 @@ matchargs.append('x:' + p) matchargs = ','.join(('%r' % p) for p in matchargs) opts['_matchfiles'] = matchargs + if follow: + opts[fnopats[0][followfirst]] = '.' else: if follow: - fpats = ('_patsfollow', '_patsfollowfirst') - fnopats = (('_ancestors', '_fancestors'), - ('_descendants', '_fdescendants')) if pats: # follow() revset interprets its file argument as a # manifest entry, so use match.files(), not pats. @@ -1793,7 +1795,7 @@ filematcher = lambda rev: match expr = [] - for op, val in opts.iteritems(): + for op, val in sorted(opts.iteritems()): if not val: continue if op not in opt2revset: