[PATCH v2 3/3] utils: checkstyle.py: Fix trailer parsing for commits with changelogs

Kieran Bingham kieran.bingham at ideasonboard.com
Wed Aug 7 14:41:53 CEST 2024


Quoting Laurent Pinchart (2024-08-07 13:15:16)
> Trailers are extracted from commits using the '(trailers:*)' formatting
> specifier. git ignores dividers when doing so, as if the --no-divider
> options was passed to git-interpret-trailers. This prevents trailers
> from being located when the patch contains a local changelog.
> 
> There is unfortuantely no 'no-no-divider' option to the trailers format
> specifier. Fix the issue by extracting trailers with
> git-interpret-trailers, that gives better control of the parsing.

Sounds good to me and in fact looks simpler in the implementation?

Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com>

> 
> Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> ---
>  utils/checkstyle.py | 26 +++++++++++++-------------
>  1 file changed, 13 insertions(+), 13 deletions(-)
> 
> diff --git a/utils/checkstyle.py b/utils/checkstyle.py
> index 560a2c1e8c58..dae5d518920a 100755
> --- a/utils/checkstyle.py
> +++ b/utils/checkstyle.py
> @@ -216,28 +216,28 @@ class Commit:
>          self._trailers = []
>          self._parse()
>  
> -    def _parse_trailers(self, lines):
> -        for index in range(2, len(lines)):
> -            line = lines[index]
> -            if not line:
> -                break
> +    def _parse_trailers(self):
> +        proc_show = subprocess.run(['git', 'show', '--format=%b',
> +                                    '--no-patch', self.commit],
> +                                   stdout=subprocess.PIPE)
> +        trailers = subprocess.run(['git', 'interpret-trailers', '--parse'],
> +                                  input=proc_show.stdout,
> +                                  stdout=subprocess.PIPE).stdout.decode('utf-8')
>  
> -            self._trailers.append(line)
> -
> -        return index
> +        self._trailers = trailers.splitlines()
>  
>      def _parse(self):
>          # Get the commit title and list of files.
> -        ret = subprocess.run(['git', 'show', '--format=%an <%ae>%n%s%n%(trailers:only,unfold)',
> +        ret = subprocess.run(['git', 'show', '--format=%an <%ae>%n%s',
>                                '--name-status', self.commit],
>                               stdout=subprocess.PIPE).stdout.decode('utf-8')
>          lines = ret.splitlines()
>  
>          self._author = lines[0]
>          self._title = lines[1]
> +        self._files = [CommitFile(f) for f in lines[2:] if f]
>  
> -        index = self._parse_trailers(lines)
> -        self._files = [CommitFile(f) for f in lines[index:] if f]
> +        self._parse_trailers()
>  
>      def files(self, filter='AMR'):
>          return [f.filename for f in self._files if f.status in filter]
> @@ -288,7 +288,7 @@ class Amendment(Commit):
>  
>      def _parse(self):
>          # Create a title using HEAD commit and parse the trailers.
> -        ret = subprocess.run(['git', 'show', '--format=%an <%ae>%n%H %s%n%(trailers:only,unfold)',
> +        ret = subprocess.run(['git', 'show', '--format=%an <%ae>%n%H %s',
>                               '--no-patch'],
>                               stdout=subprocess.PIPE).stdout.decode('utf-8')
>          lines = ret.splitlines()
> @@ -296,7 +296,7 @@ class Amendment(Commit):
>          self._author = lines[0]
>          self._title = 'Amendment of ' + lines[1]
>  
> -        self._parse_trailers(lines)
> +        self._parse_trailers()
>  
>          # Extract the list of modified files
>          ret = subprocess.run(['git', 'diff', '--staged', '--name-status', 'HEAD~'],
> -- 
> Regards,
> 
> Laurent Pinchart
>


More information about the libcamera-devel mailing list