Skip to content

Commit

Permalink
feat: Add commit log to metadata and the report
Browse files Browse the repository at this point in the history
  • Loading branch information
Wuestengecko committed Sep 24, 2024
1 parent d729d88 commit 89e3d74
Show file tree
Hide file tree
Showing 3 changed files with 78 additions and 4 deletions.
31 changes: 31 additions & 0 deletions capella_diff_tools/__main__.py
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@ def main(
"model": model,
"old_revision": _get_revision_info(old_model, old_version),
"new_revision": _get_revision_info(new_model, new_version),
"commit_log": _get_commit_log(new_model, old_version, new_version),
}
objects = compare.compare_all_objects(old_model, new_model)
diagrams = compare.compare_all_diagrams(old_model, new_model)
Expand Down Expand Up @@ -132,6 +133,36 @@ def _get_revision_info(
}


def _get_commit_log(
model: capellambse.MelodyModel,
old_version: str,
new_version: str,
) -> list[types.RevisionInfo]:
res = model._loader.resources["\x00"]
assert isinstance(res, fh.git.GitFileHandler)
commits: list[types.RevisionInfo] = []
rawlog = res._git(
"log",
"-z",
"--reverse",
"--format=format:%H%x00%aN%x00%aI%x00%B",
f"{old_version}..{new_version}",
encoding="utf-8",
).split("\x00")
log = capellambse.helpers.ntuples(4, rawlog)
for hash, author, date_str, description in log:
commits.append(
{
"hash": hash,
"revision": hash,
"author": author,
"date": datetime.datetime.fromisoformat(date_str),
"description": description.rstrip(),
}
)
return commits


class CustomYAMLDumper(yaml.SafeDumper):
"""A custom YAML dumper that can serialize markupsafe.Markup."""

Expand Down
50 changes: 46 additions & 4 deletions capella_diff_tools/report.html.jinja
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@
<b>Repository: </b>{{ data["metadata"]["model"]["path"] | e }} <br/>
<b>Entry point: </b>{{ data["metadata"]["model"]["entrypoint"] | e }}
</p>
<p>The review of changes covers the following commits:</p>
<p>The review of changes covers the following range of commits:</p>
<table>
<thead>
<tr>
Expand All @@ -84,9 +84,9 @@
<td>{{ data["metadata"]["new_revision"]["date"] | e }}</td>
</tr>
<tr>
<th>Commit message</th>
<td>{{ data["metadata"]["old_revision"]["description"] | e }}</td>
<td>{{ data["metadata"]["new_revision"]["description"] | e }}</td>
<th>Summary</th>
<td>{{ data["metadata"]["old_revision"]["description"].split("\n") | first | e }}</td>
<td>{{ data["metadata"]["new_revision"]["description"].split("\n") | first | e }}</td>
</tr>
<tr>
<th>Commit ID (hash)</th>
Expand All @@ -96,6 +96,48 @@
</tbody>
</table>

<p>Detailed information about the contained commits:</p>

<table>
<tbody>
{% for commit in data.metadata.commit_log -%}
<tr>
<td>{{ commit.hash | e }}</td>
<td>{{ commit.date | e }}</td>
<td>{{ commit.author | e }}</td>
<td style="white-space: preserve">{{ commit.description | e }}</td>
</tr>
{% else -%}
<tr>
<td>{{ data.metadata.old_revision.hash }}</td>
<td>{{ data.metadata.old_revision.date }}</td>
<td>{{ data.metadata.old_revision.author }}</td>
<td style="white-space: preserve">{{ data.metadata.old_revision.description }}</td>
</tr>
<tr>
<td colspan="4" style="font-style: italic; color: red">
Error: The supplied report does not contain the commit log.
Detailed information is only available for the first and last commit.
</td>
</tr>
<tr>
<td>{{ data.metadata.new_revision.hash }}</td>
<td>{{ data.metadata.new_revision.date }}</td>
<td>{{ data.metadata.new_revision.author }}</td>
<td style="white-space: preserve">{{ data.metadata.new_revision.description }}</td>
</tr>
{% endfor -%}
</tbody>
<thead>
<tr>
<th>Commit ID (hash)</th>
<th>Date &amp; time</th>
<th>Author</th>
<th>Commit message</th>
</tr>
</thead>
</table>

{% macro pretty_stats(stats) %}
<span style="font-weight: normal;">(
{% if stats.created %}<span style="color:green">+{{stats["created"]}}</span> / {% endif %}
Expand Down
1 change: 1 addition & 0 deletions capella_diff_tools/types.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ class Metadata(te.TypedDict):
"""The 'modelinfo' used to load the models, sans the revision key."""
new_revision: RevisionInfo
old_revision: RevisionInfo
commit_log: list[RevisionInfo]


class RevisionInfo(te.TypedDict, total=False):
Expand Down

0 comments on commit 89e3d74

Please sign in to comment.