Create RefValue container
This commit is contained in:
parent
556c16c081
commit
6841a97d18
14
ugit/base.py
14
ugit/base.py
@ -84,7 +84,7 @@ def read_tree(tree_oid):
|
||||
def commit(message):
|
||||
commit = f"tree {write_tree()}\n"
|
||||
|
||||
HEAD = data.get_ref("HEAD")
|
||||
HEAD = data.get_ref("HEAD").value
|
||||
if HEAD:
|
||||
commit += f"parent {HEAD}\n"
|
||||
|
||||
@ -93,23 +93,23 @@ def commit(message):
|
||||
|
||||
oid = data.hash_object(commit.encode(), "commit")
|
||||
|
||||
data.update_ref("HEAD", oid)
|
||||
data.update_ref("HEAD", data.RefValue(symbolic=False, value=oid))
|
||||
|
||||
return oid
|
||||
|
||||
|
||||
def create_tag(name, oid):
|
||||
data.update_ref(f"refs/tags/{name}", oid)
|
||||
data.update_ref(f"refs/tags/{name}", data.RefValue(symbolic=False, value=oid))
|
||||
|
||||
|
||||
def checkout(oid):
|
||||
commit = get_commit(oid)
|
||||
read_tree(commit.tree)
|
||||
data.update_ref("HEAD", oid)
|
||||
data.update_ref("HEAD", data.RefValue(symbolic=False, value=oid))
|
||||
|
||||
|
||||
def create_branch(name, oid):
|
||||
data.update_ref(f"refs/heads/{name}", oid)
|
||||
data.update_ref(f"refs/heads/{name}", data.RefValue(symbolic=False, value=oid))
|
||||
|
||||
|
||||
Commit = namedtuple("Commit", ["tree", "parent", "message"])
|
||||
@ -161,8 +161,8 @@ def get_oid(name):
|
||||
f"refs/heads/{name}",
|
||||
]
|
||||
for ref in refs_to_try:
|
||||
if data.get_ref(ref):
|
||||
return data.get_ref(ref)
|
||||
if data.get_ref(ref).value:
|
||||
return data.get_ref(ref).value
|
||||
|
||||
# Name is SHA1
|
||||
is_hex = all(c in string.hexdigits for c in name)
|
||||
|
@ -123,8 +123,8 @@ def k(args):
|
||||
oids = set()
|
||||
for refname, ref in data.iter_refs():
|
||||
dot += f"'{refname}' [shape=note]\n"
|
||||
dot += f"'{refname}' -> '{ref}'\n"
|
||||
oids.add(ref)
|
||||
dot += f"'{refname}' -> '{ref.value}'\n"
|
||||
oids.add(ref.value)
|
||||
|
||||
for oid in base.iter_commits_and_parents(oids):
|
||||
commit = base.get_commit(oid)
|
||||
|
12
ugit/data.py
12
ugit/data.py
@ -3,6 +3,8 @@ from pathlib import Path, PurePath
|
||||
import hashlib
|
||||
import os
|
||||
|
||||
from collections import namedtuple
|
||||
|
||||
GIT_DIR = ".ugit"
|
||||
|
||||
|
||||
@ -11,11 +13,15 @@ def init():
|
||||
Path.mkdir(f"{GIT_DIR}/objects")
|
||||
|
||||
|
||||
def update_ref(ref, oid):
|
||||
RefValue = namedtuple("RefValue", ["symbolic", "value"])
|
||||
|
||||
|
||||
def update_ref(ref, value):
|
||||
assert not value.symbolic
|
||||
ref_path = f"{GIT_DIR}/{ref}"
|
||||
Path.mkdir(ref_path, exist_ok=True)
|
||||
with open(ref_path, "w") as f:
|
||||
f.write(oid)
|
||||
f.write(value.value)
|
||||
|
||||
|
||||
def get_ref(ref):
|
||||
@ -28,7 +34,7 @@ def get_ref(ref):
|
||||
if value and value.startswith("ref:"):
|
||||
return get_ref(value.split(":", 1)[1].strip())
|
||||
|
||||
return value
|
||||
return RefValue(symbolic=False, value=value)
|
||||
|
||||
|
||||
def iter_refs():
|
||||
|
Loading…
Reference in New Issue
Block a user