[PATCH 2 of 5] match: add option to return line and lineno from readpattern

Gilles Moris gilles.moris at free.fr
Fri Dec 25 11:21:21 CST 2015



Le 23/12/2015 21:42, Laurent Charignon a écrit :
> # HG changeset patch
> # User Laurent Charignon <lcharignon at fb.com>
> # Date 1450900540 28800
> #      Wed Dec 23 11:55:40 2015 -0800
> # Node ID 391510022f76e3fc135b78b4cb14dec73a3761cb
> # Parent  327bb58234a16dacf42ea57ff4dcb2c698f28638
> match: add option to return line and lineno from readpattern
>
> This will be used to display the line and linenumber of ignorefile that matched
> an ignored file (issue4856).
>
> diff --git a/mercurial/match.py b/mercurial/match.py
> --- a/mercurial/match.py
> +++ b/mercurial/match.py
> @@ -632,7 +632,7 @@
>   
>   _commentre = None
>   
> -def readpatternfile(filepath, warn):
> +def readpatternfile(filepath, warn, sourceinfo=False):
>       '''parse a pattern file, returning a list of
>       patterns. These patterns should be given to compile()
>       to be validated and converted into a match function.
> @@ -648,7 +648,11 @@
>       syntax: glob   # defaults following lines to non-rooted globs
>       re:pattern     # non-rooted regular expression
>       glob:pattern   # non-rooted glob
> -    pattern        # pattern of the current default type'''
> +    pattern        # pattern of the current default type
> +
> +    if sourceinfo is set, returns a list of tuples:
> +    (pattern, lineno, originalline). This is useful to debug ignore patterns.
> +    '''
>   
>       syntaxes = {'re': 'relre:', 'regexp': 'relre:', 'glob': 'relglob:',
>                   'include': 'include', 'subinclude': 'subinclude'}
> @@ -656,7 +660,7 @@
>       patterns = []
>   
>       fp = open(filepath)
> -    for line in fp:
> +    for lineno, line in enumerate(fp):
Conventionally, line numbers start at 1, so may be enumerate(fp, start=1)

Regards.
Gilles.

>           if "#" in line:
>               global _commentre
>               if not _commentre:
> @@ -691,6 +695,9 @@
>                   linesyntax = rels
>                   line = line[len(s) + 1:]
>                   break
> -        patterns.append(linesyntax + line)
> +        if sourceinfo:
> +            patterns.append((linesyntax + line, lineno, line))
> +        else:
> +            patterns.append(linesyntax + line)
>       fp.close()
>       return patterns
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at selenic.com
> https://selenic.com/mailman/listinfo/mercurial-devel



More information about the Mercurial-devel mailing list