[PATCH] log: make --patch --follow work inside a subdirectory
Siddharth Agarwal
sid at less-broken.com
Sat Jul 12 05:31:59 CDT 2014
On 07/12/2014 03:19 AM, Siddharth Agarwal wrote:
> # 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
This should have been flagged stable.
>
> 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
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at selenic.com
> http://selenic.com/mailman/listinfo/mercurial-devel
More information about the Mercurial-devel
mailing list