From 209f97ada51b6e8a80d9bab1f1d4a42c8518981d Mon Sep 17 00:00:00 2001 From: Junior Martinez <67972863+jmartinez-silabs@users.noreply.github.com> Date: Wed, 30 Oct 2024 14:09:34 -0400 Subject: [PATCH 1/2] First version of the script to parse git branches for our commits TAGS/prefix --- scripts/tools/silabs/retrieve_sl_commits.py | 68 +++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 scripts/tools/silabs/retrieve_sl_commits.py diff --git a/scripts/tools/silabs/retrieve_sl_commits.py b/scripts/tools/silabs/retrieve_sl_commits.py new file mode 100644 index 0000000000..6e36c7e8c9 --- /dev/null +++ b/scripts/tools/silabs/retrieve_sl_commits.py @@ -0,0 +1,68 @@ +#! /usr/bin/python3 +import subprocess +import argparse +from argparse import RawTextHelpFormatter + +def get_git_log(start_sha, end_sha, prefixes): + try: + # Run the git log command with output format -- + result = subprocess.run( + ['git', 'log', '--pretty=format:%H -- %s %s', f'{start_sha}..{end_sha}'], + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + check=True, + text=True + ) + + # Split the result into lines + log_lines = result.stdout.split('\n') + + # Initialize a dictionary to hold commits by prefix + commits_by_prefix = {prefix: [] for prefix in prefixes} + + # Filter and group commits based on the prefixes + for line in log_lines: + for prefix in prefixes: + if prefix in line: + commits_by_prefix[prefix].append(line) + break + + return commits_by_prefix + + except subprocess.CalledProcessError as e: + print(f"Error running git log: {e}") + return {} + +def main(): + parser = argparse.ArgumentParser(formatter_class=RawTextHelpFormatter, description=""" + This script will parse git logs for our silabs prefixes ([SL-UP], [SL-TEMP], [SL-ONLY] or [CSA-CP]) between the commit SHAs provided in parameters + on the current git branch. + It will then output, per prefix, the commit sha and commit Title in the following format) + [PREFIX] commits: + <full_commit_sha> -- <Commit_Title> + """, + epilog= """ + Post result developer actions: + commits grouped under [SL-UP] shall be upstream the CSA master. + commits grouped under [SL-ONLY] shall be cherry-picked to matter_sdk main branch. + commits grouped under [SL-TEMP] must be revised. Are they still required, are they needed on main or for the next release. If they are, they need to be cherry-picked. + commits grouped under [CSA-PR] are purely informative. They already exist in CSA master and will automatically be brought to main or the new release branch through csa master merges. + """) + parser.add_argument('start_sha', type=str, help='The starting commit SHA') + parser.add_argument('end_sha', type=str, help='The ending commit SHA') + + args = parser.parse_args() + + start_sha = args.start_sha + end_sha = args.end_sha + prefixes = ["[SL-UP]", "[SL-TEMP]", "[SL-ONLY]", "[CSA-CP]"] + + commits_by_prefix = get_git_log(start_sha, end_sha, prefixes) + for prefix, commits in commits_by_prefix.items(): + print(f"{prefix} commits:") + for commit in commits: + print(commit) + print() + +if __name__ == "__main__": + main() \ No newline at end of file From b4a2a83bbdaf410fee1e3484633b8d982a607ca5 Mon Sep 17 00:00:00 2001 From: Junior Martinez <67972863+jmartinez-silabs@users.noreply.github.com> Date: Wed, 30 Oct 2024 16:21:52 -0400 Subject: [PATCH 2/2] Update scripts/tools/silabs/retrieve_sl_commits.py Co-authored-by: Michael Rupp <95718139+mykrupp@users.noreply.github.com> --- scripts/tools/silabs/retrieve_sl_commits.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/tools/silabs/retrieve_sl_commits.py b/scripts/tools/silabs/retrieve_sl_commits.py index 6e36c7e8c9..6aa7d7c6b8 100644 --- a/scripts/tools/silabs/retrieve_sl_commits.py +++ b/scripts/tools/silabs/retrieve_sl_commits.py @@ -46,7 +46,7 @@ def main(): commits grouped under [SL-UP] shall be upstream the CSA master. commits grouped under [SL-ONLY] shall be cherry-picked to matter_sdk main branch. commits grouped under [SL-TEMP] must be revised. Are they still required, are they needed on main or for the next release. If they are, they need to be cherry-picked. - commits grouped under [CSA-PR] are purely informative. They already exist in CSA master and will automatically be brought to main or the new release branch through csa master merges. + commits grouped under [CSA-CP] are purely informative. They already exist in CSA master and will automatically be brought to main or the new release branch through CSA master merges. """) parser.add_argument('start_sha', type=str, help='The starting commit SHA') parser.add_argument('end_sha', type=str, help='The ending commit SHA')