[PATCH] log: allow patterns with -f
Siddharth Agarwal
sid at less-broken.com
Tue Aug 5 00:02:48 UTC 2014
On 08/04/2014 04:54 PM, Durham Goode wrote:
> # HG changeset patch
> # User Durham Goode <durham at fb.com>
> # Date 1406094016 25200
> # Tue Jul 22 22:40:16 2014 -0700
> # Node ID 1f65f28adc72cd6fcfcb1a1d23e2284b888b2376
> # Parent c6e1f2c6d5f19538869338fa50ad519be6eb9b24
> log: allow patterns with -f
>
> It's not uncommon for a user to want to run log with a pattern or directory name
> on the history of their current commit. Currently we prevent that, but
> I can't think of any reason to continue blocking that.
>
> This commit removes the restriction and allows 'hg log -f <dir/pat>'
http://selenic.com/hg/file/c6e1f2c6d5f1/mercurial/cmdutil.py#l1518 needs
to be updated. In general we'll want tests for hg log --patch --follow
with patterns or directories.
>
> diff --git a/mercurial/cmdutil.py b/mercurial/cmdutil.py
> --- a/mercurial/cmdutil.py
> +++ b/mercurial/cmdutil.py
> @@ -1570,8 +1570,14 @@
> if not slowpath:
> for f in match.files():
> if follow and f not in pctx:
> - raise util.Abort(_('cannot follow file not in parent '
> - 'revision: "%s"') % f)
> + # If the file exists, it may be a directory, so let it
> + # take the slow path.
> + if os.path.exists(repo.wjoin(f)):
> + slowpath = True
> + continue
> + else:
> + raise util.Abort(_('cannot follow file not in parent '
> + 'revision: "%s"') % f)
> filelog = repo.file(f)
> if not filelog:
> # A zero count may be a directory or deleted file, so
> @@ -1595,9 +1601,6 @@
> if slowpath:
> # See walkchangerevs() slow path.
> #
> - if follow:
> - raise util.Abort(_('can only follow copies/renames for explicit '
> - 'filenames'))
> # pats/include/exclude cannot be represented as separate
> # revset expressions as their filtering logic applies at file
> # level. For instance "-I a -X a" matches a revision touching
> diff --git a/tests/test-glog.t b/tests/test-glog.t
> --- a/tests/test-glog.t
> +++ b/tests/test-glog.t
> @@ -1645,13 +1645,28 @@
> ('symbol', 'filelog')
> ('string', 'aa'))))
>
> -Test --follow on a directory
> +Test --follow on a non-existent directory
>
> $ testlog -f dir
> abort: cannot follow file not in parent revision: "dir"
> abort: cannot follow file not in parent revision: "dir"
> abort: cannot follow file not in parent revision: "dir"
>
> +Test --follow on a directory
> +
> + $ hg up -q .^
> + $ testlog -f dir
> + []
> + (group
> + (func
> + ('symbol', '_matchfiles')
> + (list
> + (list
> + ('string', 'r:')
> + ('string', 'd:relpath'))
> + ('string', 'p:dir'))))
> + $ hg up -q tip
> +
> Test --follow on file not in parent revision
>
> $ testlog -f a
> @@ -1662,9 +1677,15 @@
> Test --follow and patterns
>
> $ testlog -f 'glob:*'
> - abort: can only follow copies/renames for explicit filenames
> - abort: can only follow copies/renames for explicit filenames
> - abort: can only follow copies/renames for explicit filenames
> + []
> + (group
> + (func
> + ('symbol', '_matchfiles')
> + (list
> + (list
> + ('string', 'r:')
> + ('string', 'd:relpath'))
> + ('string', 'p:glob:*'))))
>
> Test --follow on a single rename
>
> @@ -1829,9 +1850,15 @@
> ('string', 'd:relpath'))
> ('string', 'p:a'))))
> $ testlog --removed --follow a
> - abort: can only follow copies/renames for explicit filenames
> - abort: can only follow copies/renames for explicit filenames
> - abort: can only follow copies/renames for explicit filenames
> + []
> + (group
> + (func
> + ('symbol', '_matchfiles')
> + (list
> + (list
> + ('string', 'r:')
> + ('string', 'd:relpath'))
> + ('string', 'p:a'))))
>
> Test --patch and --stat with --follow and --follow-first
>
> diff --git a/tests/test-log.t b/tests/test-log.t
> --- a/tests/test-log.t
> +++ b/tests/test-log.t
> @@ -78,12 +78,31 @@
> summary: c
>
>
> --f, directory
> +-f, non-existent directory
>
> $ hg log -f dir
> abort: cannot follow file not in parent revision: "dir"
> [255]
>
> +-f, directory
> +
> + $ hg up -q 3
> + $ hg log -f dir
> + changeset: 2:f8954cd4dc1f
> + user: test
> + date: Thu Jan 01 00:00:03 1970 +0000
> + summary: c
> +
> +-f, pattern
> +
> + $ hg log -f -I 'dir**'
> + changeset: 2:f8954cd4dc1f
> + user: test
> + date: Thu Jan 01 00:00:03 1970 +0000
> + summary: c
> +
> + $ hg up -q 4
> +
> -f, a wrong style
>
> $ hg log -f -l1 --style something
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at selenic.com
> http://selenic.com/mailman/listinfo/mercurial-devel
More information about the Mercurial-devel
mailing list