| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent bdbdf4b commit 96942dd
2 files changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -190,10 +190,6 @@ def name_to_object(repo: "Repo", name: str, return_ref: bool = False) -> Union[A | |||
| 190 | 190 | # END handle short shas | |
| 191 | 191 | # END find sha if it matches | |
| 192 | 192 | ||
| 193 | - if hexsha is None: | ||
| 194 | - hexsha = _describe_to_long(repo, name) | ||
| 195 | - # END handle describe output | ||
| 196 | - | ||
| 197 | 193 | # If we couldn't find an object for what seemed to be a short hexsha, try to find it | |
| 198 | 194 | # as reference anyway, it could be named 'aaa' for instance. | |
| 199 | 195 | if hexsha is None: | |
@@ -216,6 +212,10 @@ def name_to_object(repo: "Repo", name: str, return_ref: bool = False) -> Union[A | |||
| 216 | 212 | # END for each base | |
| 217 | 213 | # END handle hexsha | |
| 218 | 214 | ||
| 215 | + if hexsha is None: | ||
| 216 | + hexsha = _describe_to_long(repo, name) | ||
| 217 | + # END handle describe output | ||
| 218 | + | ||
| 219 | 219 | # Didn't find any ref, this is an error. | |
| 220 | 220 | if return_ref: | |
| 221 | 221 | raise BadObject("Couldn't find reference named %r" % name) | |
@@ -363,6 +363,8 @@ def _tracking_branch_object(repo: "Repo", ref: Optional[SymbolicReference]) -> A | |||
| 363 | 363 | raise BadName("@{upstream}") from e | |
| 364 | 364 | elif isinstance(ref, Head): | |
| 365 | 365 | head = ref | |
| 366 | + elif os.fspath(ref.path).startswith("refs/heads/"): | ||
| 367 | + head = Head(repo, ref.path) | ||
| 366 | 368 | else: | |
| 367 | 369 | raise BadName("%s@{upstream}" % ref.name) | |
| 368 | 370 | # END handle head | |
@@ -479,7 +481,11 @@ def _find_commit_by_message( | |||
| 479 | 481 | repo: "Repo", rev: Optional[AnyGitObject], pattern: str, braced: bool = False | |
| 480 | 482 | ) -> AnyGitObject: | |
| 481 | 483 | pattern, negated = _parse_search(_unescape_braced_regex(pattern) if braced else pattern) | |
| 482 | - regex = re.compile(pattern) | ||
| 484 | + try: | ||
| 485 | + regex = re.compile(pattern) | ||
| 486 | + except re.error as e: | ||
| 487 | + raise ValueError("Invalid commit message regex %r" % pattern) from e | ||
| 488 | + # END handle invalid regex | ||
| 483 | 489 | if rev is None: | |
| 484 | 490 | commits = repo.iter_commits("--all") | |
| 485 | 491 | else: | |
@@ -527,8 +533,6 @@ def _tree_lookup(obj: AnyGitObject, path: str) -> AnyGitObject: | |||
| 527 | 533 | ||
| 528 | 534 | ||
| 529 | 535 | def _peel(obj: AnyGitObject, output_type: str, repo: "Repo", rev: str) -> AnyGitObject: | |
| 530 | - if output_type == "/": | ||
| 531 | - return obj | ||
| 532 | 536 | if output_type.startswith("/"): | |
| 533 | 537 | return _find_commit_by_message(repo, obj, output_type[1:], braced=True) | |
| 534 | 538 | if output_type == "": | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -1,8 +1,14 @@ | |||
| 1 | + # Copyright (C) 2026 Michael Trier (mtrier@gmail.com) and contributors | ||
| 2 | + # | ||
| 3 | + # This module is part of GitPython and is released under the | ||
| 4 | + # 3-Clause BSD License: https://opensource.org/license/bsd-3-clause/ | ||
| 5 | + | ||
| 1 | 6 | from pathlib import Path | |
| 2 | 7 | ||
| 3 | 8 | import pytest | |
| 4 | 9 | ||
| 5 | 10 | from git import Repo | |
| 11 | + from git.refs import SymbolicReference | ||
| 6 | 12 | from gitdb.exc import BadName | |
| 7 | 13 | ||
| 8 | 14 | ||
@@ -55,16 +61,21 @@ def rev_parse_repo(tmp_path): | |||
| 55 | 61 | ||
| 56 | 62 | def test_rev_parse_names_hex_and_describe_forms(rev_parse_repo): | |
| 57 | 63 | repo = rev_parse_repo["repo"] | |
| 64 | + release = rev_parse_repo["release"] | ||
| 58 | 65 | merge = rev_parse_repo["merge"] | |
| 59 | 66 | ||
| 60 | 67 | assert repo.rev_parse("@") == merge | |
| 61 | 68 | assert repo.rev_parse("@foo") == merge | |
| 62 | 69 | assert repo.rev_parse("aaaaaaaa") == merge | |
| 63 | 70 | assert repo.rev_parse(merge.hexsha[:7]) == merge | |
| 71 | + describe_name = "anything-9-g%s" % merge.hexsha[:7] | ||
| 64 | 72 | assert repo.rev_parse("v1.0-1-g%s" % merge.hexsha[:7]) == merge | |
| 65 | - assert repo.rev_parse("anything-9-g%s" % merge.hexsha[:7]) == merge | ||
| 73 | + assert repo.rev_parse(describe_name) == merge | ||
| 66 | 74 | assert repo.rev_parse("%s-dirty" % merge.hexsha[:7]) == merge | |
| 67 | 75 | ||
| 76 | + repo.create_tag(describe_name, ref=release) | ||
| 77 | + assert repo.rev_parse(describe_name) == release | ||
| 78 | + | ||
| 68 | 79 | ||
| 69 | 80 | def test_rev_parse_navigation_and_peeling(rev_parse_repo): | |
| 70 | 81 | repo = rev_parse_repo["repo"] | |
@@ -87,7 +98,8 @@ def test_rev_parse_navigation_and_peeling(rev_parse_repo): | |||
| 87 | 98 | assert repo.rev_parse("ann^{}") == root | |
| 88 | 99 | assert repo.rev_parse("ann^{commit}") == root | |
| 89 | 100 | assert repo.rev_parse("HEAD^{tree}") == merge.tree | |
| 90 | - assert repo.rev_parse("HEAD^{/}") == merge | ||
| 101 | + with pytest.raises(ValueError): | ||
| 102 | + repo.rev_parse("HEAD^{/}") | ||
| 91 | 103 | ||
| 92 | 104 | ||
| 93 | 105 | def test_rev_parse_tree_and_index_paths(rev_parse_repo): | |
@@ -114,6 +126,11 @@ def test_rev_parse_reflog_selectors(rev_parse_repo): | |||
| 114 | 126 | assert repo.rev_parse("%s@{0}" % main.name) == merge | |
| 115 | 127 | assert repo.rev_parse("@{-1}") == side | |
| 116 | 128 | ||
| 129 | + repo.create_remote("origin", repo.working_tree_dir) | ||
| 130 | + SymbolicReference.create(repo, "refs/remotes/origin/%s" % main.name, merge) | ||
| 131 | + main.set_tracking_branch(repo.remotes.origin.refs[main.name]) | ||
| 132 | + assert repo.rev_parse("%s@{upstream}" % main.name) == merge | ||
| 133 | + | ||
| 117 | 134 | ||
| 118 | 135 | def test_rev_parse_commit_message_search(rev_parse_repo): | |
| 119 | 136 | repo = rev_parse_repo["repo"] | |
@@ -132,6 +149,10 @@ def test_rev_parse_rejects_invalid_object_specs(rev_parse_repo): | |||
| 132 | 149 | repo.rev_parse(":") | |
| 133 | 150 | with pytest.raises(ValueError): | |
| 134 | 151 | repo.rev_parse(":/") | |
| 152 | + with pytest.raises(ValueError): | ||
| 153 | + repo.rev_parse(":/[") | ||
| 154 | + with pytest.raises(ValueError): | ||
| 155 | + repo.rev_parse("HEAD^{/[}") | ||
| 135 | 156 | with pytest.raises(ValueError): | |
| 136 | 157 | repo.rev_parse("@{-0}") | |
| 137 | 158 | with pytest.raises(ValueError): | |
| Back | FazBrowse Home | New Git URL |
0 commit comments