You've already forked agentic-coding-workflow
feat(infra/git): worktree add/remove/list with porcelain parser
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
package git
|
||||
|
||||
import (
|
||||
"context"
|
||||
"path/filepath"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestWorktree_AddListRemove(t *testing.T) {
|
||||
t.Parallel()
|
||||
gitAvailable(t)
|
||||
bare := makeBareRepo(t)
|
||||
r := newTestRunner(t)
|
||||
main := filepath.Join(t.TempDir(), "main")
|
||||
ctx, cancel := context.WithTimeout(context.Background(), 60*time.Second)
|
||||
defer cancel()
|
||||
require.NoError(t, r.Clone(ctx, main, bare, "main", nil))
|
||||
|
||||
feat := filepath.Join(filepath.Dir(main), "feat-x")
|
||||
require.NoError(t, r.WorktreeAdd(ctx, main, "feat-x", feat))
|
||||
|
||||
list, err := r.WorktreeList(ctx, main)
|
||||
require.NoError(t, err)
|
||||
require.GreaterOrEqual(t, len(list), 2)
|
||||
var found bool
|
||||
for _, w := range list {
|
||||
if w.Branch == "feat-x" {
|
||||
found = true
|
||||
}
|
||||
}
|
||||
require.True(t, found, "feat-x worktree not in list")
|
||||
|
||||
require.NoError(t, r.WorktreeRemove(ctx, main, feat))
|
||||
list, err = r.WorktreeList(ctx, main)
|
||||
require.NoError(t, err)
|
||||
for _, w := range list {
|
||||
require.NotEqual(t, "feat-x", w.Branch)
|
||||
}
|
||||
}
|
||||
|
||||
func TestParseWorktreeList(t *testing.T) {
|
||||
t.Parallel()
|
||||
buf := []byte("worktree /m\nHEAD aaa\nbranch refs/heads/main\n\nworktree /f\nHEAD bbb\nbranch refs/heads/feat-x\n\n")
|
||||
got := parseWorktreeList(buf)
|
||||
require.Len(t, got, 2)
|
||||
require.Equal(t, "main", got[0].Branch)
|
||||
require.Equal(t, "feat-x", got[1].Branch)
|
||||
}
|
||||
Reference in New Issue
Block a user