[PATCH] log: make --patch --follow work inside a subdirectory
Siddharth Agarwal
sid0 at fb.com
Sat Jul 12 05:19:09 CDT 2014
# HG changeset patch
# User Siddharth Agarwal <sid0 at fb.com>
# Date 1405156997 25200
# Sat Jul 12 02:23:17 2014 -0700
# Node ID 0541680b3ed0f7068efcd2baa7696d2d07740605
# Parent 369ccce1dabdc8c1eed577c9f1b5cda673dfd2b3
log: make --patch --follow work inside a subdirectory
Previously, the 'patch' code for hg log --patch --follow would try to resolve
patterns relative to the repository root rather than the current working
directory. Fix that by using match.files instead of pats, as done elsewhere
nearby.
diff --git a/mercurial/cmdutil.py b/mercurial/cmdutil.py
--- a/mercurial/cmdutil.py
+++ b/mercurial/cmdutil.py
@@ -1488,7 +1488,7 @@
return iterate()
-def _makelogfilematcher(repo, pats, followfirst):
+def _makelogfilematcher(repo, files, followfirst):
# When displaying a revision with --patch --follow FILE, we have
# to know which file of the revision must be diffed. With
# --follow, we want the names of the ancestors of FILE in the
@@ -1502,7 +1502,7 @@
wctx = repo[None]
def populate():
- for fn in pats:
+ for fn in files:
for i in ((pctx[fn],), pctx[fn].ancestors(followfirst=followfirst)):
for c in i:
fcache.setdefault(c.linkrev(), set()).add(c.path())
@@ -1627,7 +1627,9 @@
filematcher = None
if opts.get('patch') or opts.get('stat'):
if follow:
- filematcher = _makelogfilematcher(repo, pats, followfirst)
+ # _makelogfilematcher expects its files argument to be relative to
+ # the repo root, so use match.files(), not pats.
+ filematcher = _makelogfilematcher(repo, match.files(), followfirst)
else:
filematcher = lambda rev: match
diff --git a/tests/test-log.t b/tests/test-log.t
--- a/tests/test-log.t
+++ b/tests/test-log.t
@@ -223,6 +223,43 @@
+a
+log -pf b inside dir
+
+ $ hg --cwd=dir log -pf b
+ changeset: 2:f8954cd4dc1f
+ user: test
+ date: Thu Jan 01 00:00:03 1970 +0000
+ summary: c
+
+ diff -r d89b0a12d229 -r f8954cd4dc1f dir/b
+ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+ +++ b/dir/b Thu Jan 01 00:00:03 1970 +0000
+ @@ -0,0 +1,1 @@
+ +a
+
+ changeset: 1:d89b0a12d229
+ user: test
+ date: Thu Jan 01 00:00:02 1970 +0000
+ summary: b
+
+ diff -r 9161b9aeaf16 -r d89b0a12d229 b
+ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+ +++ b/b Thu Jan 01 00:00:02 1970 +0000
+ @@ -0,0 +1,1 @@
+ +a
+
+ changeset: 0:9161b9aeaf16
+ user: test
+ date: Thu Jan 01 00:00:01 1970 +0000
+ summary: a
+
+ diff -r 000000000000 -r 9161b9aeaf16 a
+ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+ +++ b/a Thu Jan 01 00:00:01 1970 +0000
+ @@ -0,0 +1,1 @@
+ +a
+
+
log -vf dir/b
$ hg log -vf dir/b
More information about the Mercurial-devel
mailing list