diff options
author | Laurent Pinchart <laurent.pinchart@ideasonboard.com> | 2024-08-05 20:38:34 +0300 |
---|---|---|
committer | Laurent Pinchart <laurent.pinchart@ideasonboard.com> | 2024-08-07 18:58:54 +0300 |
commit | 6f1df8d6060c1a584c553479cb9e18fe4d1d0b5e (patch) | |
tree | e6051cc7549da013d0eb614e22d5444912f58c31 /utils | |
parent | 82c5ea24b0e6120b75cd2f21075a3cdcb9d3d7a2 (diff) |
utils: checkstyle.py: Fix trailer parsing for commits with changelogs
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.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Diffstat (limited to 'utils')
-rwxr-xr-x | utils/checkstyle.py | 26 |
1 files changed, 13 insertions, 13 deletions
diff --git a/utils/checkstyle.py b/utils/checkstyle.py index 560a2c1e..dae5d518 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 - - self._trailers.append(line) + 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') - 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~'], |