GeezerVisonThe World Wide Web, restored to 800 pixels of glory. |
| Home|About|Gaming cabinet|Archives|How it works|Starter sites |
GeezerVison is showing github.com — GitPython/test/test_rev_parse.py at 3.1.51 · gitpython-developers/GitPython Expand file tree/ Copy pathtest_rev_parse.pyMore file actions 159 lines (125 loc) · 5.44 KB / Copy pathtest_rev_parse.pyFile metadata and controls159 lines (125 loc) · 5.44 KB 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 # Copyright (C) 2026 Michael Trier ([email protected]) and contributors # # This module is part of GitPython and is released under the # 3-Clause BSD License: https://opensource.org/license/bsd-3-clause/ from pathlib import Path import pytest from git import Repo from git.refs import RemoteReference from git.refs import SymbolicReference from gitdb.exc import BadName def _write(repo, path, content): full_path = Path(repo.working_tree_dir) / path full_path.parent.mkdir(parents=True, exist_ok=True) full_path.write_text(content) repo.index.add([str(full_path)]) @pytest.fixture def rev_parse_repo(tmp_path): repo = Repo.init(tmp_path) with repo.config_writer() as writer: writer.set_value("user", "name", "GitPython Tests") _write(repo, "README.md", "root\n") _write(repo, "CHANGES", "root changes\n") _write(repo, "dir/file.txt", "root file\n") root = repo.index.commit("root commit") repo.create_tag("ann", ref=root, message="annotated tag") _write(repo, "README.md", "release\n") release = repo.index.commit("release candidate") repo.create_tag("v1.0", ref=release) main = repo.active_branch _write(repo, "side.txt", "side\n") side_commit = repo.index.commit("side branch", parent_commits=[root], head=False, skip_hooks=True) repo.create_head("side", side_commit) merge = repo.index.commit("merge side", parent_commits=[release, side_commit], skip_hooks=True) repo.head.log_append(side_commit.binsha, "checkout: moving from side to main", merge.binsha) repo.create_head("aaaaaaaa", merge) repo.create_tag("@foo", ref=merge) return { "repo": repo, "root": root, "release": release, "side": side_commit, "merge": merge, "main": main, } def test_rev_parse_names_hex_and_describe_forms(rev_parse_repo): repo = rev_parse_repo["repo"] release = rev_parse_repo["release"] merge = rev_parse_repo["merge"] assert repo.rev_parse("@") == merge assert repo.rev_parse("@foo") == merge assert repo.rev_parse("aaaaaaaa") == merge assert repo.rev_parse(merge.hexsha[:7]) == merge describe_name = "anything-9-g%s" % merge.hexsha[:7] assert repo.rev_parse("v1.0-1-g%s" % merge.hexsha[:7]) == merge assert repo.rev_parse(describe_name) == merge assert repo.rev_parse("%s-dirty" % merge.hexsha[:7]) == merge repo.create_tag(describe_name, ref=release) assert repo.rev_parse(describe_name) == release def test_rev_parse_navigation_and_peeling(rev_parse_repo): repo = rev_parse_repo["repo"] root = rev_parse_repo["root"] release = rev_parse_repo["release"] side = rev_parse_repo["side"] merge = rev_parse_repo["merge"] tag = repo.rev_parse("ann") assert repo.rev_parse("HEAD^0") == merge assert repo.rev_parse("HEAD~0") == merge assert repo.rev_parse("HEAD^1") == release assert repo.rev_parse("HEAD^2") == side assert repo.rev_parse("HEAD~") == release assert repo.rev_parse("HEAD^^") == root assert tag.type == "tag" assert repo.rev_parse("ann^{object}") == tag assert repo.rev_parse("ann^{tag}") == tag assert repo.rev_parse("ann^{}") == root assert repo.rev_parse("ann^{commit}") == root assert repo.rev_parse("HEAD^{tree}") == merge.tree with pytest.raises(ValueError): repo.rev_parse("HEAD^{/}") def test_rev_parse_tree_and_index_paths(rev_parse_repo): repo = rev_parse_repo["repo"] merge = rev_parse_repo["merge"] assert repo.rev_parse("HEAD:") == merge.tree assert repo.rev_parse("HEAD:README.md") == merge.tree["README.md"] assert repo.rev_parse("HEAD^{tree}:README.md") == merge.tree["README.md"] assert repo.rev_parse(":README.md").binsha == merge.tree["README.md"].binsha assert repo.rev_parse(":0:README.md").binsha == merge.tree["README.md"].binsha def test_rev_parse_reflog_selectors(rev_parse_repo): repo = rev_parse_repo["repo"] merge = rev_parse_repo["merge"] side = rev_parse_repo["side"] main = rev_parse_repo["main"] release = rev_parse_repo["release"] assert repo.rev_parse("@{0}") == merge assert repo.rev_parse("@{+0}") == merge assert repo.rev_parse("@{1}") == release assert repo.rev_parse("%s@{0}" % main.name) == merge assert repo.rev_parse("@{-1}") == side SymbolicReference.create(repo, "refs/remotes/origin/%s" % main.name, merge) main.set_tracking_branch(RemoteReference(repo, "refs/remotes/origin/%s" % main.name)) assert repo.rev_parse("%s@{upstream}" % main.name) == merge def test_rev_parse_commit_message_search(rev_parse_repo): repo = rev_parse_repo["repo"] release = rev_parse_repo["release"] merge = rev_parse_repo["merge"] assert repo.rev_parse(":/release") == release assert repo.rev_parse("HEAD^{/release}") == release assert repo.rev_parse("HEAD^{/!-release}") == merge def test_rev_parse_rejects_invalid_object_specs(rev_parse_repo): repo = rev_parse_repo["repo"] with pytest.raises(ValueError): repo.rev_parse(":") with pytest.raises(ValueError): repo.rev_parse(":/") with pytest.raises(ValueError): repo.rev_parse(":/[") with pytest.raises(ValueError): repo.rev_parse("HEAD^{/[}") with pytest.raises(ValueError): repo.rev_parse("@{-0}") with pytest.raises(ValueError): repo.rev_parse("HEAD^{invalid}") with pytest.raises(BadName): repo.rev_parse(":missing") |
| You are visitor 01402503 — GeezerVison does not store the pages you look up. Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required. |