Skip to content

Commit df06c63

Browse files
Merge pull request #18 from ecmwf/feature/git_in_logs
adding git info to commit message
2 parents ef8a974 + a4709b9 commit df06c63

File tree

1 file changed

+62
-8
lines changed

1 file changed

+62
-8
lines changed

wellies/deployment.py

+62-8
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,65 @@ def _generate_suite(suite, staging_dir, suite_name):
2626
return def_file
2727

2828

29+
def git_commit_message(message_args):
30+
"""
31+
Generate a git commit message with additional repository information
32+
(directory, git remote, git hash).
33+
34+
Parameters
35+
----------
36+
message_args : str or None
37+
Additional message to append to the default commit message.
38+
If None, only the default message is used.
39+
Returns
40+
-------
41+
str
42+
The complete commit message including repository information and the
43+
additional message if provided.
44+
Notes
45+
-----
46+
The default message includes the version of the wellies suite and the
47+
current working directory.
48+
If a local git repository is found, the message also includes the remote
49+
repository name and the current commit hash.
50+
If no local git repository is found, only the default message is used.
51+
"""
52+
53+
default_message = (
54+
f"suite generated using wellies {wl.__version__}"
55+
+ f" from directory {os.getcwd()}"
56+
)
57+
58+
try:
59+
repo = git.Repo(".")
60+
61+
commit_hash = repo.head.commit.hexsha
62+
remote_url = next(repo.remote().urls)
63+
if repo.head.is_detached:
64+
branch_name = "Detached HEAD"
65+
else:
66+
branch_name = repo.active_branch.name
67+
default_message += "\nGit info:\n"
68+
default_message += f" - Remote URL: {remote_url} \n"
69+
default_message += f" - Commit: {commit_hash}\n"
70+
default_message += f" - Branch: {branch_name}\n"
71+
if repo.is_dirty():
72+
modified_files = [item.a_path for item in repo.index.diff(None)]
73+
if modified_files:
74+
default_message += " - Local changes:\n"
75+
for file in modified_files:
76+
default_message += f" - {file}\n"
77+
except (git.exc.NoSuchPathError, git.exc.InvalidGitRepositoryError):
78+
print("Could not find local git repository, using default message")
79+
80+
if message_args is None:
81+
message = default_message
82+
else:
83+
message = default_message + "\n\n" + {message}
84+
85+
return message
86+
87+
2988
def deploy_suite(
3089
suite: pf.Suite,
3190
user: str,
@@ -128,14 +187,9 @@ def deploy_suite(
128187
if check != "y":
129188
print("Aborting deployment")
130189
exit(1)
131-
default_message = (
132-
f"suite generated using wellies {wl.__version__}"
133-
+ f" from directory {os.getcwd()}"
134-
)
135-
if message is None:
136-
message = default_message
137-
else:
138-
message = default_message + "\n" + {message}
190+
191+
message = git_commit_message(message)
192+
139193
if deployer.deploy(message, files):
140194
print(f"Suite deployed to {target_repo}")
141195
print(f"Definition file: {target_repo}/{name}.def")

0 commit comments

Comments
 (0)