diff options
author | Jesse Duffield <jessedduffield@gmail.com> | 2022-08-13 12:56:04 +1000 |
---|---|---|
committer | Jesse Duffield <jessedduffield@gmail.com> | 2022-08-13 13:56:50 +1000 |
commit | 304d74370e720473ee384e171a8e8f00956fc72f (patch) | |
tree | 79de40af6990ee00a426f67f12d1d9d7fcd8067b /main.go | |
parent | 2bdefe20498f58fe3e8e41a2be08650576ec6d6f (diff) |
refactor to ensure code doesn't depend on integration code
Diffstat (limited to 'main.go')
-rw-r--r-- | main.go | 135 |
1 files changed, 4 insertions, 131 deletions
@@ -1,151 +1,24 @@ package main import ( - "os" - "runtime/debug" - - "github.com/integrii/flaggy" "github.com/jesseduffield/lazygit/pkg/app" - "github.com/jesseduffield/lazygit/pkg/integration" - integrationTypes "github.com/jesseduffield/lazygit/pkg/integration/types" - "github.com/jesseduffield/lazygit/pkg/utils" - "github.com/samber/lo" ) -const DEFAULT_VERSION = "unversioned" - -// These values may be set by the build script. -// we'll overwrite them if they haven't been set by the build script and if Go itself has set corresponding values in the binary +// These values may be set by the build script via the LDFLAGS argument var ( commit string - version = DEFAULT_VERSION date string + version string buildSource = "unknown" ) func main() { - cliArgs := parseCliArgsAndEnvVars() - buildInfo := getBuildInfo() - integrationTest := getIntegrationTest() - - app.Start(cliArgs, buildInfo, integrationTest) -} - -func parseCliArgsAndEnvVars() *app.CliArgs { - flaggy.DefaultParser.ShowVersionWithVersionFlag = false - - repoPath := "" - flaggy.String(&repoPath, "p", "path", "Path of git repo. (equivalent to --work-tree=<path> --git-dir=<path>/.git/)") - - filterPath := "" - flaggy.String(&filterPath, "f", "filter", "Path to filter on in `git log -- <path>`. When in filter mode, the commits, reflog, and stash are filtered based on the given path, and some operations are restricted") - - gitArg := "" - flaggy.AddPositionalValue(&gitArg, "git-arg", 1, false, "Panel to focus upon opening lazygit. Accepted values (based on git terminology): status, branch, log, stash. Ignored if --filter arg is passed.") - - printVersionInfo := false - flaggy.Bool(&printVersionInfo, "v", "version", "Print the current version") - - debug := false - flaggy.Bool(&debug, "d", "debug", "Run in debug mode with logging (see --logs flag below). Use the LOG_LEVEL env var to set the log level (debug/info/warn/error)") - - tailLogs := false - flaggy.Bool(&tailLogs, "l", "logs", "Tail lazygit logs (intended to be used when `lazygit --debug` is called in a separate terminal tab)") - - printDefaultConfig := false - flaggy.Bool(&printDefaultConfig, "c", "config", "Print the default config") - - printConfigDir := false - flaggy.Bool(&printConfigDir, "cd", "print-config-dir", "Print the config directory") - - useConfigDir := "" - flaggy.String(&useConfigDir, "ucd", "use-config-dir", "override default config directory with provided directory") - - workTree := "" - flaggy.String(&workTree, "w", "work-tree", "equivalent of the --work-tree git argument") - - gitDir := "" - flaggy.String(&gitDir, "g", "git-dir", "equivalent of the --git-dir git argument") - - customConfigFile := "" - flaggy.String(&customConfigFile, "ucf", "use-config-file", "Comma separated list to custom config file(s)") - - flaggy.Parse() - - if os.Getenv("DEBUG") == "TRUE" { - debug = true - } - - return &app.CliArgs{ - RepoPath: repoPath, - FilterPath: filterPath, - GitArg: gitArg, - PrintVersionInfo: printVersionInfo, - Debug: debug, - TailLogs: tailLogs, - PrintDefaultConfig: printDefaultConfig, - PrintConfigDir: printConfigDir, - UseConfigDir: useConfigDir, - WorkTree: workTree, - GitDir: gitDir, - CustomConfigFile: customConfigFile, - } -} - -func getBuildInfo() *app.BuildInfo { - buildInfo := &app.BuildInfo{ + ldFlagsBuildInfo := &app.BuildInfo{ Commit: commit, Date: date, Version: version, BuildSource: buildSource, } - // if the version has already been set by build flags then we'll honour that. - // chances are it's something like v0.31.0 which is more informative than a - // commit hash. - if buildInfo.Version != DEFAULT_VERSION { - return buildInfo - } - - goBuildInfo, ok := debug.ReadBuildInfo() - if !ok { - return buildInfo - } - - revision, ok := lo.Find(goBuildInfo.Settings, func(setting debug.BuildSetting) bool { - return setting.Key == "vcs.revision" - }) - if ok { - buildInfo.Commit = revision.Value - // if lazygit was built from source we'll show the version as the - // abbreviated commit hash - buildInfo.Version = utils.ShortSha(revision.Value) - } - - // if version hasn't been set we assume that neither has the date - time, ok := lo.Find(goBuildInfo.Settings, func(setting debug.BuildSetting) bool { - return setting.Key == "vcs.time" - }) - if ok { - buildInfo.Date = time.Value - } - - return buildInfo -} - -func getIntegrationTest() integrationTypes.IntegrationTest { - integrationTestName := os.Getenv("LAZYGIT_TEST_NAME") - if integrationTestName == "" { - return nil - } - - // unsetting so that if we run lazygit in as a 'daemon' we don't think we're trying to run a test again - os.Unsetenv("LAZYGIT_TEST_NAME") - for _, candidateTest := range integration.Tests { - if candidateTest.Name() == integrationTestName { - return candidateTest - } - } - - panic("Could not find integration test with name: " + integrationTestName) + app.Start(ldFlagsBuildInfo, nil) } |