| package git |
| |
| import ( |
| "context" |
| "fmt" |
| "os" |
| "strings" |
| "testing" |
| |
| "github.com/stretchr/testify/require" |
| cipd_git "go.skia.org/infra/bazel/external/cipd/git" |
| "go.skia.org/infra/go/deepequal/assertdeep" |
| git_testutils "go.skia.org/infra/go/git/testutils" |
| "go.skia.org/infra/go/testutils" |
| ) |
| |
| const ( |
| checkedInFile = "somefile" |
| ) |
| |
| func setup(t *testing.T) (context.Context, *git_testutils.GitBuilder, []string) { |
| // Create a local git repo to play with. |
| ctx := cipd_git.UseGitFinder(context.Background()) |
| g := git_testutils.GitInit(t, ctx) |
| commits := make([]string, 10) |
| for i := 0; i < 10; i++ { |
| commits[9-i] = g.CommitGenMsg(ctx, checkedInFile, fmt.Sprintf("Commit Title #%d\n\nCommit Body #%d", i, i)) |
| } |
| return ctx, g, commits |
| } |
| |
| func TestRepo(t *testing.T) { |
| ctx, gb, commits := setup(t) |
| defer gb.Cleanup() |
| |
| tmp, err := os.MkdirTemp("", "") |
| require.NoError(t, err) |
| defer testutils.RemoveAll(t, tmp) |
| |
| r, err := NewRepo(ctx, gb.Dir(), tmp) |
| require.NoError(t, err) |
| |
| // Verify that we can run git commands. |
| _, err = r.Git(ctx, "branch") |
| require.NoError(t, err) |
| |
| // Verify that we don't have a working copy. |
| _, err = r.Git(ctx, "status") |
| require.Error(t, err) |
| _, err = r.Git(ctx, "checkout", MainBranch) |
| require.Error(t, err) |
| |
| // Log. |
| gotCommits, err := r.RevList(ctx, MainBranch) |
| require.NoError(t, err) |
| assertdeep.Equal(t, commits, gotCommits) |
| |
| // Add a commit on the remote. |
| c := gb.CommitGen(ctx, checkedInFile) |
| |
| // Verify that Update() succeeds. |
| require.NoError(t, r.Update(ctx)) |
| |
| // Verify that we got the new commit. |
| got, err := r.RevParse(ctx, c) |
| require.NoError(t, err) |
| require.Equal(t, c, strings.TrimSpace(got)) |
| |
| // Verify that we can create a Checkout from the Repo. No need to test |
| // the Checkout since that struct has its own tests. |
| tmp2, err := os.MkdirTemp("", "") |
| require.NoError(t, err) |
| defer testutils.RemoveAll(t, tmp2) |
| _, err = r.Checkout(ctx, tmp2) |
| require.NoError(t, err) |
| } |