diff --git a/mercurial/commands.py b/mercurial/commands.py --- a/mercurial/commands.py +++ b/mercurial/commands.py @@ -2513,7 +2513,11 @@ @util.cachefunc def binary(): flog = getfile(fn) - return stringutil.binary(flog.read(ctx.filenode(fn))) + try: + content = flog.read(ctx.filenode(fn)) + except error.WdirUnsupported: + content = ctx[fn].data() + return stringutil.binary(content) fieldnamemap = {'filename': 'file', 'linenumber': 'line_number'} if opts.get('all'): @@ -2522,10 +2526,14 @@ iter = [('', l) for l in states] for change, l in iter: fm.startitem() - fm.data(node=fm.hexfunc(ctx.node())) + fm.data(node=fm.hexfunc(scmutil.binnode(ctx))) + if ctx._rev is None : + showrev = False + else : + showrev = True cols = [ ('filename', fn, True), - ('rev', rev, True), + ('rev', rev, showrev), ('linenumber', l.linenum, opts.get('line_number')), ] if opts.get('all'): @@ -2588,8 +2596,10 @@ fnode = ctx.filenode(fn) except error.LookupError: continue - - copied = flog.renamed(fnode) + try: + copied = flog.renamed(fnode) + except error.WdirUnsupported : + copied = False copy = follow and copied and copied[0] if copy: copies.setdefault(rev, {})[fn] = copy @@ -2600,7 +2610,11 @@ files.append(fn) if fn not in matches[rev]: - grepbody(fn, rev, flog.read(fnode)) + try: + content = flog.read(fnode) + except error.WdirUnsupported: + content = ctx[fn].data() + grepbody(fn, rev, content) pfn = copy or fn if pfn not in matches[parent]: diff --git a/tests/test-grep.t b/tests/test-grep.t --- a/tests/test-grep.t +++ b/tests/test-grep.t @@ -250,8 +250,11 @@ $ hg stat M port2 $ hg grep -r 'wdir()' port - abort: working directory revision cannot be specified - [255] + port2:export + port2:vaportight + port2:import/export + port2:deport + port2:wport $ cd .. $ hg init t2 @@ -368,3 +371,14 @@ binfile.bin:0:+: Binary file matches $ cd .. + +Fix_Wdir(): test that passing wdir() t -r flag does greps on the +files modified in the working directory + + $ cd a + $ echo "abracadara" >> a + $ hg add a + $ hg grep -r "wdir()" "abra" + a:abracadara + + $ cd ..