2023-07-27 21:52:24 +10:00
|
|
|
package worktree
|
|
|
|
|
|
|
|
import (
|
|
|
|
"github.com/jesseduffield/lazygit/pkg/config"
|
|
|
|
. "github.com/jesseduffield/lazygit/pkg/integration/components"
|
|
|
|
)
|
|
|
|
|
|
|
|
var BareRepo = NewIntegrationTest(NewIntegrationTestArgs{
|
2023-07-28 18:27:14 +10:00
|
|
|
Description: "Open lazygit in the worktree of a bare repo and do a rebase/bisect",
|
2023-07-27 21:52:24 +10:00
|
|
|
ExtraCmdArgs: []string{},
|
|
|
|
Skip: false,
|
|
|
|
SetupConfig: func(config *config.AppConfig) {},
|
|
|
|
SetupRepo: func(shell *Shell) {
|
|
|
|
// we're going to have a directory structure like this:
|
|
|
|
// project
|
|
|
|
// - .bare
|
|
|
|
// - repo (a worktree)
|
|
|
|
// - worktree2 (another worktree)
|
|
|
|
//
|
|
|
|
// The first repo is called 'repo' because that's the
|
|
|
|
// directory that all lazygit tests start in
|
|
|
|
|
|
|
|
shell.NewBranch("mybranch")
|
|
|
|
shell.CreateFileAndAdd("blah", "blah")
|
|
|
|
shell.Commit("initial commit")
|
2023-07-28 18:27:14 +10:00
|
|
|
shell.EmptyCommit("commit two")
|
|
|
|
shell.EmptyCommit("commit three")
|
2023-07-27 21:52:24 +10:00
|
|
|
|
|
|
|
shell.RunCommand([]string{"git", "clone", "--bare", ".", "../.bare"})
|
|
|
|
|
|
|
|
shell.DeleteFile(".git")
|
|
|
|
|
|
|
|
shell.Chdir("..")
|
|
|
|
|
|
|
|
// This is the dir we were just in (and the dir that lazygit starts in when the test runs)
|
|
|
|
// We're going to replace it with a worktree
|
|
|
|
shell.DeleteFile("repo")
|
|
|
|
|
|
|
|
shell.RunCommand([]string{"git", "--git-dir", ".bare", "worktree", "add", "-b", "repo", "repo", "mybranch"})
|
|
|
|
shell.RunCommand([]string{"git", "--git-dir", ".bare", "worktree", "add", "-b", "worktree2", "worktree2", "mybranch"})
|
|
|
|
},
|
|
|
|
Run: func(t *TestDriver, keys config.KeybindingConfig) {
|
|
|
|
t.Views().Branches().
|
|
|
|
Lines(
|
|
|
|
Contains("repo"),
|
|
|
|
Contains("mybranch"),
|
|
|
|
Contains("worktree2 (worktree)"),
|
|
|
|
)
|
|
|
|
|
2023-07-28 18:27:14 +10:00
|
|
|
// test that a rebase works fine
|
|
|
|
// (rebase uses the git dir of the worktree so we're confirming that it points
|
|
|
|
// to the right git dir)
|
|
|
|
t.Views().Commits().
|
|
|
|
Focus().
|
|
|
|
Lines(
|
|
|
|
Contains("commit three").IsSelected(),
|
|
|
|
Contains("commit two"),
|
|
|
|
Contains("initial commit"),
|
|
|
|
).
|
|
|
|
Press(keys.Commits.MoveDownCommit).
|
|
|
|
Lines(
|
|
|
|
Contains("commit two"),
|
|
|
|
Contains("commit three").IsSelected(),
|
|
|
|
Contains("initial commit"),
|
|
|
|
).
|
|
|
|
// test that bisect works fine (same logic as above)
|
|
|
|
NavigateToLine(Contains("commit two")).
|
|
|
|
Press(keys.Commits.ViewBisectOptions).
|
|
|
|
Tap(func() {
|
|
|
|
t.ExpectPopup().Menu().
|
|
|
|
Title(Equals("Bisect")).
|
|
|
|
Select(MatchesRegexp(`Mark .* as bad`)).
|
|
|
|
Confirm()
|
|
|
|
|
|
|
|
t.Views().Information().Content(Contains("Bisecting"))
|
|
|
|
}).
|
|
|
|
NavigateToLine(Contains("initial commit")).
|
|
|
|
Press(keys.Commits.ViewBisectOptions).
|
|
|
|
Tap(func() {
|
|
|
|
t.ExpectPopup().Menu().
|
|
|
|
Title(Equals("Bisect")).
|
|
|
|
Select(MatchesRegexp(`Mark .* as good`)).
|
|
|
|
Confirm()
|
|
|
|
|
|
|
|
t.Views().Information().Content(Contains("Bisecting"))
|
|
|
|
})
|
|
|
|
|
|
|
|
// switch to other worktree
|
2023-07-27 21:52:24 +10:00
|
|
|
t.Views().Worktrees().
|
|
|
|
Focus().
|
|
|
|
Lines(
|
|
|
|
Contains("repo").IsSelected(),
|
|
|
|
Contains("worktree2"),
|
|
|
|
).
|
|
|
|
NavigateToLine(Contains("worktree2")).
|
|
|
|
Press(keys.Universal.Select).
|
|
|
|
Lines(
|
|
|
|
Contains("worktree2").IsSelected(),
|
|
|
|
Contains("repo"),
|
|
|
|
)
|
|
|
|
},
|
|
|
|
})
|