git-module

git clone git://git.lin.moe/fork/git-module.git

 1package git
 2
 3import (
 4	"context"
 5	"os"
 6	"testing"
 7
 8	"github.com/stretchr/testify/assert"
 9	"github.com/stretchr/testify/require"
10)
11
12func TestRepository_WorktreeAdd(t *testing.T) {
13	ctx := context.Background()
14	r, cleanup, err := setupTempRepo()
15	require.NoError(t, err)
16	defer cleanup()
17
18	t.Run("detached HEAD", func(t *testing.T) {
19		path := tempPath()
20		defer func() { _ = os.RemoveAll(path) }()
21
22		sha, err := r.RevParse(ctx, "master")
23		require.NoError(t, err)
24
25		err = r.WorktreeAdd(ctx, path, sha)
26		assert.NoError(t, err)
27	})
28
29	t.Run("new branch", func(t *testing.T) {
30		path := tempPath()
31		defer func() { _ = os.RemoveAll(path) }()
32
33		err := r.WorktreeAdd(ctx, path, "master", WorktreeAddOptions{
34			Branch: "test-worktree-branch",
35		})
36		assert.NoError(t, err)
37	})
38}
39
40func TestRepository_WorktreeRemove(t *testing.T) {
41	ctx := context.Background()
42	r, cleanup, err := setupTempRepo()
43	require.NoError(t, err)
44	defer cleanup()
45
46	t.Run("remove worktree", func(t *testing.T) {
47		path := tempPath()
48
49		err := r.WorktreeAdd(ctx, path, "master", WorktreeAddOptions{
50			Branch: "test-remove-branch",
51		})
52		require.NoError(t, err)
53
54		err = r.WorktreeRemove(ctx, path)
55		assert.NoError(t, err)
56	})
57
58	t.Run("force remove", func(t *testing.T) {
59		path := tempPath()
60
61		err := r.WorktreeAdd(ctx, path, "master", WorktreeAddOptions{
62			Branch: "test-force-remove",
63		})
64		require.NoError(t, err)
65
66		// Write an untracked file to make the worktree dirty.
67		err = os.WriteFile(path+"/dirty-file", []byte("dirty"), 0600)
68		require.NoError(t, err)
69
70		err = r.WorktreeRemove(ctx, path, WorktreeRemoveOptions{Force: true})
71		assert.NoError(t, err)
72	})
73}