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

git/objects/commit.py

Lines changed: 16 additions & 11 deletions
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

test/test_commit.py

Lines changed: 4 additions & 4 deletions
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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy