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._trailers = []
|
||||||
self._parse()
|
self._parse()
|
||||||
|
|
||||||
def _parse_trailers(self, lines):
|
def _parse_trailers(self):
|
||||||
for index in range(2, len(lines)):
|
proc_show = subprocess.run(['git', 'show', '--format=%b',
|
||||||
line = lines[index]
|
'--no-patch', self.commit],
|
||||||
if not line:
|
stdout=subprocess.PIPE)
|
||||||
break
|
trailers = subprocess.run(['git', 'interpret-trailers', '--parse'],
|
||||||
|
input=proc_show.stdout,
|
||||||
|
stdout=subprocess.PIPE).stdout.decode('utf-8')
|
||||||
|
|
||||||
self._trailers.append(line)
|
self._trailers = trailers.splitlines()
|
||||||
|
|
||||||
return index
|
|
||||||
|
|
||||||
def _parse(self):
|
def _parse(self):
|
||||||
# Get the commit title and list of files.
|
# 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],
|
'--name-status', self.commit],
|
||||||
stdout=subprocess.PIPE).stdout.decode('utf-8')
|
stdout=subprocess.PIPE).stdout.decode('utf-8')
|
||||||
lines = ret.splitlines()
|
lines = ret.splitlines()
|
||||||
|
|
||||||
self._author = lines[0]
|
self._author = lines[0]
|
||||||
self._title = lines[1]
|
self._title = lines[1]
|
||||||
|
self._files = [CommitFile(f) for f in lines[2:] if f]
|
||||||
|
|
||||||
index = self._parse_trailers(lines)
|
self._parse_trailers()
|
||||||
self._files = [CommitFile(f) for f in lines[index:] if f]
|
|
||||||
|
|
||||||
def files(self, filter='AMR'):
|
def files(self, filter='AMR'):
|
||||||
return [f.filename for f in self._files if f.status in filter]
|
return [f.filename for f in self._files if f.status in filter]
|
||||||
|
@ -288,7 +288,7 @@ class Amendment(Commit):
|
||||||
|
|
||||||
def _parse(self):
|
def _parse(self):
|
||||||
# Create a title using HEAD commit and parse the trailers.
|
# 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'],
|
'--no-patch'],
|
||||||
stdout=subprocess.PIPE).stdout.decode('utf-8')
|
stdout=subprocess.PIPE).stdout.decode('utf-8')
|
||||||
lines = ret.splitlines()
|
lines = ret.splitlines()
|
||||||
|
@ -296,7 +296,7 @@ class Amendment(Commit):
|
||||||
self._author = lines[0]
|
self._author = lines[0]
|
||||||
self._title = 'Amendment of ' + lines[1]
|
self._title = 'Amendment of ' + lines[1]
|
||||||
|
|
||||||
self._parse_trailers(lines)
|
self._parse_trailers()
|
||||||
|
|
||||||
# Extract the list of modified files
|
# Extract the list of modified files
|
||||||
ret = subprocess.run(['git', 'diff', '--staged', '--name-status', 'HEAD~'],
|
ret = subprocess.run(['git', 'diff', '--staged', '--name-status', 'HEAD~'],
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue