diff --git a/mercurial/commands.py b/mercurial/commands.py --- a/mercurial/commands.py +++ b/mercurial/commands.py @@ -2513,7 +2513,10 @@ @util.cachefunc def binary(): flog = getfile(fn) - return stringutil.binary(flog.read(ctx.filenode(fn))) + try: + return stringutil.binary(flog.read(ctx.filenode(fn))) + except error.WdirUnsupported: + return ctx[fn].isbinary() fieldnamemap = {'filename': 'file', 'linenumber': 'line_number'} if opts.get('all'): @@ -2522,7 +2525,10 @@ 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 : + rev = scmutil.intrev(ctx) + cols = [ ('filename', fn, True), ('rev', rev, True), @@ -2588,8 +2594,10 @@ fnode = ctx.filenode(fn) except error.LookupError: continue - - copied = flog.renamed(fnode) + try: + copied = flog.renamed(fnode) + except error.WdirUnsupported : + copied = ctx[fn].renamed() copy = follow and copied and copied[0] if copy: copies.setdefault(rev, {})[fn] = copy @@ -2600,7 +2608,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:2147483647:export + port2:2147483647:vaportight + port2:2147483647:import/export + port2:2147483647:deport + port2:2147483647: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:2147483647:abracadara + + $ cd ..