Track local ref SHAs on pull for incremental bundle generation on remote
This commit is contained in:
parent
a1d35b34b9
commit
a7b0f9924e
2 changed files with 21 additions and 2 deletions
|
|
@ -433,7 +433,21 @@ class ReticulumGitClient():
|
||||||
batch = fetch_queue[:ref_batch_size]
|
batch = fetch_queue[:ref_batch_size]
|
||||||
fetch_queue = fetch_queue[ref_batch_size:]
|
fetch_queue = fetch_queue[ref_batch_size:]
|
||||||
|
|
||||||
refs_list = [{"sha": sha, "ref": ref} for sha, ref in batch]
|
refs_list = []
|
||||||
|
for sha, ref in batch:
|
||||||
|
ref_entry = {"sha": sha, "ref": ref}
|
||||||
|
try:
|
||||||
|
# Attempt to get local ref SHA for incremental bundle generation on remote
|
||||||
|
result = subprocess.run(["git", "rev-parse", ref], capture_output=True, text=True, check=False)
|
||||||
|
if result.returncode == 0:
|
||||||
|
local_sha = result.stdout.strip()
|
||||||
|
if local_sha != sha: ref_entry["have"] = local_sha
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
RNS.log(f"Could not resolve local SHA for {ref} during fetch enumeration, getting full history for this ref: {e}", RNS.LOG_WARNING)
|
||||||
|
|
||||||
|
refs_list.append(ref_entry)
|
||||||
|
|
||||||
ref_names = [ref for _, ref in batch]
|
ref_names = [ref for _, ref in batch]
|
||||||
RNS.log(f"Fetching batch of {len(refs_list)} refs: {ref_names}", RNS.LOG_DEBUG)
|
RNS.log(f"Fetching batch of {len(refs_list)} refs: {ref_names}", RNS.LOG_DEBUG)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -520,7 +520,12 @@ class ReticulumGitNode():
|
||||||
RNS.log(f"Created {tmp_path} for {link}", RNS.LOG_DEBUG)
|
RNS.log(f"Created {tmp_path} for {link}", RNS.LOG_DEBUG)
|
||||||
|
|
||||||
bundle_path = os.path.join(tmp_path, "fetch.bundle")
|
bundle_path = os.path.join(tmp_path, "fetch.bundle")
|
||||||
execv = ["git", "bundle", "create", "--no-progress", bundle_path] + ref_names
|
execv = ["git", "bundle", "create", "--no-progress", bundle_path]
|
||||||
|
|
||||||
|
for r in refs:
|
||||||
|
execv.append(r["ref"])
|
||||||
|
if "have" in r and r["have"]: execv.append(f"^{r['have']}")
|
||||||
|
|
||||||
result = subprocess.run(execv, cwd=repository_path, capture_output=True, check=False)
|
result = subprocess.run(execv, cwd=repository_path, capture_output=True, check=False)
|
||||||
if result.returncode != 0: return self.RES_REMOTE_FAIL.to_bytes(1, "big") + result.stderr
|
if result.returncode != 0: return self.RES_REMOTE_FAIL.to_bytes(1, "big") + result.stderr
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue