[PATCH v2][kteam-tools] ktl: Don't treat all strings matching "#[0-9]+" as a bug numbers
Andy Whitcroft
apw at canonical.com
Wed Aug 24 08:23:23 UTC 2016
On Wed, Aug 10, 2016 at 01:10:12PM -0500, Seth Forshee wrote:
> The bug number regular expression matching correctly identifies
> lines containing launchpad bug numbers, but once such a line is
> identified it treats any string matching "#[0-9]+" as a bug
> number. For example, in this changelog entry #1 is identified as
> a bug number:
>
> * [LTCTest][Opal][OP820] Machine crashed with Oops: Kernel access of bad area,
> sig: 11 [#1] while executing Froze PE Error injection (LP: #1603449)
>
> As far as I can tell the format of bug strings that we need to
> match is the string "LP:" followed by whitespace, followed by one
> or more bug numbers of the format "#[0-9]+" separated by a comma
> and whitespace. This can be expressed as the following python
> regex:
>
> LP:\s#[0-9]+(,\s#[0-9]+)*
That prolly should be LP:\s+ for safety, at times these are typed by
hand in some packages.
> I'm not a regex wizard, so there may be a more optimal way to
> express this regex, but it seems to work.
>
> Therefore this patch updates the bug number matching as follows:
>
> 1. Use re.finditer with the above regex (modified to use non-
> capturing grouping) to match all groups of bug numbers on a
> line.
>
> 2. Within each match, use findall to create a list of all bug
> numbers by matching against "#([0-9]+)".
>
> 3. Append the list returned by re.findall directly to the bug
> list. The list returned by re.findall will never be empty
> since the string being searched matched the regex used in
> (1), but even if it was appending an empty list to another
> list is a nop.
>
> In my testing this matches the same set of bug numbers matched by
> the current code but does not match the #1 in the example above.
>
> Signed-off-by: Seth Forshee <seth.forshee at canonical.com>
> ---
> ktl/debian.py | 14 ++++++--------
> 1 file changed, 6 insertions(+), 8 deletions(-)
>
> diff --git a/ktl/debian.py b/ktl/debian.py
> index dd2703a..9ba2836 100644
> --- a/ktl/debian.py
> +++ b/ktl/debian.py
> @@ -8,7 +8,7 @@
> from ktl.git import Git, GitError
> from ktl.utils import debug, dump
> from ktl.kernel import Kernel
> -from re import compile, findall
> +from re import compile, findall, finditer
> from os import path, listdir, walk
>
> # DebianError
> @@ -30,8 +30,8 @@ class Debian:
>
> package_rc = compile("^(linux[-\S])*.*$")
> ver_rc = compile("^linux[-\S]* \(([0-9]+\.[0-9]+\.[0-9]+[-\.][0-9]+\.[0-9]+[~a-z0-9]*)\).*$")
> - bug_line_rc = compile("LP:\s#[0-9]+")
> - bug_rc = compile("#([0-9]+)")
> + bug_rc = compile("LP:\s#[0-9]+(?:,\s#[0-9]+)*")
> + bug_nr_rc = compile("#([0-9]+)")
>
> # debian_directories
> #
> @@ -176,11 +176,9 @@ class Debian:
> bugs = []
> else:
> # find bug numbers and append them to the list
> - bug_line_matches = cls.bug_line_rc.search(line)
> - if bug_line_matches:
> - bug_matches = findall(cls.bug_rc,line)
> - if bug_matches:
> - bugs.extend( bug_matches )
> + for bug_line_match in finditer(cls.bug_rc, line):
> + bug_matches = findall(cls.bug_nr_rc, bug_line_match.group(0))
> + bugs.extend(bug_matches)
>
> content.append(line)
More information about the kernel-team
mailing list