Wire up original_commit_hash in archive and restore flows
Richard Feldman
created
persist_worktree_state:
- Read HEAD SHA before creating WIP commits as original_commit_hash
- Pass it to create_archived_worktree
restore_worktree_via_git:
- Pre-restore: verify original_commit_hash exists via resolve_commit;
abort with user-facing error if the git history is gone
- Worktree-already-exists: check for .git file to detect if path is a
real git worktree; if not, call repair_worktrees to adopt it
- Resilient WIP resets: track success of mixed and soft resets
independently; if either fails, fall back to mixed reset directly to
original_commit_hash
- Post-reset HEAD verification: confirm HEAD landed at
original_commit_hash after all resets
- Branch restoration: after switching, verify branch points at
original_commit_hash; if it doesn't, reset and create a fresh branch
@@ -1115,7 +1115,9 @@ pub async fn restore_worktree_via_git(
// Check if the branch exists and points at original_commit_hash.
// If it does, switch to it. If not, create a new branch there.
let rx = wt_repo.update(cx, |repo, _cx| repo.change_branch(branch_name.clone()));
- if matches!(rx.await, Ok(Ok(()))) {
+ let switched = matches!(rx.await, Ok(Ok(())));
+
+ if switched {
// Verify the branch actually points at original_commit_hash after switching
let head_after_switch = wt_repo
.update(cx, |repo, _cx| repo.head_sha())