summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>2024-08-05 20:38:34 +0300
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>2024-08-07 18:58:54 +0300
commit6f1df8d6060c1a584c553479cb9e18fe4d1d0b5e (patch)
treee6051cc7549da013d0eb614e22d5444912f58c31
parent82c5ea24b0e6120b75cd2f21075a3cdcb9d3d7a2 (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>
-rwxr-xr-xutils/checkstyle.py26
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~'],