Patchwork [3,of,3,V2] help: eliminate duplicate text for revset string patterns

login
register
mail settings
Submitter Matt Harbison
Date Jan. 13, 2017, 5:24 a.m.
Message ID <2060486431053a99eafa.1484285093@Envy>
Download mbox | patch
Permalink /patch/18201/
State Accepted
Headers show

Comments

Matt Harbison - Jan. 13, 2017, 5:24 a.m.
# HG changeset patch
# User Matt Harbison <matt_harbison@yahoo.com>
# Date 1483850135 18000
#      Sat Jan 07 23:35:35 2017 -0500
# Node ID 2060486431053a99eafa4234aea139f6a31dc2d7
# Parent  29cbe16c5cccf600fae928df52dbd44171096a6f
help: eliminate duplicate text for revset string patterns

There's no reason to duplicate this so many times, and it's likely an instance
will be missed if support for a new pattern is added and documented.  The
stringmatcher is mostly used by revsets, though it is also used for the 'tag'
related templates, and namespace filtering in the journal extension.  So maybe
there's a better place to document it.  `hg help patterns` seems inappropriate,
because that is all file pattern matching.

While here, indicate how to perform case insensitive regex searches.
via Mercurial-devel - Jan. 13, 2017, 5:34 a.m.
On Thu, Jan 12, 2017 at 9:24 PM, Matt Harbison <mharbison72@gmail.com> wrote:
> # HG changeset patch
> # User Matt Harbison <matt_harbison@yahoo.com>
> # Date 1483850135 18000
> #      Sat Jan 07 23:35:35 2017 -0500
> # Node ID 2060486431053a99eafa4234aea139f6a31dc2d7
> # Parent  29cbe16c5cccf600fae928df52dbd44171096a6f
> help: eliminate duplicate text for revset string patterns
>
> There's no reason to duplicate this so many times, and it's likely an instance
> will be missed if support for a new pattern is added and documented.  The
> stringmatcher is mostly used by revsets, though it is also used for the 'tag'
> related templates, and namespace filtering in the journal extension.  So maybe
> there's a better place to document it.  `hg help patterns` seems inappropriate,
> because that is all file pattern matching.
>
> While here, indicate how to perform case insensitive regex searches.
>
> diff --git a/mercurial/help/revsets.txt b/mercurial/help/revsets.txt
> --- a/mercurial/help/revsets.txt
> +++ b/mercurial/help/revsets.txt

This file no longer exists. I merged it into revisions.txt very
recently, so you should probably rebase this series on top of @ from
the "committed" repo
(https://www.mercurial-scm.org/repo/hg-committed/) and resend. Sorry.

> @@ -79,6 +79,23 @@
>  ``x^``
>    Equivalent to ``x^1``, the first parent of each changeset in x.
>
> +Patterns
> +========
> +
> +Where noted, predicates that perform string matching can accept a pattern
> +string. The pattern may be either a literal, or a regular expression. If the
> +pattern starts with ``re:``, the remainder of the pattern is treated as a
> +regular expression. Otherwise, it is treated as a literal. To match a pattern
> +that actually starts with ``re:``, use the prefix ``literal:``.
> +
> +Matching is case-sensitive, unless otherwise noted.  To perform a case-
> +insensitive match on a case-sensitive predicate, use a regular expression,
> +prefixed with ``(?i)``.
> +
> +  For example::
> +
> +    ``tag(r're:(?i)release')`` matches tags containing "release" or "RELEASE".
> +
>  Predicates
>  ==========
>
> diff --git a/mercurial/revset.py b/mercurial/revset.py
> --- a/mercurial/revset.py
> +++ b/mercurial/revset.py
> @@ -588,9 +588,7 @@
>  def bookmark(repo, subset, x):
>      """The named bookmark or all bookmarks.
>
> -    If `name` starts with `re:`, the remainder of the name is treated as
> -    a regular expression. To match a bookmark that actually starts with `re:`,
> -    use the prefix `literal:`.
> +    Pattern matching is supported for `name`. See ``hg help revsets.patterns``.
>      """
>      # i18n: "bookmark" is a keyword
>      args = getargs(x, 0, 1, _('bookmark takes one or no arguments'))
> @@ -628,9 +626,8 @@
>      All changesets belonging to the given branch or the branches of the given
>      changesets.
>
> -    If `string` starts with `re:`, the remainder of the name is treated as
> -    a regular expression. To match a branch that actually starts with `re:`,
> -    use the prefix `literal:`.
> +    Pattern matching is supported for `string`. See
> +    ``hg help revsets.patterns``.
>      """
>      getbi = repo.revbranchcache().branchinfo
>
> @@ -815,9 +812,8 @@
>  def desc(repo, subset, x):
>      """Search commit message for string. The match is case-insensitive.
>
> -    If `string` starts with `re:`, the remainder of the string is treated as
> -    a regular expression. To match a substring that actually starts with `re:`,
> -    use the prefix `literal:`.
> +    Pattern matching is supported for `string`. See
> +    ``hg help revsets.patterns``.
>      """
>      # i18n: "desc" is a keyword
>      ds = getstring(x, _("desc requires a string"))
> @@ -927,9 +923,8 @@
>      """Changesets with the given label in the extra metadata, with the given
>      optional value.
>
> -    If `value` starts with `re:`, the remainder of the value is treated as
> -    a regular expression. To match a value that actually starts with `re:`,
> -    use the prefix `literal:`.
> +    Pattern matching is supported for `value`. See
> +    ``hg help revsets.patterns``.
>      """
>      args = getargsdict(x, 'extra', 'label value')
>      if 'label' not in args:
> @@ -1409,9 +1404,8 @@
>  def named(repo, subset, x):
>      """The changesets in a given namespace.
>
> -    If `namespace` starts with `re:`, the remainder of the string is treated as
> -    a regular expression. To match a namespace that actually starts with `re:`,
> -    use the prefix `literal:`.
> +    Pattern matching is supported for `namespace`. See
> +    ``hg help revsets.patterns``.
>      """
>      # i18n: "named" is a keyword
>      args = getargs(x, 1, 1, _('named requires a namespace argument'))
> @@ -2267,9 +2261,8 @@
>  def tag(repo, subset, x):
>      """The specified tag by name, or all tagged revisions if no name is given.
>
> -    If `name` starts with `re:`, the remainder of the name is treated as
> -    a regular expression. To match a tag that actually starts with `re:`,
> -    use the prefix `literal:`.
> +    Pattern matching is supported for `name`. See
> +    ``hg help revsets.patterns``.
>      """
>      # i18n: "tag" is a keyword
>      args = getargs(x, 0, 1, _("tag takes one or no arguments"))
> @@ -2310,9 +2303,8 @@
>  def user(repo, subset, x):
>      """User name contains string. The match is case-insensitive.
>
> -    If `string` starts with `re:`, the remainder of the string is treated as
> -    a regular expression. To match a user that actually contains `re:`, use
> -    the prefix `literal:`.
> +    Pattern matching is supported for `string`. See
> +    ``hg help revsets.patterns``.
>      """
>      return author(repo, subset, x)
>
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel@mercurial-scm.org
> https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel
Pierre-Yves David - Jan. 13, 2017, 8:04 a.m.
On 01/13/2017 06:34 AM, Martin von Zweigbergk via Mercurial-devel wrote:
> On Thu, Jan 12, 2017 at 9:24 PM, Matt Harbison <mharbison72@gmail.com> wrote:
>> # HG changeset patch
>> # User Matt Harbison <matt_harbison@yahoo.com>
>> # Date 1483850135 18000
>> #      Sat Jan 07 23:35:35 2017 -0500
>> # Node ID 2060486431053a99eafa4234aea139f6a31dc2d7
>> # Parent  29cbe16c5cccf600fae928df52dbd44171096a6f
>> help: eliminate duplicate text for revset string patterns
>>
>> There's no reason to duplicate this so many times, and it's likely an instance
>> will be missed if support for a new pattern is added and documented.  The
>> stringmatcher is mostly used by revsets, though it is also used for the 'tag'
>> related templates, and namespace filtering in the journal extension.  So maybe
>> there's a better place to document it.  `hg help patterns` seems inappropriate,
>> because that is all file pattern matching.
>>
>> While here, indicate how to perform case insensitive regex searches.

That series is pushed. Thanks.

>> diff --git a/mercurial/help/revsets.txt b/mercurial/help/revsets.txt
>> --- a/mercurial/help/revsets.txt
>> +++ b/mercurial/help/revsets.txt
>
> This file no longer exists. I merged it into revisions.txt very
> recently, so you should probably rebase this series on top of @ from
> the "committed" repo
> (https://www.mercurial-scm.org/repo/hg-committed/) and resend. Sorry.

I've renamed the file in the patch and it applied like a charmed. Thank 
for the pointer.

Cheers,

Patch

diff --git a/mercurial/help/revsets.txt b/mercurial/help/revsets.txt
--- a/mercurial/help/revsets.txt
+++ b/mercurial/help/revsets.txt
@@ -79,6 +79,23 @@ 
 ``x^``
   Equivalent to ``x^1``, the first parent of each changeset in x.
 
+Patterns
+========
+
+Where noted, predicates that perform string matching can accept a pattern
+string. The pattern may be either a literal, or a regular expression. If the
+pattern starts with ``re:``, the remainder of the pattern is treated as a
+regular expression. Otherwise, it is treated as a literal. To match a pattern
+that actually starts with ``re:``, use the prefix ``literal:``.
+
+Matching is case-sensitive, unless otherwise noted.  To perform a case-
+insensitive match on a case-sensitive predicate, use a regular expression,
+prefixed with ``(?i)``.
+
+  For example::
+
+    ``tag(r're:(?i)release')`` matches tags containing "release" or "RELEASE".
+
 Predicates
 ==========
 
diff --git a/mercurial/revset.py b/mercurial/revset.py
--- a/mercurial/revset.py
+++ b/mercurial/revset.py
@@ -588,9 +588,7 @@ 
 def bookmark(repo, subset, x):
     """The named bookmark or all bookmarks.
 
-    If `name` starts with `re:`, the remainder of the name is treated as
-    a regular expression. To match a bookmark that actually starts with `re:`,
-    use the prefix `literal:`.
+    Pattern matching is supported for `name`. See ``hg help revsets.patterns``.
     """
     # i18n: "bookmark" is a keyword
     args = getargs(x, 0, 1, _('bookmark takes one or no arguments'))
@@ -628,9 +626,8 @@ 
     All changesets belonging to the given branch or the branches of the given
     changesets.
 
-    If `string` starts with `re:`, the remainder of the name is treated as
-    a regular expression. To match a branch that actually starts with `re:`,
-    use the prefix `literal:`.
+    Pattern matching is supported for `string`. See
+    ``hg help revsets.patterns``.
     """
     getbi = repo.revbranchcache().branchinfo
 
@@ -815,9 +812,8 @@ 
 def desc(repo, subset, x):
     """Search commit message for string. The match is case-insensitive.
 
-    If `string` starts with `re:`, the remainder of the string is treated as
-    a regular expression. To match a substring that actually starts with `re:`,
-    use the prefix `literal:`.
+    Pattern matching is supported for `string`. See
+    ``hg help revsets.patterns``.
     """
     # i18n: "desc" is a keyword
     ds = getstring(x, _("desc requires a string"))
@@ -927,9 +923,8 @@ 
     """Changesets with the given label in the extra metadata, with the given
     optional value.
 
-    If `value` starts with `re:`, the remainder of the value is treated as
-    a regular expression. To match a value that actually starts with `re:`,
-    use the prefix `literal:`.
+    Pattern matching is supported for `value`. See
+    ``hg help revsets.patterns``.
     """
     args = getargsdict(x, 'extra', 'label value')
     if 'label' not in args:
@@ -1409,9 +1404,8 @@ 
 def named(repo, subset, x):
     """The changesets in a given namespace.
 
-    If `namespace` starts with `re:`, the remainder of the string is treated as
-    a regular expression. To match a namespace that actually starts with `re:`,
-    use the prefix `literal:`.
+    Pattern matching is supported for `namespace`. See
+    ``hg help revsets.patterns``.
     """
     # i18n: "named" is a keyword
     args = getargs(x, 1, 1, _('named requires a namespace argument'))
@@ -2267,9 +2261,8 @@ 
 def tag(repo, subset, x):
     """The specified tag by name, or all tagged revisions if no name is given.
 
-    If `name` starts with `re:`, the remainder of the name is treated as
-    a regular expression. To match a tag that actually starts with `re:`,
-    use the prefix `literal:`.
+    Pattern matching is supported for `name`. See
+    ``hg help revsets.patterns``.
     """
     # i18n: "tag" is a keyword
     args = getargs(x, 0, 1, _("tag takes one or no arguments"))
@@ -2310,9 +2303,8 @@ 
 def user(repo, subset, x):
     """User name contains string. The match is case-insensitive.
 
-    If `string` starts with `re:`, the remainder of the string is treated as
-    a regular expression. To match a user that actually contains `re:`, use
-    the prefix `literal:`.
+    Pattern matching is supported for `string`. See
+    ``hg help revsets.patterns``.
     """
     return author(repo, subset, x)