mirror of
https://github.com/jesseduffield/lazygit.git
synced 2025-02-03 13:21:56 +02:00
Merge pull request #2449 from jesseduffield/migrate-pull-tests
This commit is contained in:
commit
9da9143aed
@ -178,8 +178,8 @@ type KeybindingUniversalConfig struct {
|
||||
ScrollDownMainAlt2 string `yaml:"scrollDownMain-alt2"`
|
||||
ExecuteCustomCommand string `yaml:"executeCustomCommand"`
|
||||
CreateRebaseOptionsMenu string `yaml:"createRebaseOptionsMenu"`
|
||||
PushFiles string `yaml:"pushFiles"`
|
||||
PullFiles string `yaml:"pullFiles"`
|
||||
Push string `yaml:"pushFiles"` // 'Files' appended for legacy reasons
|
||||
Pull string `yaml:"pullFiles"` // 'Files' appended for legacy reasons
|
||||
Refresh string `yaml:"refresh"`
|
||||
CreatePatchOptionsMenu string `yaml:"createPatchOptionsMenu"`
|
||||
NextTab string `yaml:"nextTab"`
|
||||
@ -468,8 +468,8 @@ func GetDefaultConfig() *UserConfig {
|
||||
ScrollDownMainAlt2: "<c-d>",
|
||||
ExecuteCustomCommand: ":",
|
||||
CreateRebaseOptionsMenu: "m",
|
||||
PushFiles: "P",
|
||||
PullFiles: "p",
|
||||
Push: "P",
|
||||
Pull: "p",
|
||||
Refresh: "R",
|
||||
CreatePatchOptionsMenu: "<c-p>",
|
||||
NextTab: "]",
|
||||
|
@ -79,7 +79,7 @@ func (gui *Gui) getRandomTip() string {
|
||||
// keybindings and lazygit-specific advice
|
||||
fmt.Sprintf(
|
||||
"To force push, press '%s' and then if the push is rejected you will be asked if you want to force push",
|
||||
formattedKey(config.Universal.PushFiles),
|
||||
formattedKey(config.Universal.Push),
|
||||
),
|
||||
fmt.Sprintf(
|
||||
"To filter commits by path, press '%s'",
|
||||
|
@ -28,12 +28,12 @@ func NewSyncController(
|
||||
func (self *SyncController) GetKeybindings(opts types.KeybindingsOpts) []*types.Binding {
|
||||
bindings := []*types.Binding{
|
||||
{
|
||||
Key: opts.GetKey(opts.Config.Universal.PushFiles),
|
||||
Key: opts.GetKey(opts.Config.Universal.Push),
|
||||
Handler: opts.Guards.NoPopupPanel(self.HandlePush),
|
||||
Description: self.c.Tr.LcPush,
|
||||
},
|
||||
{
|
||||
Key: opts.GetKey(opts.Config.Universal.PullFiles),
|
||||
Key: opts.GetKey(opts.Config.Universal.Pull),
|
||||
Handler: opts.Guards.NoPopupPanel(self.HandlePull),
|
||||
Description: self.c.Tr.LcPull,
|
||||
},
|
||||
|
@ -16,7 +16,9 @@ go run cmd/integration_test/main.go cli [--slow or --sandbox] [testname or testp
|
||||
|
||||
## Writing tests
|
||||
|
||||
The tests live in pkg/integration/tests. Each test has two important steps: the setup step and the run step.
|
||||
The tests live in pkg/integration/tests. Each test is listed in `pkg/integration/tests/tests_gen.go` which is an auto-generated file. You can re-generate that file by running `go generate ./...` at the root of the Lazygit repo.
|
||||
|
||||
Each test has two important steps: the setup step and the run step.
|
||||
|
||||
### Setup step
|
||||
|
||||
|
@ -74,7 +74,7 @@ outer:
|
||||
continue outer
|
||||
}
|
||||
}
|
||||
log.Fatalf("test %s not found. Perhaps you forgot to add it to `pkg/integration/integration_tests/tests.go`?", testName)
|
||||
log.Fatalf("test %s not found. Perhaps you forgot to add it to `pkg/integration/integration_tests/tests_gen.go`? This can be done by running `go generate ./...` from the Lazygit root. You'll need to ensure that your test name and the file name match (where the test name is in PascalCase and the file name is in snake_case).", testName)
|
||||
}
|
||||
|
||||
return testsToRun
|
||||
|
@ -5,7 +5,7 @@ import (
|
||||
. "github.com/jesseduffield/lazygit/pkg/integration/components"
|
||||
)
|
||||
|
||||
var GitIgnore = NewIntegrationTest(NewIntegrationTestArgs{
|
||||
var Gitignore = NewIntegrationTest(NewIntegrationTestArgs{
|
||||
Description: "Verify that we can't ignore the .gitignore file, then ignore/exclude other files",
|
||||
ExtraCmdArgs: "",
|
||||
Skip: false,
|
||||
|
@ -5,7 +5,7 @@ import (
|
||||
. "github.com/jesseduffield/lazygit/pkg/integration/components"
|
||||
)
|
||||
|
||||
var BuildPatchAndCopyToClipboard = NewIntegrationTest(NewIntegrationTestArgs{
|
||||
var CopyPatchToClipboard = NewIntegrationTest(NewIntegrationTestArgs{
|
||||
Description: "Create a patch from the commits and copy the patch to clipbaord.",
|
||||
ExtraCmdArgs: "",
|
||||
Skip: true,
|
||||
|
43
pkg/integration/tests/sync/pull.go
Normal file
43
pkg/integration/tests/sync/pull.go
Normal file
@ -0,0 +1,43 @@
|
||||
package sync
|
||||
|
||||
import (
|
||||
"github.com/jesseduffield/lazygit/pkg/config"
|
||||
. "github.com/jesseduffield/lazygit/pkg/integration/components"
|
||||
)
|
||||
|
||||
var Pull = NewIntegrationTest(NewIntegrationTestArgs{
|
||||
Description: "Pull a commit from the remote",
|
||||
ExtraCmdArgs: "",
|
||||
Skip: false,
|
||||
SetupConfig: func(config *config.AppConfig) {
|
||||
config.UserConfig.Git.AutoFetch = false
|
||||
},
|
||||
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.Pull)
|
||||
|
||||
t.Views().Commits().
|
||||
Lines(
|
||||
Contains("two"),
|
||||
Contains("one"),
|
||||
)
|
||||
|
||||
t.Views().Status().Content(Contains("✓ repo → master"))
|
||||
},
|
||||
})
|
47
pkg/integration/tests/sync/pull_and_set_upstream.go
Normal file
47
pkg/integration/tests/sync/pull_and_set_upstream.go
Normal file
@ -0,0 +1,47 @@
|
||||
package sync
|
||||
|
||||
import (
|
||||
"github.com/jesseduffield/lazygit/pkg/config"
|
||||
. "github.com/jesseduffield/lazygit/pkg/integration/components"
|
||||
)
|
||||
|
||||
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
|
||||
},
|
||||
SetupRepo: func(shell *Shell) {
|
||||
shell.EmptyCommit("one")
|
||||
shell.EmptyCommit("two")
|
||||
|
||||
shell.CloneIntoRemote("origin")
|
||||
|
||||
// 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("repo → master"))
|
||||
|
||||
t.Views().Files().IsFocused().Press(keys.Universal.Pull)
|
||||
|
||||
t.ExpectPopup().Prompt().
|
||||
Title(Equals("Enter upstream as '<remote> <branchname>'")).
|
||||
SuggestionLines(Equals("origin master")).
|
||||
ConfirmFirstSuggestion()
|
||||
|
||||
t.Views().Commits().
|
||||
Lines(
|
||||
Contains("two"),
|
||||
Contains("one"),
|
||||
)
|
||||
|
||||
t.Views().Status().Content(Contains("✓ repo → master"))
|
||||
},
|
||||
})
|
@ -46,7 +46,7 @@ var RenameBranchAndPull = NewIntegrationTest(NewIntegrationTestArgs{
|
||||
Type("-local").
|
||||
Confirm()
|
||||
}).
|
||||
Press(keys.Universal.PullFiles)
|
||||
Press(keys.Universal.Pull)
|
||||
|
||||
t.Views().Commits().
|
||||
Lines(
|
||||
|
@ -1,3 +1,5 @@
|
||||
//go:generate go run tests_generator.go
|
||||
|
||||
package tests
|
||||
|
||||
import (
|
||||
@ -10,80 +12,8 @@ import (
|
||||
"github.com/jesseduffield/generics/slices"
|
||||
"github.com/jesseduffield/lazycore/pkg/utils"
|
||||
"github.com/jesseduffield/lazygit/pkg/integration/components"
|
||||
"github.com/jesseduffield/lazygit/pkg/integration/tests/bisect"
|
||||
"github.com/jesseduffield/lazygit/pkg/integration/tests/branch"
|
||||
"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/custom_commands"
|
||||
"github.com/jesseduffield/lazygit/pkg/integration/tests/diff"
|
||||
"github.com/jesseduffield/lazygit/pkg/integration/tests/file"
|
||||
"github.com/jesseduffield/lazygit/pkg/integration/tests/filter_by_path"
|
||||
"github.com/jesseduffield/lazygit/pkg/integration/tests/interactive_rebase"
|
||||
"github.com/jesseduffield/lazygit/pkg/integration/tests/misc"
|
||||
"github.com/jesseduffield/lazygit/pkg/integration/tests/patch_building"
|
||||
"github.com/jesseduffield/lazygit/pkg/integration/tests/stash"
|
||||
"github.com/jesseduffield/lazygit/pkg/integration/tests/submodule"
|
||||
"github.com/jesseduffield/lazygit/pkg/integration/tests/sync"
|
||||
)
|
||||
|
||||
// Here is where we lists the actual tests that will run. When you create a new test,
|
||||
// be sure to add it to this list.
|
||||
|
||||
var tests = []*components.IntegrationTest{
|
||||
misc.ConfirmOnQuit,
|
||||
bisect.Basic,
|
||||
bisect.FromOtherBranch,
|
||||
branch.CheckoutByName,
|
||||
branch.Delete,
|
||||
branch.Rebase,
|
||||
branch.RebaseAndDrop,
|
||||
branch.RebaseDoesNotAutosquash,
|
||||
branch.Suggestions,
|
||||
branch.Reset,
|
||||
branch.DetachedHead,
|
||||
cherry_pick.CherryPick,
|
||||
cherry_pick.CherryPickConflicts,
|
||||
commit.Commit,
|
||||
commit.CommitMultiline,
|
||||
commit.Revert,
|
||||
commit.NewBranch,
|
||||
commit.Staged,
|
||||
commit.Unstaged,
|
||||
commit.StagedWithoutHooks,
|
||||
commit.DiscardOldFileChange,
|
||||
commit.StageRangeOfLines,
|
||||
custom_commands.Basic,
|
||||
custom_commands.FormPrompts,
|
||||
custom_commands.MenuFromCommand,
|
||||
custom_commands.MenuFromCommandsOutput,
|
||||
custom_commands.MultiplePrompts,
|
||||
file.DirWithUntrackedFile,
|
||||
file.DiscardChanges,
|
||||
file.DiscardStagedChanges,
|
||||
file.GitIgnore,
|
||||
interactive_rebase.AmendMerge,
|
||||
interactive_rebase.One,
|
||||
stash.Rename,
|
||||
stash.Stash,
|
||||
stash.StashIncludingUntrackedFiles,
|
||||
config.RemoteNamedStar,
|
||||
diff.Diff,
|
||||
diff.DiffAndApplyPatch,
|
||||
diff.DiffCommits,
|
||||
diff.IgnoreWhitespace,
|
||||
sync.FetchPrune,
|
||||
sync.RenameBranchAndPull,
|
||||
filter_by_path.CliArg,
|
||||
filter_by_path.SelectFile,
|
||||
filter_by_path.TypeFile,
|
||||
patch_building.BuildPatchAndCopyToClipboard,
|
||||
submodule.Add,
|
||||
submodule.Remove,
|
||||
submodule.Enter,
|
||||
submodule.Reset,
|
||||
}
|
||||
|
||||
func GetTests() []*components.IntegrationTest {
|
||||
// first we ensure that each test in this directory has actually been added to the above list.
|
||||
testCount := 0
|
||||
@ -99,8 +29,8 @@ func GetTests() []*components.IntegrationTest {
|
||||
|
||||
if err := filepath.Walk(filepath.Join(utils.GetLazyRootDirectory(), "pkg/integration/tests"), func(path string, info os.FileInfo, err error) error {
|
||||
if !info.IsDir() && strings.HasSuffix(path, ".go") {
|
||||
// ignoring this current file
|
||||
if filepath.Base(path) == "tests.go" {
|
||||
// ignoring non-test files
|
||||
if filepath.Base(path) == "tests.go" || filepath.Base(path) == "tests_gen.go" || filepath.Base(path) == "tests_generator.go" {
|
||||
return nil
|
||||
}
|
||||
|
||||
@ -121,13 +51,13 @@ func GetTests() []*components.IntegrationTest {
|
||||
}
|
||||
|
||||
if len(missingTestNames) > 0 {
|
||||
panic(fmt.Sprintf("The following tests are missing from the list of tests: %s. You need to add them to `pkg/integration/tests/tests.go`.", strings.Join(missingTestNames, ", ")))
|
||||
panic(fmt.Sprintf("The following tests are missing from the list of tests: %s. You need to add them to `pkg/integration/tests/tests_gen.go`. Use `go generate ./...` to regenerate the tests list.", strings.Join(missingTestNames, ", ")))
|
||||
}
|
||||
|
||||
if testCount > len(tests) {
|
||||
panic("you have not added all of the tests to the tests list in `pkg/integration/tests/tests.go`")
|
||||
panic("you have not added all of the tests to the tests list in `pkg/integration/tests/tests_gen.go`. Use `go generate ./...` to regenerate the tests list.")
|
||||
} else if testCount < len(tests) {
|
||||
panic("There are more tests in `pkg/integration/tests/tests.go` than there are test files in the tests directory. Ensure that you only have one test per file and you haven't included the same test twice in the tests list.")
|
||||
panic("There are more tests in `pkg/integration/tests/tests_gen.go` than there are test files in the tests directory. Ensure that you only have one test per file and you haven't included the same test twice in the tests list. Use `go generate ./...` to regenerate the tests list.")
|
||||
}
|
||||
|
||||
return tests
|
||||
|
78
pkg/integration/tests/tests_gen.go
Normal file
78
pkg/integration/tests/tests_gen.go
Normal file
@ -0,0 +1,78 @@
|
||||
// THIS FILE IS AUTO-GENERATED. You can regenerate it by running `go generate ./...` at the root of the lazygit repo.
|
||||
|
||||
package tests
|
||||
|
||||
import (
|
||||
"github.com/jesseduffield/lazygit/pkg/integration/components"
|
||||
"github.com/jesseduffield/lazygit/pkg/integration/tests/bisect"
|
||||
"github.com/jesseduffield/lazygit/pkg/integration/tests/branch"
|
||||
"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/custom_commands"
|
||||
"github.com/jesseduffield/lazygit/pkg/integration/tests/diff"
|
||||
"github.com/jesseduffield/lazygit/pkg/integration/tests/file"
|
||||
"github.com/jesseduffield/lazygit/pkg/integration/tests/filter_by_path"
|
||||
"github.com/jesseduffield/lazygit/pkg/integration/tests/interactive_rebase"
|
||||
"github.com/jesseduffield/lazygit/pkg/integration/tests/misc"
|
||||
"github.com/jesseduffield/lazygit/pkg/integration/tests/patch_building"
|
||||
"github.com/jesseduffield/lazygit/pkg/integration/tests/stash"
|
||||
"github.com/jesseduffield/lazygit/pkg/integration/tests/submodule"
|
||||
"github.com/jesseduffield/lazygit/pkg/integration/tests/sync"
|
||||
)
|
||||
|
||||
var tests = []*components.IntegrationTest{
|
||||
bisect.Basic,
|
||||
bisect.FromOtherBranch,
|
||||
branch.CheckoutByName,
|
||||
branch.Delete,
|
||||
branch.DetachedHead,
|
||||
branch.Rebase,
|
||||
branch.RebaseAndDrop,
|
||||
branch.RebaseDoesNotAutosquash,
|
||||
branch.Reset,
|
||||
branch.Suggestions,
|
||||
cherry_pick.CherryPick,
|
||||
cherry_pick.CherryPickConflicts,
|
||||
commit.Commit,
|
||||
commit.CommitMultiline,
|
||||
commit.DiscardOldFileChange,
|
||||
commit.NewBranch,
|
||||
commit.Revert,
|
||||
commit.StageRangeOfLines,
|
||||
commit.Staged,
|
||||
commit.StagedWithoutHooks,
|
||||
commit.Unstaged,
|
||||
config.RemoteNamedStar,
|
||||
custom_commands.Basic,
|
||||
custom_commands.FormPrompts,
|
||||
custom_commands.MenuFromCommand,
|
||||
custom_commands.MenuFromCommandsOutput,
|
||||
custom_commands.MultiplePrompts,
|
||||
diff.Diff,
|
||||
diff.DiffAndApplyPatch,
|
||||
diff.DiffCommits,
|
||||
diff.IgnoreWhitespace,
|
||||
file.DirWithUntrackedFile,
|
||||
file.DiscardChanges,
|
||||
file.DiscardStagedChanges,
|
||||
file.Gitignore,
|
||||
filter_by_path.CliArg,
|
||||
filter_by_path.SelectFile,
|
||||
filter_by_path.TypeFile,
|
||||
interactive_rebase.AmendMerge,
|
||||
interactive_rebase.One,
|
||||
misc.ConfirmOnQuit,
|
||||
patch_building.CopyPatchToClipboard,
|
||||
stash.Rename,
|
||||
stash.Stash,
|
||||
stash.StashIncludingUntrackedFiles,
|
||||
submodule.Add,
|
||||
submodule.Enter,
|
||||
submodule.Remove,
|
||||
submodule.Reset,
|
||||
sync.FetchPrune,
|
||||
sync.Pull,
|
||||
sync.PullAndSetUpstream,
|
||||
sync.RenameBranchAndPull,
|
||||
}
|
115
pkg/integration/tests/tests_generator.go
Normal file
115
pkg/integration/tests/tests_generator.go
Normal file
@ -0,0 +1,115 @@
|
||||
//go:build ignore
|
||||
|
||||
// This file is invoked with `go generate ./...` and it generates the tests_gen.go file
|
||||
// The tests_gen.go file is a list of all the integration tests.
|
||||
// It's annoying to have to manually add an entry in that file for each test you
|
||||
// create, so this generator is here to make the process easier.
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"fmt"
|
||||
"go/format"
|
||||
"io/fs"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"strings"
|
||||
|
||||
"github.com/samber/lo"
|
||||
)
|
||||
|
||||
func main() {
|
||||
code := generateCode()
|
||||
|
||||
formattedCode, err := format.Source(code)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
if err := ioutil.WriteFile("tests_gen.go", formattedCode, 0o644); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
||||
func generateCode() []byte {
|
||||
// traverse parent directory to get all subling directories
|
||||
directories, err := ioutil.ReadDir("../tests")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
directories = lo.Filter(directories, func(file os.FileInfo, _ int) bool {
|
||||
// 'shared' is a special folder containing shared test code so we
|
||||
// ignore it here
|
||||
return file.IsDir() && file.Name() != "shared"
|
||||
})
|
||||
|
||||
var buf bytes.Buffer
|
||||
fmt.Fprintf(&buf, "// THIS FILE IS AUTO-GENERATED. You can regenerate it by running `go generate ./...` at the root of the lazygit repo.\n\n")
|
||||
fmt.Fprintf(&buf, "package tests\n\n")
|
||||
fmt.Fprintf(&buf, "import (\n")
|
||||
fmt.Fprintf(&buf, "\t\"github.com/jesseduffield/lazygit/pkg/integration/components\"\n")
|
||||
for _, dir := range directories {
|
||||
fmt.Fprintf(&buf, "\t\"github.com/jesseduffield/lazygit/pkg/integration/tests/%s\"\n", dir.Name())
|
||||
}
|
||||
fmt.Fprintf(&buf, ")\n\n")
|
||||
fmt.Fprintf(&buf, "var tests = []*components.IntegrationTest{\n")
|
||||
for _, dir := range directories {
|
||||
appendDirTests(dir, &buf)
|
||||
}
|
||||
fmt.Fprintf(&buf, "}\n")
|
||||
|
||||
return buf.Bytes()
|
||||
}
|
||||
|
||||
func appendDirTests(dir fs.FileInfo, buf *bytes.Buffer) {
|
||||
files, err := ioutil.ReadDir(fmt.Sprintf("../tests/%s", dir.Name()))
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
for _, file := range files {
|
||||
if file.IsDir() || !strings.HasSuffix(file.Name(), ".go") {
|
||||
continue
|
||||
}
|
||||
|
||||
testName := snakeToPascal(
|
||||
strings.TrimSuffix(file.Name(), ".go"),
|
||||
)
|
||||
|
||||
fileContents, err := ioutil.ReadFile(fmt.Sprintf("../tests/%s/%s", dir.Name(), file.Name()))
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
fileContentsStr := string(fileContents)
|
||||
|
||||
if !strings.Contains(fileContentsStr, "NewIntegrationTest(") {
|
||||
// the file does not define a test so it probably just contains shared test code
|
||||
continue
|
||||
}
|
||||
|
||||
if !strings.Contains(fileContentsStr, fmt.Sprintf("var %s = NewIntegrationTest(NewIntegrationTestArgs{", testName)) {
|
||||
panic(fmt.Sprintf("expected test %s to be defined in file %s. Perhaps you misspelt it? The name of the test should be the name of the file but converted from snake_case to PascalCase", testName, file.Name()))
|
||||
}
|
||||
|
||||
fmt.Fprintf(buf, "\t%s.%s,\n", dir.Name(), testName)
|
||||
}
|
||||
}
|
||||
|
||||
// thanks ChatGPT
|
||||
func snakeToPascal(s string) string {
|
||||
// Split the input string into words.
|
||||
words := strings.Split(s, "_")
|
||||
|
||||
// Convert the first letter of each word to uppercase and concatenate them.
|
||||
var builder strings.Builder
|
||||
for _, w := range words {
|
||||
if len(w) > 0 {
|
||||
builder.WriteString(strings.ToUpper(w[:1]))
|
||||
builder.WriteString(w[1:])
|
||||
}
|
||||
}
|
||||
|
||||
return builder.String()
|
||||
}
|
@ -1 +0,0 @@
|
||||
ref: refs/heads/master
|
@ -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/pull/actual/./repo
|
@ -1 +0,0 @@
|
||||
Unnamed repository; edit this file 'description' to name the repository.
|
@ -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
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1,2 +0,0 @@
|
||||
x�ÍA
|
||||
ƒ0@Ñ®sŠÙJÆŒãJ\yŒ˜L¨à�")´·×#tûyðS5[ ñ¥íªà•Sñ‘—á®’‰…³`±´PÈL%¦¾sñÓ^u‡i†Ç4�ú�öÞô–ª=™$�pàŠè½;ë9iú'wö+ë¦è49,Ù
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1,3 +0,0 @@
|
||||
x�ŽA
|
||||
à E»öîÅq4*”RÈ*ÇÐq†j‚…ööõ]}x¼Ÿ¶ÖÖ®!¹S?˜µ-�âU¢d‡"¹J4‚%?–XíùàWס¤œ@SÉÆJõ¾AÁ`�œc
|
||||
“ÊïþØ=/ú:/wþä¶?ùB[»i˜\D'�ú`Œtœêü§®ÚWÖ'£ú‘};¦
|
@ -1,2 +0,0 @@
|
||||
# pack-refs with: peeled fully-peeled sorted
|
||||
97bf06c598032ab5ad0faf744c91545071f3cb38 refs/heads/master
|
@ -1 +0,0 @@
|
||||
myfile4
|
@ -1 +0,0 @@
|
||||
97bf06c598032ab5ad0faf744c91545071f3cb38 branch 'master' of ../origin
|
@ -1 +0,0 @@
|
||||
ref: refs/heads/master
|
@ -1 +0,0 @@
|
||||
7b9a91f4ecba02fd55dbf3f372bc3faee3897939
|
@ -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
|
@ -1 +0,0 @@
|
||||
Unnamed repository; edit this file 'description' to name the repository.
|
Binary file not shown.
@ -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
|
@ -1,7 +0,0 @@
|
||||
0000000000000000000000000000000000000000 3ea0c134bed03d0a2cb7eeaff586af277d137129 CI <CI@example.com> 1648348653 +1100 commit (initial): myfile1
|
||||
3ea0c134bed03d0a2cb7eeaff586af277d137129 7b9a91f4ecba02fd55dbf3f372bc3faee3897939 CI <CI@example.com> 1648348653 +1100 commit: myfile2
|
||||
7b9a91f4ecba02fd55dbf3f372bc3faee3897939 f0eb4a85b26f51dc8c23e31bb7f541f0e2d1d2d0 CI <CI@example.com> 1648348653 +1100 commit: myfile3
|
||||
f0eb4a85b26f51dc8c23e31bb7f541f0e2d1d2d0 97bf06c598032ab5ad0faf744c91545071f3cb38 CI <CI@example.com> 1648348653 +1100 commit: myfile4
|
||||
97bf06c598032ab5ad0faf744c91545071f3cb38 7b9a91f4ecba02fd55dbf3f372bc3faee3897939 CI <CI@example.com> 1648348653 +1100 reset: moving to HEAD~2
|
||||
7b9a91f4ecba02fd55dbf3f372bc3faee3897939 97bf06c598032ab5ad0faf744c91545071f3cb38 CI <CI@example.com> 1648348654 +1100 rebase -i (start): checkout 97bf06c598032ab5ad0faf744c91545071f3cb38
|
||||
97bf06c598032ab5ad0faf744c91545071f3cb38 97bf06c598032ab5ad0faf744c91545071f3cb38 CI <CI@example.com> 1648348654 +1100 rebase -i (finish): returning to refs/heads/master
|
@ -1,6 +0,0 @@
|
||||
0000000000000000000000000000000000000000 3ea0c134bed03d0a2cb7eeaff586af277d137129 CI <CI@example.com> 1648348653 +1100 commit (initial): myfile1
|
||||
3ea0c134bed03d0a2cb7eeaff586af277d137129 7b9a91f4ecba02fd55dbf3f372bc3faee3897939 CI <CI@example.com> 1648348653 +1100 commit: myfile2
|
||||
7b9a91f4ecba02fd55dbf3f372bc3faee3897939 f0eb4a85b26f51dc8c23e31bb7f541f0e2d1d2d0 CI <CI@example.com> 1648348653 +1100 commit: myfile3
|
||||
f0eb4a85b26f51dc8c23e31bb7f541f0e2d1d2d0 97bf06c598032ab5ad0faf744c91545071f3cb38 CI <CI@example.com> 1648348653 +1100 commit: myfile4
|
||||
97bf06c598032ab5ad0faf744c91545071f3cb38 7b9a91f4ecba02fd55dbf3f372bc3faee3897939 CI <CI@example.com> 1648348653 +1100 reset: moving to HEAD~2
|
||||
7b9a91f4ecba02fd55dbf3f372bc3faee3897939 97bf06c598032ab5ad0faf744c91545071f3cb38 CI <CI@example.com> 1648348654 +1100 rebase -i (finish): refs/heads/master onto 97bf06c598032ab5ad0faf744c91545071f3cb38
|
@ -1 +0,0 @@
|
||||
0000000000000000000000000000000000000000 97bf06c598032ab5ad0faf744c91545071f3cb38 CI <CI@example.com> 1648348653 +1100 fetch origin: storing head
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1,2 +0,0 @@
|
||||
x�ÍA
|
||||
ƒ0@Ñ®sŠÙJÆŒãJ\yŒ˜L¨à�")´·×#tûyðS5[ ñ¥íªà•Sñ‘—á®’‰…³`±´PÈL%¦¾sñÓ^u‡i†Ç4�ú�öÞô–ª=™$�pàŠè½;ë9iú'wö+ë¦è49,Ù
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1,3 +0,0 @@
|
||||
x�ŽA
|
||||
à E»öîÅq4*”RÈ*ÇÐq†j‚…ööõ]}x¼Ÿ¶ÖÖ®!¹S?˜µ-�âU¢d‡"¹J4‚%?–XíùàWס¤œ@SÉÆJõ¾AÁ`�œc
|
||||
“ÊïþØ=/ú:/wþä¶?ùB[»i˜\D'�ú`Œtœêü§®ÚWÖ'£ú‘};¦
|
@ -1 +0,0 @@
|
||||
97bf06c598032ab5ad0faf744c91545071f3cb38
|
@ -1 +0,0 @@
|
||||
97bf06c598032ab5ad0faf744c91545071f3cb38
|
@ -1 +0,0 @@
|
||||
test1
|
@ -1 +0,0 @@
|
||||
test2
|
@ -1 +0,0 @@
|
||||
test3
|
@ -1 +0,0 @@
|
||||
test4
|
@ -1 +0,0 @@
|
||||
{"KeyEvents":[{"Timestamp":618,"Mod":0,"Key":256,"Ch":112},{"Timestamp":1225,"Mod":0,"Key":256,"Ch":113}],"ResizeEvents":[{"Timestamp":0,"Width":272,"Height":74}]}
|
@ -1,36 +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"
|
||||
echo test3 > myfile3
|
||||
git add .
|
||||
git commit -am "myfile3"
|
||||
echo test4 > myfile4
|
||||
git add .
|
||||
git commit -am "myfile4"
|
||||
|
||||
cd ..
|
||||
git clone --bare ./repo origin
|
||||
|
||||
cd repo
|
||||
|
||||
# the test is to ensure that we actually can pull these two commits back from the origin
|
||||
git reset --hard HEAD~2
|
||||
git remote add origin ../origin
|
||||
git fetch origin
|
||||
git branch --set-upstream-to=origin/master master
|
@ -1 +0,0 @@
|
||||
{ "description": "pull changes from the remote", "speed": 10 }
|
@ -1 +0,0 @@
|
||||
ref: refs/heads/master
|
@ -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/pullAndSetUpstream/actual/./repo
|
@ -1 +0,0 @@
|
||||
Unnamed repository; edit this file 'description' to name the repository.
|
@ -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
|
Binary file not shown.
Binary file not shown.
@ -1,2 +0,0 @@
|
||||
x�ΝA
|
||||
ƒ0@Ρ®s�ΩJF§“))Ές1™PΑ!")ΨΫΧ#tϋyπS5[ ρ¥ν�ΰ•Sρ‘ηπPΙD�ΒY°‹XΝΤg¦Σ½sρΣήu‡q‚η8½τ�¶zKΥ@&ιI\½wg='M�δΞΎeYέ3“,Υ
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1,2 +0,0 @@
|
||||
# pack-refs with: peeled fully-peeled sorted
|
||||
dffd8a2962e840dfcbce39a0315e0cded7873b29 refs/heads/master
|
@ -1 +0,0 @@
|
||||
myfile4
|
@ -1 +0,0 @@
|
||||
dffd8a2962e840dfcbce39a0315e0cded7873b29 branch 'master' of ../origin
|
@ -1 +0,0 @@
|
||||
ref: refs/heads/master
|
@ -1 +0,0 @@
|
||||
f11c72f0484c803d954446036bf464c3b8523330
|
@ -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
|
@ -1 +0,0 @@
|
||||
Unnamed repository; edit this file 'description' to name the repository.
|
Binary file not shown.
@ -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
|
@ -1,7 +0,0 @@
|
||||
0000000000000000000000000000000000000000 1f027c0e280612f8e5e2cf0a5361f6ab0c4baed6 CI <CI@example.com> 1648348714 +1100 commit (initial): myfile1
|
||||
1f027c0e280612f8e5e2cf0a5361f6ab0c4baed6 f11c72f0484c803d954446036bf464c3b8523330 CI <CI@example.com> 1648348714 +1100 commit: myfile2
|
||||
f11c72f0484c803d954446036bf464c3b8523330 64d950eb46bf13d35cd27dd7a3ad621422dee6ac CI <CI@example.com> 1648348715 +1100 commit: myfile3
|
||||
64d950eb46bf13d35cd27dd7a3ad621422dee6ac dffd8a2962e840dfcbce39a0315e0cded7873b29 CI <CI@example.com> 1648348715 +1100 commit: myfile4
|
||||
dffd8a2962e840dfcbce39a0315e0cded7873b29 f11c72f0484c803d954446036bf464c3b8523330 CI <CI@example.com> 1648348715 +1100 reset: moving to HEAD~2
|
||||
f11c72f0484c803d954446036bf464c3b8523330 dffd8a2962e840dfcbce39a0315e0cded7873b29 CI <CI@example.com> 1648348721 +1100 rebase -i (start): checkout dffd8a2962e840dfcbce39a0315e0cded7873b29
|
||||
dffd8a2962e840dfcbce39a0315e0cded7873b29 dffd8a2962e840dfcbce39a0315e0cded7873b29 CI <CI@example.com> 1648348721 +1100 rebase -i (finish): returning to refs/heads/master
|
@ -1,6 +0,0 @@
|
||||
0000000000000000000000000000000000000000 1f027c0e280612f8e5e2cf0a5361f6ab0c4baed6 CI <CI@example.com> 1648348714 +1100 commit (initial): myfile1
|
||||
1f027c0e280612f8e5e2cf0a5361f6ab0c4baed6 f11c72f0484c803d954446036bf464c3b8523330 CI <CI@example.com> 1648348714 +1100 commit: myfile2
|
||||
f11c72f0484c803d954446036bf464c3b8523330 64d950eb46bf13d35cd27dd7a3ad621422dee6ac CI <CI@example.com> 1648348715 +1100 commit: myfile3
|
||||
64d950eb46bf13d35cd27dd7a3ad621422dee6ac dffd8a2962e840dfcbce39a0315e0cded7873b29 CI <CI@example.com> 1648348715 +1100 commit: myfile4
|
||||
dffd8a2962e840dfcbce39a0315e0cded7873b29 f11c72f0484c803d954446036bf464c3b8523330 CI <CI@example.com> 1648348715 +1100 reset: moving to HEAD~2
|
||||
f11c72f0484c803d954446036bf464c3b8523330 dffd8a2962e840dfcbce39a0315e0cded7873b29 CI <CI@example.com> 1648348721 +1100 rebase -i (finish): refs/heads/master onto dffd8a2962e840dfcbce39a0315e0cded7873b29
|
@ -1 +0,0 @@
|
||||
0000000000000000000000000000000000000000 dffd8a2962e840dfcbce39a0315e0cded7873b29 CI <CI@example.com> 1648348715 +1100 fetch origin: storing head
|
Binary file not shown.
Binary file not shown.
@ -1,2 +0,0 @@
|
||||
x�ΝA
|
||||
ƒ0@Ρ®s�ΩJF§“))Ές1™PΑ!")ΨΫΧ#tϋyπS5[ ρ¥ν�ΰ•Sρ‘ηπPΙD�ΒY°‹XΝΤg¦Σ½sρΣήu‡q‚η8½τ�¶zKΥ@&ιI\½wg='M�δΞΎeYέ3“,Υ
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user