From a419af2ade5a389e1b55f4ed00a3ec4abd0ffcea Mon Sep 17 00:00:00 2001 From: cclecle Date: Mon, 27 Mar 2023 23:11:16 +0100 Subject: [PATCH] add ignore_merged option to commit search --- mkdocs.yml | 15 ++++-- src/pygitversionhelper/gitversionhelper.py | 20 ++++++-- test/test_gitversionhelper.py | 58 +++++++++++++++++++++- 3 files changed, 83 insertions(+), 10 deletions(-) diff --git a/mkdocs.yml b/mkdocs.yml index 438ff03..aa37e6e 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -1,11 +1,11 @@ docs_dir: docs site_name: pygitversionhelper -site_url: 'https://chacha.ddns.net/mkdocs-web/chacha/pygitversionhelper/latest/' -site_description: 'A simple simple git version helper in python.' +site_url: https://chacha.ddns.net/mkdocs-web/chacha/pygitversionhelper/latest/ +site_description: A simple simple git version helper in python. site_author: prune -repo_url: 'https://chacha.ddns.net/gitea/chacha/pygitversionhelper' +repo_url: https://chacha.ddns.net/gitea/chacha/pygitversionhelper use_directory_urls: false -copyright: 'CC BY-NC-SA 4.0' +copyright: CC BY-NC-SA 4.0 theme: name: material features: @@ -57,6 +57,13 @@ plugins: show_root_full_path: false merge_init_into_class: true separate_signature: true +- with-pdf: + cover_subtitle: User Manual + cover_logo: C:\Users\chacha\git\pygitversionhelper\docs-static\Library.jpg + verbose: false + exclude_pages: + - LICENSE + output_path: C:\Users\chacha\git\pygitversionhelper\helpers-results\doc_gen\site\pdf\manual.pdf markdown_extensions: - def_list - tables diff --git a/src/pygitversionhelper/gitversionhelper.py b/src/pygitversionhelper/gitversionhelper.py index 4765769..e9245f7 100644 --- a/src/pygitversionhelper/gitversionhelper.py +++ b/src/pygitversionhelper/gitversionhelper.py @@ -57,6 +57,7 @@ if TYPE_CHECKING: "merged_output": Optional[bool], "ignore_unknown_tags": Optional[bool], "output_format": Optional[str], + "ignore_merged": Optional[bool], }, total=False, ) @@ -161,7 +162,9 @@ class gitversionhelper: # pylint: disable=too-few-public-methods the commit message """ current_commit_id = cls.getLast(**kwargs) + print(f"current_commit_id = {current_commit_id}") tag_commit_id = cls.getFromTag(tag) + print(f"tag_commit_id = {tag_commit_id}") if ("same_branch" in kwargs) and (kwargs["same_branch"] is True): commits = _exec(f"git rev-list --first-parent --ancestry-path {tag_commit_id}..{current_commit_id}") @@ -216,16 +219,23 @@ class gitversionhelper: # pylint: disable=too-few-public-methods """retrieve last commit from repository Keyword Arguments: kwargs/same_branch (bool): force searching only in the same branch + kwargs/ignore_merged (bool): ignore merged commits Returns: the commit Id """ + str_cmd: str if ("same_branch" in kwargs) and (kwargs["same_branch"] is True): - try: - res = _exec("git rev-parse HEAD") - except gitversionhelper.unknownGITFatalError as _e: - raise cls.commitNotFound("no commit found in commit history") from _e + str_cmd = "git rev-list --max-count=1 --date-order HEAD --first-parent" # ok else: - res = _exec('git for-each-ref --sort=-committerdate refs/heads/ --count 1 --format="%(objectname)"') + str_cmd = "git log --format=%H --all -n1" + + if ("ignore_merged" in kwargs) and (kwargs["ignore_merged"] is True): + str_cmd = str_cmd + " --no-merges" # ok + + try: + res = _exec(str_cmd) + except gitversionhelper.unknownGITFatalError as _e: + raise cls.commitNotFound("no commit found in commit history") from _e if len(res) == 0: raise cls.commitNotFound("no commit found in commit history") diff --git a/test/test_gitversionhelper.py b/test/test_gitversionhelper.py index 17f8dfd..0842d6a 100644 --- a/test/test_gitversionhelper.py +++ b/test/test_gitversionhelper.py @@ -1009,6 +1009,16 @@ class Test_gitversionhelper(unittest.TestCase): self.assertEqual(_v.minor, 3) self.assertEqual(_v.patch, 0) + with open("demofile.txt", "w+t") as tmpFile: + tmpFile.write("testvalue4") + os.system("git add .") + os.system('git commit -m "4th commit"') + + with open("demofile.txt", "w+t") as tmpFile: + tmpFile.write("testvalue5") + os.system("git add .") + os.system('git commit -m "5th commit"') + os.system("git switch master") _v = pygitversionhelper.gitversionhelper.version.getLastVersion(version_std="PEP440") @@ -1404,6 +1414,17 @@ class Test_gitversionhelper(unittest.TestCase): cmd = "git commit -m".split() cmd.append(commit_message5) subprocess.run(cmd, text=True, check=True) + os.system(f"git tag 0.1.1.post4") + + commit_message6 = "6.1 update this" + os.linesep + "6.1 fix that" + os.linesep + "6.1 test" + commit_message6 = commit_message6.replace("\r\n", "\n").replace("\n", "\r\n") + with open("demofile.txt", "w+t") as tmpFile: + tmpFile.write("testvalue6") + os.system("git add .") + + cmd = "git commit -m".split() + cmd.append(commit_message6) + subprocess.run(cmd, text=True, check=True) cmd = "git switch master".split() subprocess.run(cmd, text=True, check=True) @@ -1412,7 +1433,42 @@ class Test_gitversionhelper(unittest.TestCase): self.assertEqual(os.linesep.join([commit_message4, commit_message3, commit_message2]), res) res = pygitversionhelper.gitversionhelper.commit.getMessagesSinceTag("0.1.1", merged_output=True) - self.assertEqual(os.linesep.join([commit_message5, commit_message4, commit_message3, commit_message2]), res) + self.assertEqual(os.linesep.join([commit_message6, commit_message5, commit_message4, commit_message3, commit_message2]), res) + + time.sleep(1) + + merge_message = "automerge" + cmd = "git merge --no-ff dev -m".split() + cmd.append(merge_message) + subprocess.run(cmd, text=True, check=True) + + res = pygitversionhelper.gitversionhelper.commit.getMessagesSinceTag("0.1.1", merged_output=True, same_branch=True) + self.assertEqual(os.linesep.join([merge_message, commit_message4, commit_message3, commit_message2]), res) + + res = pygitversionhelper.gitversionhelper.commit.getMessagesSinceTag("0.1.1", merged_output=True) + self.assertEqual( + set( + merge_message.splitlines() + + commit_message6.splitlines() + + commit_message5.splitlines() + + commit_message4.splitlines() + + commit_message3.splitlines() + + commit_message2.splitlines() + ), + set(res.splitlines()), + ) + + res = pygitversionhelper.gitversionhelper.commit.getMessagesSinceTag("0.1.1", merged_output=True, ignore_merged=True) + self.assertEqual( + set( + commit_message6.splitlines() + + commit_message5.splitlines() + + commit_message4.splitlines() + + commit_message3.splitlines() + + commit_message2.splitlines() + ), + set(res.splitlines()), + ) def tearDown(self): os.chdir("/")