[libcamera-devel] [PATCH] utils: checkstyle.py: Extract title and trailers with one command

Kieran Bingham kieran.bingham at ideasonboard.com
Fri Jul 28 17:56:23 CEST 2023


Quoting Laurent Pinchart (2023-07-25 14:55:47)
> The Amendment class calls `git show` twice, once to extract the commit
> title, and a second time to extract the trailers. This can be combined
> in a single command, which is more efficient. Do so.
> 
> While at it, centralize initialization of self._trailers in the
> Commit.__init__() function.
> 
> Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> ---
>  utils/checkstyle.py | 23 ++++++++++-------------
>  1 file changed, 10 insertions(+), 13 deletions(-)
> 
> diff --git a/utils/checkstyle.py b/utils/checkstyle.py
> index 214509bc74d4..836ea80fe89b 100755
> --- a/utils/checkstyle.py
> +++ b/utils/checkstyle.py
> @@ -206,10 +206,10 @@ class CommitFile:
>  class Commit:
>      def __init__(self, commit):
>          self.commit = commit
> +        self._trailers = []
>          self._parse()
>  
>      def _parse_trailers(self, lines):
> -        self._trailers = []
>          for index in range(1, len(lines)):
>              line = lines[index]
>              if not line:
> @@ -257,9 +257,6 @@ class StagedChanges(Commit):
>      def __init__(self):
>          Commit.__init__(self, '')
>  
> -        # There are no trailers to parse on a Staged Change.
> -        self._trailers = []
> -
>      def _parse(self):
>          ret = subprocess.run(['git', 'diff', '--staged', '--name-status'],
>                               stdout=subprocess.PIPE).stdout.decode('utf-8')
> @@ -278,21 +275,21 @@ class Amendment(Commit):
>          Commit.__init__(self, '')
>  
>      def _parse(self):
> -        # Create a title using HEAD commit
> -        ret = subprocess.run(['git', 'show', '--pretty=oneline', '--no-patch'],
> +        # Create a title using HEAD commit and parse the trailers.
> +        ret = subprocess.run(['git', 'show', '--format=%H %s%n%(trailers:only,unfold)',
> +                             '--no-patch'],
>                               stdout=subprocess.PIPE).stdout.decode('utf-8')
> -        self._title = 'Amendment of ' + ret.strip()
> +        lines = ret.splitlines()
> +
> +        self._title = 'Amendment of ' + lines[0].strip()
> +
> +        self._parse_trailers(lines)

Aha - I'd missed before that _parse_trailers skips the first line
anyway...

> +
>          # Extract the list of modified files
>          ret = subprocess.run(['git', 'diff', '--staged', '--name-status', 'HEAD~'],
>                               stdout=subprocess.PIPE).stdout.decode('utf-8')
>          self._files = [CommitFile(f) for f in ret.splitlines()]
>  
> -        # Parse trailers from the existing commit only.
> -        ret = subprocess.run(['git', 'show', '--format=%n%(trailers:only,unfold)',
> -                             '--no-patch'],
> -                             stdout=subprocess.PIPE).stdout.decode('utf-8')
> -        self._parse_trailers(ret.splitlines())

Which I suspect is where the --format=%n (which seems to be a newline)
was fortunate enough to cover my misunderstanding.

Anyway


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


> -
>      def get_diff(self, top_level, filename):
>          diff = subprocess.run(['git', 'diff', '--staged', 'HEAD~', '--',
>                                 '%s/%s' % (top_level, filename)],
> 
> base-commit: baaad1bf9e2acb3ab721945041ef46496951c04c
> -- 
> Regards,
> 
> Laurent Pinchart
>


More information about the libcamera-devel mailing list