summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTwist <itsluketwist@gmail.com>2023-04-22 17:47:08 +0100
committerTwist <itsluketwist@gmail.com>2023-04-22 17:47:08 +0100
commitabde3eafd293e8fa2ef2dc22d58ba5d80f1702e9 (patch)
treefd33d87aa5c1787befadb03edad17687cc29df79
parent78424b56654ad476da4bd2faf88d3875c5265e0d (diff)
downloadgitpython-abde3eafd293e8fa2ef2dc22d58ba5d80f1702e9.tar.gz
Update Commit.trailer_list to return tuples.
-rw-r--r--git/objects/commit.py27
-rw-r--r--test/test_commit.py8
2 files changed, 20 insertions, 15 deletions
diff --git a/git/objects/commit.py b/git/objects/commit.py
index 1e3f751b..b41a7995 100644
--- a/git/objects/commit.py
+++ b/git/objects/commit.py
@@ -336,7 +336,7 @@ class Commit(base.Object, TraversableIterableObj, Diffable, Serializable):
return Stats._list_from_string(self.repo, text)
@property
- def trailers_list(self) -> List[str]:
+ def trailers_list(self) -> List[Tuple[str, str]]:
"""Get the trailers of the message as a list
Git messages can contain trailer information that are similar to RFC 822
@@ -361,23 +361,29 @@ class Commit(base.Object, TraversableIterableObj, Diffable, Serializable):
Returned list will look like this::
[
- "key1: value1.1",
- "key1: value1.2",
- "key2 : value 2 with inner spaces",
+ ("key1", "value1.1"),
+ ("key1", "value1.2"),
+ ("key2", "value 2 with inner spaces"),
]
:return:
- List containing whitespace stripped trailer information.
+ List containing key-value tuples of whitespace stripped trailer information.
"""
cmd = ["git", "interpret-trailers", "--parse"]
proc: Git.AutoInterrupt = self.repo.git.execute(cmd, as_process=True, istream=PIPE) # type: ignore
trailer: str = proc.communicate(str(self.message).encode())[0].decode()
trailer = trailer.strip()
- if trailer:
- return [t.strip() for t in trailer.split("\n")]
- return []
+ if not trailer:
+ return []
+
+ trailer_list = []
+ for t in trailer.split("\n"):
+ key, val = t.split(":", 1)
+ trailer_list.append((key.strip(), val.strip()))
+
+ return trailer_list
@property
def trailers_dict(self) -> Dict[str, List[str]]:
@@ -416,9 +422,8 @@ class Commit(base.Object, TraversableIterableObj, Diffable, Serializable):
Mapping trailer keys to a list of their corresponding values.
"""
d = defaultdict(list)
- for trailer in self.trailers_list:
- key, value = trailer.split(":", 1)
- d[key.strip()].append(value.strip())
+ for key, val in self.trailers_list:
+ d[key].append(val)
return dict(d)
@classmethod
diff --git a/test/test_commit.py b/test/test_commit.py
index 8d2ee754..4871902e 100644
--- a/test/test_commit.py
+++ b/test/test_commit.py
@@ -515,9 +515,9 @@ JzJMZDRLQLFvnzqZuCjE
commit = copy.copy(self.rorepo.commit("master"))
commit.message = msg
assert commit.trailers_list == [
- f"{KEY_1}: {VALUE_1_1}",
- f"{KEY_2}: {VALUE_2}",
- f"{KEY_1}: {VALUE_1_2}",
+ (KEY_1, VALUE_1_1),
+ (KEY_2, VALUE_2),
+ (KEY_1, VALUE_1_2),
]
assert commit.trailers_dict == {
KEY_1: [VALUE_1_1, VALUE_1_2],
@@ -543,7 +543,7 @@ JzJMZDRLQLFvnzqZuCjE
# check that only the last key value paragraph is evaluated
commit = copy.copy(self.rorepo.commit("master"))
commit.message = f"Subject\n\nMultiline\nBody\n\n{KEY_1}: {VALUE_1_1}\n\n{KEY_2}: {VALUE_2}\n"
- assert commit.trailers_list == [f"{KEY_2}: {VALUE_2}"]
+ assert commit.trailers_list == [(KEY_2, VALUE_2)]
assert commit.trailers_dict == {KEY_2: [VALUE_2]}
def test_commit_co_authors(self):