[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