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>
This commit is contained in:
parent
82c5ea24b0
commit
6f1df8d606
1 changed files with 13 additions and 13 deletions
|
@ -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~'],
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue