| package git |
| |
| import ( |
| "io/ioutil" |
| "testing" |
| ) |
| |
| func checkout(t *testing.T, repo *Repository, commit *Commit) { |
| tree, err := commit.Tree() |
| if err != nil { |
| t.Fatal(err) |
| } |
| |
| err = repo.CheckoutTree(tree, &CheckoutOpts{Strategy: CheckoutSafe}) |
| if err != nil { |
| t.Fatal(err) |
| } |
| |
| err = repo.SetHeadDetached(commit.Id()) |
| if err != nil { |
| t.Fatal(err) |
| } |
| } |
| |
| const content = "Herro, Worrd!" |
| |
| func readReadme(t *testing.T, repo *Repository) string { |
| bytes, err := ioutil.ReadFile(pathInRepo(repo, "README")) |
| if err != nil { |
| t.Fatal(err) |
| } |
| return string(bytes) |
| } |
| |
| func TestCherrypick(t *testing.T) { |
| t.Parallel() |
| repo := createTestRepo(t) |
| defer cleanupTestRepo(t, repo) |
| |
| c1, _ := seedTestRepo(t, repo) |
| c2, _ := updateReadme(t, repo, content) |
| |
| commit1, err := repo.LookupCommit(c1) |
| if err != nil { |
| t.Fatal(err) |
| } |
| commit2, err := repo.LookupCommit(c2) |
| if err != nil { |
| t.Fatal(err) |
| } |
| |
| checkout(t, repo, commit1) |
| |
| if readReadme(t, repo) == content { |
| t.Fatalf("README has wrong content after checking out initial commit") |
| } |
| |
| opts, err := DefaultCherrypickOptions() |
| if err != nil { |
| t.Fatal(err) |
| } |
| |
| err = repo.Cherrypick(commit2, opts) |
| if err != nil { |
| t.Fatal(err) |
| } |
| |
| if readReadme(t, repo) != content { |
| t.Fatalf("README has wrong contents after cherry-picking") |
| } |
| |
| state := repo.State() |
| if state != RepositoryStateCherrypick { |
| t.Fatal("Incorrect repository state: ", state) |
| } |
| |
| err = repo.StateCleanup() |
| if err != nil { |
| t.Fatal(err) |
| } |
| |
| state = repo.State() |
| if state != RepositoryStateNone { |
| t.Fatal("Incorrect repository state: ", state) |
| } |
| } |