Add config.lock retry with jitter to both worktree-add sites
Some checks are pending
CI / lint-and-test (push) Waiting to run
Some checks are pending
CI / lint-and-test (push) Waiting to run
Parallel domain merges race on the bare repo's config file. The single retry only covered one of two worktree-add call sites and used fixed delay. Now both sites retry up to 3 times with increasing jitter. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
1755580b95
commit
0d3fe95522
1 changed files with 10 additions and 2 deletions
12
lib/merge.py
12
lib/merge.py
|
|
@ -318,8 +318,10 @@ async def _cherry_pick_onto_main(branch: str) -> tuple[bool, str]:
|
||||||
# Delete stale local branch if it exists from a previous failed attempt
|
# Delete stale local branch if it exists from a previous failed attempt
|
||||||
await _git("branch", "-D", clean_branch)
|
await _git("branch", "-D", clean_branch)
|
||||||
rc, out = await _git("worktree", "add", "-b", clean_branch, worktree_path, "origin/main")
|
rc, out = await _git("worktree", "add", "-b", clean_branch, worktree_path, "origin/main")
|
||||||
if rc != 0 and "could not lock config" in out:
|
for _retry in range(3):
|
||||||
await asyncio.sleep(random.uniform(0.5, 2.0))
|
if rc == 0 or "could not lock config" not in out:
|
||||||
|
break
|
||||||
|
await asyncio.sleep(random.uniform(0.5, 2.0 * (_retry + 1)))
|
||||||
await _git("branch", "-D", clean_branch)
|
await _git("branch", "-D", clean_branch)
|
||||||
rc, out = await _git("worktree", "add", "-b", clean_branch, worktree_path, "origin/main")
|
rc, out = await _git("worktree", "add", "-b", clean_branch, worktree_path, "origin/main")
|
||||||
if rc != 0:
|
if rc != 0:
|
||||||
|
|
@ -577,6 +579,12 @@ async def _merge_reweave_pr(branch: str) -> tuple[bool, str]:
|
||||||
await _git("worktree", "remove", "--force", worktree_path)
|
await _git("worktree", "remove", "--force", worktree_path)
|
||||||
await _git("branch", "-D", clean_branch)
|
await _git("branch", "-D", clean_branch)
|
||||||
rc, out = await _git("worktree", "add", "-b", clean_branch, worktree_path, "origin/main")
|
rc, out = await _git("worktree", "add", "-b", clean_branch, worktree_path, "origin/main")
|
||||||
|
for _retry in range(3):
|
||||||
|
if rc == 0 or "could not lock config" not in out:
|
||||||
|
break
|
||||||
|
await asyncio.sleep(random.uniform(0.5, 2.0 * (_retry + 1)))
|
||||||
|
await _git("branch", "-D", clean_branch)
|
||||||
|
rc, out = await _git("worktree", "add", "-b", clean_branch, worktree_path, "origin/main")
|
||||||
if rc != 0:
|
if rc != 0:
|
||||||
return False, f"worktree add failed: {out}"
|
return False, f"worktree add failed: {out}"
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue