Dereference refs when reading and writing
This commit is contained in:
parent
30ce8c84e4
commit
9c53919802
13
ugit/data.py
13
ugit/data.py
@ -18,6 +18,7 @@ RefValue = namedtuple("RefValue", ["symbolic", "value"])
|
||||
|
||||
def update_ref(ref, value):
|
||||
assert not value.symbolic
|
||||
ref = _get_ref_internal(ref)[0]
|
||||
ref_path = f"{GIT_DIR}/{ref}"
|
||||
Path.mkdir(ref_path, exist_ok=True)
|
||||
with open(ref_path, "w") as f:
|
||||
@ -25,16 +26,22 @@ def update_ref(ref, value):
|
||||
|
||||
|
||||
def get_ref(ref):
|
||||
return _get_ref_internal(ref)[1]
|
||||
|
||||
|
||||
def _get_ref_internal(ref):
|
||||
ref_path = f"{GIT_DIR}/{ref}"
|
||||
value = None
|
||||
if Path.is_file(ref_path):
|
||||
with open(ref_path) as f:
|
||||
value = f.read().strip()
|
||||
|
||||
if value and value.startswith("ref:"):
|
||||
return get_ref(value.split(":", 1)[1].strip())
|
||||
symbolic = bool(value) and value.startswith("ref")
|
||||
if symbolic:
|
||||
value = value.split(":", 1)[1].strip()
|
||||
return _get_ref_internal(value)
|
||||
|
||||
return RefValue(symbolic=False, value=value)
|
||||
return ref, RefValue(symbolic=False, value=value)
|
||||
|
||||
|
||||
def iter_refs():
|
||||
|
Loading…
x
Reference in New Issue
Block a user