Skip to content

Commit 842a82b

Browse files
authored
fix(codeagent): restore worktree when recovering workspace (#131)
1 parent 9ef159c commit 842a82b

File tree

2 files changed

+28
-0
lines changed

2 files changed

+28
-0
lines changed

internal/workspace/manager.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,10 @@ func (m *Manager) recoverExistingWorkspaces() {
215215
m.mutex.Lock()
216216
if m.repoManagers[orgRepoPath] == nil {
217217
repoManager := NewRepoManager(repoPath, remoteURL)
218+
// 恢复 worktrees
219+
if err := repoManager.RestoreWorktrees(); err != nil {
220+
log.Warnf("Failed to restore worktrees for %s: %v", orgRepoPath, err)
221+
}
218222
m.repoManagers[orgRepoPath] = repoManager
219223
log.Infof("Created repo manager for %s", orgRepoPath)
220224
}

internal/workspace/repo_manager.go

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ import (
1010
"sync"
1111
"time"
1212

13+
"strconv"
14+
1315
"github.com/qiniu/x/log"
1416
)
1517

@@ -441,6 +443,7 @@ func (r *RepoManager) CreateWorktreeWithName(worktreeName string, branch string,
441443
return worktree, nil
442444
}
443445

446+
// 注册单个 worktree 到内存
444447
func (r *RepoManager) RegisterWorktree(prNumber int, worktree *WorktreeInfo) {
445448
r.mutex.Lock()
446449
defer r.mutex.Unlock()
@@ -550,3 +553,24 @@ func (r *RepoManager) EnsureMainRepositoryUpToDate() error {
550553
}
551554
return r.updateMainRepository()
552555
}
556+
557+
// RestoreWorktrees 扫描磁盘上的 worktree 并注册到内存
558+
func (r *RepoManager) RestoreWorktrees() error {
559+
worktrees, err := r.ListWorktrees()
560+
if err != nil {
561+
return err
562+
}
563+
for _, wt := range worktrees {
564+
// 只处理含 -pr- 的 worktree 目录
565+
base := filepath.Base(wt.Worktree)
566+
if strings.Contains(base, "-pr-") {
567+
parts := strings.Split(base, "-pr-")
568+
numberParts := strings.Split(parts[1], "-")
569+
prNumber, err := strconv.Atoi(numberParts[0])
570+
if err == nil {
571+
r.RegisterWorktree(prNumber, wt)
572+
}
573+
}
574+
}
575+
return nil
576+
}

0 commit comments

Comments
 (0)