Skip to content

Commit abde3ea

Browse files
committed
Update Commit.trailer_list to return tuples.
1 parent 78424b5 commit abde3ea

File tree

2 files changed

+20
-15
lines changed

2 files changed

+20
-15
lines changed

Diff for: git/objects/commit.py

+16-11
Original file line numberDiff line numberDiff line change
@@ -336,7 +336,7 @@ def stats(self) -> Stats:
336336
return Stats._list_from_string(self.repo, text)
337337

338338
@property
339-
def trailers_list(self) -> List[str]:
339+
def trailers_list(self) -> List[Tuple[str, str]]:
340340
"""Get the trailers of the message as a list
341341
342342
Git messages can contain trailer information that are similar to RFC 822
@@ -361,23 +361,29 @@ def trailers_list(self) -> List[str]:
361361
Returned list will look like this::
362362
363363
[
364-
"key1: value1.1",
365-
"key1: value1.2",
366-
"key2 : value 2 with inner spaces",
364+
("key1", "value1.1"),
365+
("key1", "value1.2"),
366+
("key2", "value 2 with inner spaces"),
367367
]
368368
369369
370370
:return:
371-
List containing whitespace stripped trailer information.
371+
List containing key-value tuples of whitespace stripped trailer information.
372372
"""
373373
cmd = ["git", "interpret-trailers", "--parse"]
374374
proc: Git.AutoInterrupt = self.repo.git.execute(cmd, as_process=True, istream=PIPE) # type: ignore
375375
trailer: str = proc.communicate(str(self.message).encode())[0].decode()
376376
trailer = trailer.strip()
377-
if trailer:
378-
return [t.strip() for t in trailer.split("\n")]
379377

380-
return []
378+
if not trailer:
379+
return []
380+
381+
trailer_list = []
382+
for t in trailer.split("\n"):
383+
key, val = t.split(":", 1)
384+
trailer_list.append((key.strip(), val.strip()))
385+
386+
return trailer_list
381387

382388
@property
383389
def trailers_dict(self) -> Dict[str, List[str]]:
@@ -416,9 +422,8 @@ def trailers_dict(self) -> Dict[str, List[str]]:
416422
Mapping trailer keys to a list of their corresponding values.
417423
"""
418424
d = defaultdict(list)
419-
for trailer in self.trailers_list:
420-
key, value = trailer.split(":", 1)
421-
d[key.strip()].append(value.strip())
425+
for key, val in self.trailers_list:
426+
d[key].append(val)
422427
return dict(d)
423428

424429
@classmethod

Diff for: test/test_commit.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -515,9 +515,9 @@ def test_trailers(self):
515515
commit = copy.copy(self.rorepo.commit("master"))
516516
commit.message = msg
517517
assert commit.trailers_list == [
518-
f"{KEY_1}: {VALUE_1_1}",
519-
f"{KEY_2}: {VALUE_2}",
520-
f"{KEY_1}: {VALUE_1_2}",
518+
(KEY_1, VALUE_1_1),
519+
(KEY_2, VALUE_2),
520+
(KEY_1, VALUE_1_2),
521521
]
522522
assert commit.trailers_dict == {
523523
KEY_1: [VALUE_1_1, VALUE_1_2],
@@ -543,7 +543,7 @@ def test_trailers(self):
543543
# check that only the last key value paragraph is evaluated
544544
commit = copy.copy(self.rorepo.commit("master"))
545545
commit.message = f"Subject\n\nMultiline\nBody\n\n{KEY_1}: {VALUE_1_1}\n\n{KEY_2}: {VALUE_2}\n"
546-
assert commit.trailers_list == [f"{KEY_2}: {VALUE_2}"]
546+
assert commit.trailers_list == [(KEY_2, VALUE_2)]
547547
assert commit.trailers_dict == {KEY_2: [VALUE_2]}
548548

549549
def test_commit_co_authors(self):

0 commit comments

Comments
 (0)