1
0
mirror of https://github.com/jesseduffield/lazygit.git synced 2025-02-03 13:21:56 +02:00

Merge pull request #2450 from jesseduffield/migrate-more-tests

This commit is contained in:
Jesse Duffield 2023-02-19 15:51:17 +11:00 committed by GitHub
commit b54b8ae746
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
422 changed files with 572 additions and 1186 deletions

12
.vscode/tasks.json vendored
View File

@ -69,6 +69,18 @@
"presentation": {
"focus": true
}
},
{
"label": "Sync tests list",
"type": "shell",
"command": "go generate ./...",
"problemMatcher": [],
"group": {
"kind": "test",
},
"presentation": {
"focus": true
}
},
],
}

2
go.mod
View File

@ -18,7 +18,7 @@ require (
github.com/integrii/flaggy v1.4.0
github.com/jesseduffield/generics v0.0.0-20220320043834-727e535cbe68
github.com/jesseduffield/go-git/v5 v5.1.2-0.20221018185014-fdd53fef665d
github.com/jesseduffield/gocui v0.3.1-0.20230217232659-7a98151b05c3
github.com/jesseduffield/gocui v0.3.1-0.20230219034834-06a1f1e95da5
github.com/jesseduffield/kill v0.0.0-20220618033138-bfbe04675d10
github.com/jesseduffield/lazycore v0.0.0-20221012050358-03d2e40243c5
github.com/jesseduffield/minimal/gitignore v0.3.3-0.20211018110810-9cde264e6b1e

4
go.sum
View File

@ -72,8 +72,8 @@ github.com/jesseduffield/generics v0.0.0-20220320043834-727e535cbe68 h1:EQP2Tv8T
github.com/jesseduffield/generics v0.0.0-20220320043834-727e535cbe68/go.mod h1:+LLj9/WUPAP8LqCchs7P+7X0R98HiFujVFANdNaxhGk=
github.com/jesseduffield/go-git/v5 v5.1.2-0.20221018185014-fdd53fef665d h1:bO+OmbreIv91rCe8NmscRwhFSqkDJtzWCPV4Y+SQuXE=
github.com/jesseduffield/go-git/v5 v5.1.2-0.20221018185014-fdd53fef665d/go.mod h1:nGNEErzf+NRznT+N2SWqmHnDnF9aLgANB1CUNEan09o=
github.com/jesseduffield/gocui v0.3.1-0.20230217232659-7a98151b05c3 h1:dNhaHQ5aK/j0zSUM7lqCxusQXVw84GyEpJ2xOm9LdUc=
github.com/jesseduffield/gocui v0.3.1-0.20230217232659-7a98151b05c3/go.mod h1:znJuCDnF2Ph40YZSlBwdX/4GEofnIoWLGdT4mK5zRAU=
github.com/jesseduffield/gocui v0.3.1-0.20230219034834-06a1f1e95da5 h1:6mrOZa9I1bol14HhVK0tl4w9xvvGKLWPmShPRey1Lxg=
github.com/jesseduffield/gocui v0.3.1-0.20230219034834-06a1f1e95da5/go.mod h1:znJuCDnF2Ph40YZSlBwdX/4GEofnIoWLGdT4mK5zRAU=
github.com/jesseduffield/kill v0.0.0-20220618033138-bfbe04675d10 h1:jmpr7KpX2+2GRiE91zTgfq49QvgiqB0nbmlwZ8UnOx0=
github.com/jesseduffield/kill v0.0.0-20220618033138-bfbe04675d10/go.mod h1:aA97kHeNA+sj2Hbki0pvLslmE4CbDyhBeSSTUUnOuVo=
github.com/jesseduffield/lazycore v0.0.0-20221012050358-03d2e40243c5 h1:CDuQmfOjAtb1Gms6a1p5L2P8RhbLUq5t8aL7PiQd2uY=

View File

@ -195,17 +195,17 @@ func (self *UndoController) parseReflogForActions(onUserAction func(counter int,
counter++
} else if ok, _ := utils.FindStringSubmatch(reflogCommit.Name, `^\[lazygit redo\]`); ok {
counter--
} else if ok, _ := utils.FindStringSubmatch(reflogCommit.Name, `^rebase -i \(abort\)|^rebase -i \(finish\)`); ok {
} else if ok, _ := utils.FindStringSubmatch(reflogCommit.Name, `^rebase (-i )?\(abort\)|^rebase (-i )?\(finish\)`); ok {
rebaseFinishCommitSha = reflogCommit.Sha
} else if ok, match := utils.FindStringSubmatch(reflogCommit.Name, `^checkout: moving from ([\S]+) to ([\S]+)`); ok {
action = &reflogAction{kind: CHECKOUT, from: match[1], to: match[2]}
} else if ok, _ := utils.FindStringSubmatch(reflogCommit.Name, `^commit|^reset: moving to|^pull`); ok {
action = &reflogAction{kind: COMMIT, from: prevCommitSha, to: reflogCommit.Sha}
} else if ok, _ := utils.FindStringSubmatch(reflogCommit.Name, `^rebase -i \(start\)`); ok {
} else if ok, _ := utils.FindStringSubmatch(reflogCommit.Name, `^rebase (-i )?\(start\)`); ok {
// if we're here then we must be currently inside an interactive rebase
action = &reflogAction{kind: CURRENT_REBASE, from: prevCommitSha}
}
} else if ok, _ := utils.FindStringSubmatch(reflogCommit.Name, `^rebase -i \(start\)`); ok {
} else if ok, _ := utils.FindStringSubmatch(reflogCommit.Name, `^rebase (-i )?\(start\)`); ok {
action = &reflogAction{kind: REBASE, from: prevCommitSha, to: rebaseFinishCommitSha}
rebaseFinishCommitSha = ""
}

View File

@ -50,10 +50,18 @@ func (self *GuiDriver) CurrentContext() types.Context {
}
func (self *GuiDriver) Fail(message string) {
currentView := self.gui.g.CurrentView()
fullMessage := fmt.Sprintf(
"%s\nFinal Lazygit state:\n%s\nUpon failure, focused view was '%s'.\nLog:\n%s", message,
self.gui.g.Snapshot(),
currentView.Name(),
strings.Join(self.gui.CmdLog, "\n"),
)
self.gui.g.Close()
// need to give the gui time to close
time.Sleep(time.Millisecond * 100)
panic(fmt.Sprintf("%s\nLog:\n%s", message, strings.Join(self.gui.CmdLog, "\n")))
panic(fullMessage)
}
// logs to the normal place that you log to i.e. viewable with `lazygit --logs`

View File

@ -36,6 +36,18 @@ func (self *MenuDriver) Select(option *matcher) *MenuDriver {
return self
}
func (self *MenuDriver) Lines(matchers ...*matcher) *MenuDriver {
self.getViewDriver().Lines(matchers...)
return self
}
func (self *MenuDriver) TopLines(matchers ...*matcher) *MenuDriver {
self.getViewDriver().TopLines(matchers...)
return self
}
func (self *MenuDriver) checkNecessaryChecksCompleted() {
if !self.hasCheckedTitle {
self.t.Fail("You must check the title of a menu popup by calling Title() before calling Confirm()/Cancel().")

View File

@ -116,6 +116,10 @@ func (self *Shell) Merge(name string) *Shell {
return self.RunCommand("git merge --commit --no-ff " + name)
}
func (self *Shell) ContinueMerge() *Shell {
return self.RunCommand("git -c core.editor=true merge --continue")
}
func (self *Shell) GitAdd(path string) *Shell {
return self.RunCommand(fmt.Sprintf("git add \"%s\"", path))
}

View File

@ -72,6 +72,10 @@ func (self *Views) Branches() *ViewDriver {
return self.byName("localBranches")
}
func (self *Views) Remotes() *ViewDriver {
return self.byName("remotes")
}
func (self *Views) RemoteBranches() *ViewDriver {
return self.byName("remoteBranches")
}

View File

@ -0,0 +1,18 @@
package branch
import (
"github.com/jesseduffield/lazygit/pkg/config"
. "github.com/jesseduffield/lazygit/pkg/integration/components"
)
var OpenWithCliArg = NewIntegrationTest(NewIntegrationTestArgs{
Description: "Open straight to branches panel using a CLI arg",
ExtraCmdArgs: "branch",
Skip: false,
SetupConfig: func(config *config.AppConfig) {},
SetupRepo: func(shell *Shell) {
},
Run: func(t *TestDriver, keys config.KeybindingConfig) {
t.Views().Branches().IsFocused()
},
})

View File

@ -0,0 +1,43 @@
package commit
import (
"github.com/jesseduffield/lazygit/pkg/config"
. "github.com/jesseduffield/lazygit/pkg/integration/components"
"github.com/jesseduffield/lazygit/pkg/integration/tests/shared"
)
var RevertMerge = NewIntegrationTest(NewIntegrationTestArgs{
Description: "Reverts a merge commit and chooses to revert to the parent commit",
ExtraCmdArgs: "",
Skip: false,
SetupConfig: func(config *config.AppConfig) {},
SetupRepo: func(shell *Shell) {
shared.CreateMergeCommit(shell)
},
Run: func(t *TestDriver, keys config.KeybindingConfig) {
t.Views().Commits().Focus().
TopLines(
Contains("Merge branch 'second-change-branch' into first-change-branch").IsSelected(),
).
Press(keys.Commits.RevertCommit)
t.ExpectPopup().Menu().
Title(Equals("Select parent commit for merge")).
Lines(
Contains("first change"),
Contains("second-change-branch unrelated change"),
Contains("cancel"),
).
Select(Contains("first change")).
Confirm()
t.Views().Commits().IsFocused().
TopLines(
Contains("Revert \"Merge branch 'second-change-branch' into first-change-branch\""),
Contains("Merge branch 'second-change-branch' into first-change-branch").IsSelected(),
).
SelectPreviousItem()
t.Views().Main().Content(Contains("-Second Change").Contains("+First Change"))
},
})

View File

@ -0,0 +1,34 @@
package conflicts
import (
"github.com/jesseduffield/lazygit/pkg/config"
. "github.com/jesseduffield/lazygit/pkg/integration/components"
"github.com/jesseduffield/lazygit/pkg/integration/tests/shared"
)
var UndoChooseHunk = NewIntegrationTest(NewIntegrationTestArgs{
Description: "Chooses a hunk when resolving a merge conflict and then undoes the choice",
ExtraCmdArgs: "",
Skip: false,
SetupConfig: func(config *config.AppConfig) {},
SetupRepo: func(shell *Shell) {
shared.CreateMergeConflictFileMultiple(shell)
},
Run: func(t *TestDriver, keys config.KeybindingConfig) {
t.Views().Files().
IsFocused().
Lines(
Contains("UU file").IsSelected(),
).
PressEnter()
t.Views().MergeConflicts().
IsFocused().
Content(Contains("<<<<<<< HEAD\nFirst Change")).
PressPrimaryAction().
// choosing the first hunk
Content(DoesNotContain("<<<<<<< HEAD\nFirst Change")).
Press(keys.Universal.Undo).
Content(Contains("<<<<<<< HEAD\nFirst Change"))
},
})

View File

@ -0,0 +1,24 @@
package misc
import (
"github.com/jesseduffield/lazygit/pkg/config"
. "github.com/jesseduffield/lazygit/pkg/integration/components"
)
var InitialOpen = NewIntegrationTest(NewIntegrationTestArgs{
Description: "Confirms a popup appears on first opening Lazygit",
ExtraCmdArgs: "",
Skip: false,
SetupConfig: func(config *config.AppConfig) {
config.UserConfig.DisableStartupPopups = false
},
SetupRepo: func(shell *Shell) {},
Run: func(t *TestDriver, keys config.KeybindingConfig) {
t.ExpectPopup().Confirmation().
Title(Equals("")).
Content(Contains("Thanks for using lazygit!")).
Confirm()
t.Views().Files().IsFocused()
},
})

View File

@ -47,3 +47,97 @@ var MergeConflictsSetup = func(shell *Shell) {
EmptyCommit("second-change-branch unrelated change").
Checkout("first-change-branch")
}
var CreateMergeConflictFile = func(shell *Shell) {
MergeConflictsSetup(shell)
shell.RunShellCommandExpectError("git merge --no-edit second-change-branch")
}
var CreateMergeCommit = func(shell *Shell) {
CreateMergeConflictFile(shell)
shell.UpdateFileAndAdd("file", SecondChangeFileContent)
shell.ContinueMerge()
}
// These 'multiple' variants are just like the short ones but with longer file contents and with multiple conflicts within the file.
var OriginalFileContentMultiple = `
This
Is
The
Original
File
..
It
Is
Longer
Than
The
Other
Options
`
var FirstChangeFileContentMultiple = `
This
Is
The
First Change
File
..
It
Is
Longer
Than
The
Other
Other First Change
`
var SecondChangeFileContentMultiple = `
This
Is
The
Second Change
File
..
It
Is
Longer
Than
The
Other
Other Second Change
`
// prepares us for a rebase/merge that has conflicts
var MergeConflictsSetupMultiple = func(shell *Shell) {
shell.
NewBranch("original-branch").
EmptyCommit("one").
EmptyCommit("two").
EmptyCommit("three").
CreateFileAndAdd("file", OriginalFileContentMultiple).
Commit("original").
NewBranch("first-change-branch").
UpdateFileAndAdd("file", FirstChangeFileContentMultiple).
Commit("first change").
Checkout("original-branch").
NewBranch("second-change-branch").
UpdateFileAndAdd("file", SecondChangeFileContentMultiple).
Commit("second change").
EmptyCommit("second-change-branch unrelated change").
Checkout("first-change-branch")
}
var CreateMergeConflictFileMultiple = func(shell *Shell) {
MergeConflictsSetupMultiple(shell)
shell.RunShellCommandExpectError("git merge --no-edit second-change-branch")
}
var CreateMergeCommitMultiple = func(shell *Shell) {
CreateMergeConflictFileMultiple(shell)
shell.UpdateFileAndAdd("file", SecondChangeFileContentMultiple)
shell.ContinueMerge()
}

View File

@ -0,0 +1,56 @@
package sync
import (
"github.com/jesseduffield/lazygit/pkg/config"
. "github.com/jesseduffield/lazygit/pkg/integration/components"
)
var ForcePush = NewIntegrationTest(NewIntegrationTestArgs{
Description: "Push to a remote with new commits, requiring a force push",
ExtraCmdArgs: "",
Skip: false,
SetupConfig: func(config *config.AppConfig) {},
SetupRepo: func(shell *Shell) {
shell.EmptyCommit("one")
shell.EmptyCommit("two")
shell.CloneIntoRemote("origin")
shell.SetBranchUpstream("master", "origin/master")
// remove the 'two' commit so that we have something to pull from the remote
shell.HardReset("HEAD^")
},
Run: func(t *TestDriver, keys config.KeybindingConfig) {
t.Views().Commits().
Lines(
Contains("one"),
)
t.Views().Status().Content(Contains("↓1 repo → master"))
t.Views().Files().IsFocused().Press(keys.Universal.Push)
t.ExpectPopup().Confirmation().
Title(Equals("Force push")).
Content(Equals("Your branch has diverged from the remote branch. Press 'esc' to cancel, or 'enter' to force push.")).
Confirm()
t.Views().Commits().
Lines(
Contains("one"),
)
t.Views().Status().Content(Contains("✓ repo → master"))
t.Views().Remotes().Focus().
Lines(Contains("origin")).
PressEnter()
t.Views().RemoteBranches().IsFocused().
Lines(Contains("master")).
PressEnter()
t.Views().SubCommits().IsFocused().
Lines(Contains("one"))
},
})

View File

@ -0,0 +1,53 @@
package sync
import (
"github.com/jesseduffield/lazygit/pkg/config"
. "github.com/jesseduffield/lazygit/pkg/integration/components"
)
var ForcePushMultipleMatching = NewIntegrationTest(NewIntegrationTestArgs{
Description: "Force push to multiple branches because the user has push.default matching",
ExtraCmdArgs: "",
Skip: false,
SetupConfig: func(config *config.AppConfig) {
},
SetupRepo: func(shell *Shell) {
shell.SetConfig("push.default", "matching")
createTwoBranchesReadyToForcePush(shell)
},
Run: func(t *TestDriver, keys config.KeybindingConfig) {
t.Views().Commits().
Lines(
Contains("one"),
)
t.Views().Status().Content(Contains("↓1 repo → master"))
t.Views().Branches().
Lines(
Contains("master ↓1"),
Contains("other_branch ↓1"),
)
t.Views().Files().IsFocused().Press(keys.Universal.Push)
t.ExpectPopup().Confirmation().
Title(Equals("Force push")).
Content(Equals("Your branch has diverged from the remote branch. Press 'esc' to cancel, or 'enter' to force push.")).
Confirm()
t.Views().Commits().
Lines(
Contains("one"),
)
t.Views().Status().Content(Contains("✓ repo → master"))
t.Views().Branches().
Lines(
Contains("master ✓"),
Contains("other_branch ✓"),
)
},
})

View File

@ -0,0 +1,71 @@
package sync
import (
"github.com/jesseduffield/lazygit/pkg/config"
. "github.com/jesseduffield/lazygit/pkg/integration/components"
)
func createTwoBranchesReadyToForcePush(shell *Shell) {
shell.EmptyCommit("one")
shell.EmptyCommit("two")
shell.NewBranch("other_branch")
shell.CloneIntoRemote("origin")
shell.SetBranchUpstream("master", "origin/master")
shell.SetBranchUpstream("other_branch", "origin/other_branch")
// remove the 'two' commit so that we have something to pull from the remote
shell.HardReset("HEAD^")
shell.Checkout("master")
// doing the same for master
shell.HardReset("HEAD^")
}
var ForcePushMultipleUpstream = NewIntegrationTest(NewIntegrationTestArgs{
Description: "Force push to only the upstream branch of the current branch because the user has push.default upstream",
ExtraCmdArgs: "",
Skip: false,
SetupConfig: func(config *config.AppConfig) {},
SetupRepo: func(shell *Shell) {
shell.SetConfig("push.default", "upstream")
createTwoBranchesReadyToForcePush(shell)
},
Run: func(t *TestDriver, keys config.KeybindingConfig) {
t.Views().Commits().
Lines(
Contains("one"),
)
t.Views().Status().Content(Contains("↓1 repo → master"))
t.Views().Branches().
Lines(
Contains("master ↓1"),
Contains("other_branch ↓1"),
)
t.Views().Files().IsFocused().Press(keys.Universal.Push)
t.ExpectPopup().Confirmation().
Title(Equals("Force push")).
Content(Equals("Your branch has diverged from the remote branch. Press 'esc' to cancel, or 'enter' to force push.")).
Confirm()
t.Views().Commits().
Lines(
Contains("one"),
)
t.Views().Status().Content(Contains("✓ repo → master"))
t.Views().Branches().
Lines(
Contains("master ✓"),
Contains("other_branch ↓1"),
)
},
})

View File

@ -9,9 +9,7 @@ var Pull = NewIntegrationTest(NewIntegrationTestArgs{
Description: "Pull a commit from the remote",
ExtraCmdArgs: "",
Skip: false,
SetupConfig: func(config *config.AppConfig) {
config.UserConfig.Git.AutoFetch = false
},
SetupConfig: func(config *config.AppConfig) {},
SetupRepo: func(shell *Shell) {
shell.EmptyCommit("one")
shell.EmptyCommit("two")

View File

@ -9,9 +9,7 @@ var PullAndSetUpstream = NewIntegrationTest(NewIntegrationTestArgs{
Description: "Pull a commit from the remote, setting the upstream branch in the process",
ExtraCmdArgs: "",
Skip: false,
SetupConfig: func(config *config.AppConfig) {
config.UserConfig.Git.AutoFetch = false
},
SetupConfig: func(config *config.AppConfig) {},
SetupRepo: func(shell *Shell) {
shell.EmptyCommit("one")
shell.EmptyCommit("two")

View File

@ -9,9 +9,7 @@ var RenameBranchAndPull = NewIntegrationTest(NewIntegrationTestArgs{
Description: "Rename a branch to no longer match its upstream, then pull from the upstream",
ExtraCmdArgs: "",
Skip: false,
SetupConfig: func(config *config.AppConfig) {
config.UserConfig.Git.AutoFetch = false
},
SetupConfig: func(config *config.AppConfig) {},
SetupRepo: func(shell *Shell) {
shell.EmptyCommit("one")
shell.EmptyCommit("two")

View File

@ -9,6 +9,7 @@ import (
"github.com/jesseduffield/lazygit/pkg/integration/tests/cherry_pick"
"github.com/jesseduffield/lazygit/pkg/integration/tests/commit"
"github.com/jesseduffield/lazygit/pkg/integration/tests/config"
"github.com/jesseduffield/lazygit/pkg/integration/tests/conflicts"
"github.com/jesseduffield/lazygit/pkg/integration/tests/custom_commands"
"github.com/jesseduffield/lazygit/pkg/integration/tests/diff"
"github.com/jesseduffield/lazygit/pkg/integration/tests/file"
@ -19,6 +20,7 @@ import (
"github.com/jesseduffield/lazygit/pkg/integration/tests/stash"
"github.com/jesseduffield/lazygit/pkg/integration/tests/submodule"
"github.com/jesseduffield/lazygit/pkg/integration/tests/sync"
"github.com/jesseduffield/lazygit/pkg/integration/tests/undo"
)
var tests = []*components.IntegrationTest{
@ -27,6 +29,7 @@ var tests = []*components.IntegrationTest{
branch.CheckoutByName,
branch.Delete,
branch.DetachedHead,
branch.OpenWithCliArg,
branch.Rebase,
branch.RebaseAndDrop,
branch.RebaseDoesNotAutosquash,
@ -39,11 +42,13 @@ var tests = []*components.IntegrationTest{
commit.DiscardOldFileChange,
commit.NewBranch,
commit.Revert,
commit.RevertMerge,
commit.StageRangeOfLines,
commit.Staged,
commit.StagedWithoutHooks,
commit.Unstaged,
config.RemoteNamedStar,
conflicts.UndoChooseHunk,
custom_commands.Basic,
custom_commands.FormPrompts,
custom_commands.MenuFromCommand,
@ -63,6 +68,7 @@ var tests = []*components.IntegrationTest{
interactive_rebase.AmendMerge,
interactive_rebase.One,
misc.ConfirmOnQuit,
misc.InitialOpen,
patch_building.CopyPatchToClipboard,
stash.Rename,
stash.Stash,
@ -72,7 +78,11 @@ var tests = []*components.IntegrationTest{
submodule.Remove,
submodule.Reset,
sync.FetchPrune,
sync.ForcePush,
sync.ForcePushMultipleMatching,
sync.ForcePushMultipleUpstream,
sync.Pull,
sync.PullAndSetUpstream,
sync.RenameBranchAndPull,
undo.UndoDrop,
}

View File

@ -0,0 +1,90 @@
package undo
import (
"github.com/jesseduffield/lazygit/pkg/config"
. "github.com/jesseduffield/lazygit/pkg/integration/components"
)
var UndoDrop = NewIntegrationTest(NewIntegrationTestArgs{
Description: "Drop some commits and then undo/redo the actions",
ExtraCmdArgs: "",
Skip: false,
SetupConfig: func(config *config.AppConfig) {},
SetupRepo: func(shell *Shell) {
shell.EmptyCommit("one")
shell.EmptyCommit("two")
shell.EmptyCommit("three")
shell.EmptyCommit("four")
},
Run: func(t *TestDriver, keys config.KeybindingConfig) {
confirmCommitDrop := func() {
t.ExpectPopup().Confirmation().
Title(Equals("Delete Commit")).
Content(Equals("Are you sure you want to delete this commit?")).
Confirm()
}
confirmUndo := func() {
t.ExpectPopup().Confirmation().
Title(Equals("Undo")).
Content(MatchesRegexp(`Are you sure you want to hard reset to '.*'\? An auto-stash will be performed if necessary\.`)).
Confirm()
}
confirmRedo := func() {
t.ExpectPopup().Confirmation().
Title(Equals("Redo")).
Content(MatchesRegexp(`Are you sure you want to hard reset to '.*'\? An auto-stash will be performed if necessary\.`)).
Confirm()
}
t.Views().Commits().Focus().
Lines(
Contains("four").IsSelected(),
Contains("three"),
Contains("two"),
Contains("one"),
).
Press(keys.Universal.Remove).
Tap(confirmCommitDrop).
Lines(
Contains("three").IsSelected(),
Contains("two"),
Contains("one"),
).
Press(keys.Universal.Remove).
Tap(confirmCommitDrop).
Lines(
Contains("two").IsSelected(),
Contains("one"),
).
Press(keys.Universal.Undo).
Tap(confirmUndo).
Lines(
Contains("three").IsSelected(),
Contains("two"),
Contains("one"),
).
Press(keys.Universal.Undo).
Tap(confirmUndo).
Lines(
Contains("four").IsSelected(),
Contains("three"),
Contains("two"),
Contains("one"),
).
Press(keys.Universal.Redo).
Tap(confirmRedo).
Lines(
Contains("three").IsSelected(),
Contains("two"),
Contains("one"),
).
Press(keys.Universal.Redo).
Tap(confirmRedo).
Lines(
Contains("two").IsSelected(),
Contains("one"),
)
},
})

View File

@ -1 +0,0 @@
ref: refs/heads/master

View File

@ -1,8 +0,0 @@
[core]
repositoryformatversion = 0
filemode = true
bare = true
ignorecase = true
precomposeunicode = true
[remote "origin"]
url = /Users/jesseduffieldduffield/go/src/github.com/jesseduffield/lazygit/test/integration/forcePush/actual/./repo

View File

@ -1 +0,0 @@
Unnamed repository; edit this file 'description' to name the repository.

View File

@ -1,7 +0,0 @@
# git ls-files --others --exclude-from=.git/info/exclude
# Lines that start with '#' are comments.
# For a project mostly in C, the following would be a good set of
# exclude patterns (uncomment them if you want to use them):
# *.[oa]
# *~
.DS_Store

View File

@ -1,2 +0,0 @@
x�ÎA
Â0@Q×9Eö‚d’ÌtD„®zŒ¤™`ÁØR"èííÜ~ÞâÏkkK· ñÔwU›†!¡TWŠj%©™±'*ÞgW}2[ÚõÕ-"²dÉ¡°gEVÉ•„e€ÄaÆ\Lz÷ǺÛq²×qºë'µí©—ym7 9 wNìÀ9sÔcªëŸÜ´o]žêÍz9‹

View File

@ -1,2 +0,0 @@
x�ŽA
Â0E]çÙ ’ɤÍD„®zŒd:ƒcK‰ ·7Gpõáñ|Þj]›…Ní±¾@D¦ ˆšªæPÉ1ÏC_³çC^ÍÆ(y!Ö”tÐ Ž‚¤^'H1‹÷L&¿Ûc;ì4Ûë4ßå“ëþ” oõfa „ƒw.Ù3€s¦Ó~ªÉŸº©_]Ÿ‚æe-;7

View File

@ -1,2 +0,0 @@
# pack-refs with: peeled fully-peeled sorted
77ead8cf99f5fa1084e9ffa40eb18f37157b22c8 refs/heads/master

View File

@ -1 +0,0 @@
e38b0dbe9634034957d8ebe0088587abd9ae938d

View File

@ -1 +0,0 @@
b8568c2ecaef7e2f47647057ad47b040e8c5df53 branch 'master' of ../origin

View File

@ -1 +0,0 @@
ref: refs/heads/master

View File

@ -1 +0,0 @@
b8568c2ecaef7e2f47647057ad47b040e8c5df53

View File

@ -1,16 +0,0 @@
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
ignorecase = true
precomposeunicode = true
[user]
email = CI@example.com
name = CI
[remote "origin"]
url = ../origin
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master

View File

@ -1 +0,0 @@
Unnamed repository; edit this file 'description' to name the repository.

View File

@ -1,7 +0,0 @@
# git ls-files --others --exclude-from=.git/info/exclude
# Lines that start with '#' are comments.
# For a project mostly in C, the following would be a good set of
# exclude patterns (uncomment them if you want to use them):
# *.[oa]
# *~
.DS_Store

View File

@ -1,5 +0,0 @@
0000000000000000000000000000000000000000 5558e3589b913d8280499a5f9bf698971a83c5bd CI <CI@example.com> 1648352009 +1100 commit (initial): myfile1
5558e3589b913d8280499a5f9bf698971a83c5bd 77ead8cf99f5fa1084e9ffa40eb18f37157b22c8 CI <CI@example.com> 1648352009 +1100 commit: myfile2
77ead8cf99f5fa1084e9ffa40eb18f37157b22c8 b8568c2ecaef7e2f47647057ad47b040e8c5df53 CI <CI@example.com> 1648352009 +1100 commit: myfile3
b8568c2ecaef7e2f47647057ad47b040e8c5df53 77ead8cf99f5fa1084e9ffa40eb18f37157b22c8 CI <CI@example.com> 1648352009 +1100 reset: moving to HEAD^
77ead8cf99f5fa1084e9ffa40eb18f37157b22c8 e38b0dbe9634034957d8ebe0088587abd9ae938d CI <CI@example.com> 1648352009 +1100 commit: myfile4

View File

@ -1,5 +0,0 @@
0000000000000000000000000000000000000000 5558e3589b913d8280499a5f9bf698971a83c5bd CI <CI@example.com> 1648352009 +1100 commit (initial): myfile1
5558e3589b913d8280499a5f9bf698971a83c5bd 77ead8cf99f5fa1084e9ffa40eb18f37157b22c8 CI <CI@example.com> 1648352009 +1100 commit: myfile2
77ead8cf99f5fa1084e9ffa40eb18f37157b22c8 b8568c2ecaef7e2f47647057ad47b040e8c5df53 CI <CI@example.com> 1648352009 +1100 commit: myfile3
b8568c2ecaef7e2f47647057ad47b040e8c5df53 77ead8cf99f5fa1084e9ffa40eb18f37157b22c8 CI <CI@example.com> 1648352009 +1100 reset: moving to HEAD^
77ead8cf99f5fa1084e9ffa40eb18f37157b22c8 e38b0dbe9634034957d8ebe0088587abd9ae938d CI <CI@example.com> 1648352009 +1100 commit: myfile4

View File

@ -1,3 +0,0 @@
0000000000000000000000000000000000000000 77ead8cf99f5fa1084e9ffa40eb18f37157b22c8 CI <CI@example.com> 1648352009 +1100 fetch origin: storing head
77ead8cf99f5fa1084e9ffa40eb18f37157b22c8 b8568c2ecaef7e2f47647057ad47b040e8c5df53 CI <CI@example.com> 1648352009 +1100 update by push
b8568c2ecaef7e2f47647057ad47b040e8c5df53 e38b0dbe9634034957d8ebe0088587abd9ae938d CI <CI@example.com> 1648352011 +1100 update by push

View File

@ -1,2 +0,0 @@
x�ÎA
Â0@Q×9Eö‚d’ÌtD„®zŒ¤™`ÁØR"èííÜ~ÞâÏkkK· ñÔwU›†!¡TWŠj%©™±'*ÞgW}2[ÚõÕ-"²dÉ¡°gEVÉ•„e€ÄaÆ\Lz÷ǺÛq²×qºë'µí©—ym7 9 wNìÀ9sÔcªëŸÜ´o]žêÍz9‹

View File

@ -1,2 +0,0 @@
x�ŽA
Â0E]çÙ ’ɤÍD„®zŒd:ƒcK‰ ·7Gpõáñ|Þj]›…Ní±¾@D¦ ˆšªæPÉ1ÏC_³çC^ÍÆ(y!Ö”tÐ Ž‚¤^'H1‹÷L&¿Ûc;ì4Ûë4ßå“ëþ” oõfa „ƒw.Ù3€s¦Ó~ªÉŸº©_]Ÿ‚æe-;7

View File

@ -1 +0,0 @@
e38b0dbe9634034957d8ebe0088587abd9ae938d

View File

@ -1 +0,0 @@
e38b0dbe9634034957d8ebe0088587abd9ae938d

View File

@ -1 +0,0 @@
test1

View File

@ -1 +0,0 @@
test2

View File

@ -1 +0,0 @@
test4

View File

@ -1 +0,0 @@
{"KeyEvents":[{"Timestamp":1054,"Mod":0,"Key":256,"Ch":80},{"Timestamp":1736,"Mod":0,"Key":13,"Ch":13},{"Timestamp":2486,"Mod":0,"Key":256,"Ch":113}],"ResizeEvents":[{"Timestamp":0,"Width":272,"Height":74}]}

View File

@ -1,41 +0,0 @@
#!/bin/sh
set -e
set -e
cd $1
git init
git config user.email "CI@example.com"
git config user.name "CI"
echo test1 > myfile1
git add .
git commit -am "myfile1"
echo test2 > myfile2
git add .
git commit -am "myfile2"
cd ..
git clone --bare ./repo origin
cd repo
git remote add origin ../origin
git fetch origin
git branch --set-upstream-to=origin/master master
echo test3 > myfile3
git add .
git commit -am "myfile3"
git push origin master
git reset --hard HEAD^
echo test4 > myfile4
git add .
git commit -am "myfile4"

View File

@ -1 +0,0 @@
{ "description": "force push with lease if required", "speed": 10 }

View File

@ -1 +0,0 @@
ref: refs/heads/master

View File

@ -1,8 +0,0 @@
[core]
repositoryformatversion = 0
filemode = true
bare = true
ignorecase = true
precomposeunicode = true
[remote "origin"]
url = /Users/jesseduffieldduffield/go/src/github.com/jesseduffield/lazygit/test/integration/forcePushMultiple/actual/./repo

View File

@ -1 +0,0 @@
Unnamed repository; edit this file 'description' to name the repository.

View File

@ -1,7 +0,0 @@
# git ls-files --others --exclude-from=.git/info/exclude
# Lines that start with '#' are comments.
# For a project mostly in C, the following would be a good set of
# exclude patterns (uncomment them if you want to use them):
# *.[oa]
# *~
.DS_Store

View File

@ -1,2 +0,0 @@
x�ÍA
ƒ0@Ñ®sŠÙJ&NÇ¥\yŒ1™PÁ!ERÐÛ×#tûyðS5[ ñ¥mªà•SñÂs?hÌDŠ‘sÄ Xzš©ËLEÒ=8ù¶wÝ`œà1N/ÝÅ>«ÞRµ' Sìh €pEôÞ�õœ4ý“;;ʲ*º2K,Í

View File

@ -1,3 +0,0 @@
# pack-refs with: peeled fully-peeled sorted
e67f344f42afdb79c87a590f22537160241d8d61 refs/heads/master
e67f344f42afdb79c87a590f22537160241d8d61 refs/heads/other_branch

View File

@ -1 +0,0 @@
e67f344f42afdb79c87a590f22537160241d8d61

View File

@ -1 +0,0 @@
e67f344f42afdb79c87a590f22537160241d8d61

View File

@ -1,2 +0,0 @@
bd739fb752ed02ccd49422196e31599c87ff90ad branch 'master' of ../origin
fe67c3eaf819025990d3688d5f147a064e669ca5 not-for-merge branch 'other_branch' of ../origin

View File

@ -1 +0,0 @@
ref: refs/heads/master

View File

@ -1 +0,0 @@
fe67c3eaf819025990d3688d5f147a064e669ca5

View File

@ -1,21 +0,0 @@
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
ignorecase = true
precomposeunicode = true
[user]
email = CI@example.com
name = CI
[push]
default = matching
[remote "origin"]
url = ../origin
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
[branch "other_branch"]
remote = origin
merge = refs/heads/other_branch

View File

@ -1 +0,0 @@
Unnamed repository; edit this file 'description' to name the repository.

View File

@ -1,7 +0,0 @@
# git ls-files --others --exclude-from=.git/info/exclude
# Lines that start with '#' are comments.
# For a project mostly in C, the following would be a good set of
# exclude patterns (uncomment them if you want to use them):
# *.[oa]
# *~
.DS_Store

View File

@ -1,10 +0,0 @@
0000000000000000000000000000000000000000 7a35f0bb6bd8dc18ae462465e51f02362ba6babe CI <CI@example.com> 1648349421 +1100 commit (initial): myfile1
7a35f0bb6bd8dc18ae462465e51f02362ba6babe e67f344f42afdb79c87a590f22537160241d8d61 CI <CI@example.com> 1648349421 +1100 commit: myfile2
e67f344f42afdb79c87a590f22537160241d8d61 e67f344f42afdb79c87a590f22537160241d8d61 CI <CI@example.com> 1648349421 +1100 checkout: moving from master to other_branch
e67f344f42afdb79c87a590f22537160241d8d61 e67f344f42afdb79c87a590f22537160241d8d61 CI <CI@example.com> 1648349421 +1100 checkout: moving from other_branch to master
e67f344f42afdb79c87a590f22537160241d8d61 bd739fb752ed02ccd49422196e31599c87ff90ad CI <CI@example.com> 1648349421 +1100 commit: myfile3
bd739fb752ed02ccd49422196e31599c87ff90ad e67f344f42afdb79c87a590f22537160241d8d61 CI <CI@example.com> 1648349421 +1100 reset: moving to HEAD^
e67f344f42afdb79c87a590f22537160241d8d61 e67f344f42afdb79c87a590f22537160241d8d61 CI <CI@example.com> 1648349421 +1100 checkout: moving from master to other_branch
e67f344f42afdb79c87a590f22537160241d8d61 fe67c3eaf819025990d3688d5f147a064e669ca5 CI <CI@example.com> 1648349421 +1100 commit: myfile4
fe67c3eaf819025990d3688d5f147a064e669ca5 e67f344f42afdb79c87a590f22537160241d8d61 CI <CI@example.com> 1648349422 +1100 reset: moving to HEAD^
e67f344f42afdb79c87a590f22537160241d8d61 e67f344f42afdb79c87a590f22537160241d8d61 CI <CI@example.com> 1648349422 +1100 checkout: moving from other_branch to master

View File

@ -1,4 +0,0 @@
0000000000000000000000000000000000000000 7a35f0bb6bd8dc18ae462465e51f02362ba6babe CI <CI@example.com> 1648349421 +1100 commit (initial): myfile1
7a35f0bb6bd8dc18ae462465e51f02362ba6babe e67f344f42afdb79c87a590f22537160241d8d61 CI <CI@example.com> 1648349421 +1100 commit: myfile2
e67f344f42afdb79c87a590f22537160241d8d61 bd739fb752ed02ccd49422196e31599c87ff90ad CI <CI@example.com> 1648349421 +1100 commit: myfile3
bd739fb752ed02ccd49422196e31599c87ff90ad e67f344f42afdb79c87a590f22537160241d8d61 CI <CI@example.com> 1648349421 +1100 reset: moving to HEAD^

View File

@ -1,3 +0,0 @@
0000000000000000000000000000000000000000 e67f344f42afdb79c87a590f22537160241d8d61 CI <CI@example.com> 1648349421 +1100 branch: Created from HEAD
e67f344f42afdb79c87a590f22537160241d8d61 fe67c3eaf819025990d3688d5f147a064e669ca5 CI <CI@example.com> 1648349421 +1100 commit: myfile4
fe67c3eaf819025990d3688d5f147a064e669ca5 e67f344f42afdb79c87a590f22537160241d8d61 CI <CI@example.com> 1648349422 +1100 reset: moving to HEAD^

Some files were not shown because too many files have changed in this diff Show More