| // Glide is a command line utility that manages Go project dependencies. |
| // |
| // Configuration of where to start is managed via a glide.yaml in the root of a |
| // project. The yaml |
| // |
| // A glide.yaml file looks like: |
| // |
| // package: github.com/Masterminds/glide |
| // imports: |
| // - package: github.com/Masterminds/cookoo |
| // - package: github.com/kylelemons/go-gypsy |
| // subpackages: |
| // - yaml |
| // |
| // Glide puts dependencies in a vendor directory. Go utilities require this to |
| // be in your GOPATH. Glide makes this easy. |
| // |
| // For more information use the `glide help` command or see https://glide.sh |
| package main |
| |
| import ( |
| "path/filepath" |
| |
| "github.com/Masterminds/glide/action" |
| "github.com/Masterminds/glide/cache" |
| "github.com/Masterminds/glide/msg" |
| gpath "github.com/Masterminds/glide/path" |
| "github.com/Masterminds/glide/repo" |
| "github.com/Masterminds/glide/util" |
| |
| "github.com/codegangsta/cli" |
| |
| "fmt" |
| "os" |
| ) |
| |
| const usage = `Vendor Package Management for your Go projects. |
| |
| Each project should have a 'glide.yaml' file in the project directory. Files |
| look something like this: |
| |
| package: github.com/Masterminds/glide |
| imports: |
| - package: github.com/Masterminds/cookoo |
| version: 1.1.0 |
| - package: github.com/kylelemons/go-gypsy |
| subpackages: |
| - yaml |
| |
| For more details on the 'glide.yaml' files see the documentation at |
| https://glide.sh/docs/glide.yaml |
| ` |
| |
| // VendorDir default vendor directory name |
| var VendorDir = "vendor" |
| |
| func main() { |
| app := cli.NewApp() |
| app.Name = "glide" |
| app.Usage = usage |
| app.Version = Version |
| app.Flags = []cli.Flag{ |
| cli.StringFlag{ |
| Name: "yaml, y", |
| Value: "glide.yaml", |
| Usage: "Set a YAML configuration file.", |
| }, |
| cli.BoolFlag{ |
| Name: "quiet, q", |
| Usage: "Quiet (no info or debug messages)", |
| }, |
| cli.BoolFlag{ |
| Name: "debug", |
| Usage: "Print debug verbose informational messages", |
| }, |
| cli.StringFlag{ |
| Name: "home", |
| Value: gpath.Home(), |
| Usage: "The location of Glide files", |
| EnvVar: "GLIDE_HOME", |
| }, |
| cli.StringFlag{ |
| Name: "tmp", |
| Value: "", |
| Usage: "The temp directory to use. Defaults to systems temp", |
| EnvVar: "GLIDE_TMP", |
| }, |
| cli.BoolFlag{ |
| Name: "no-color", |
| Usage: "Turn off colored output for log messages", |
| }, |
| } |
| app.CommandNotFound = func(c *cli.Context, command string) { |
| // TODO: Set some useful env vars. |
| action.Plugin(command, os.Args) |
| } |
| app.Before = startup |
| app.After = shutdown |
| app.Commands = commands() |
| |
| // Detect errors from the Before and After calls and exit on them. |
| if err := app.Run(os.Args); err != nil { |
| msg.Err(err.Error()) |
| os.Exit(1) |
| } |
| |
| // If there was a Error message exit non-zero. |
| if msg.HasErrored() { |
| m := msg.Color(msg.Red, "An Error has occurred") |
| msg.Msg(m) |
| os.Exit(2) |
| } |
| } |
| |
| func commands() []cli.Command { |
| return []cli.Command{ |
| { |
| Name: "create", |
| ShortName: "init", |
| Usage: "Initialize a new project, creating a glide.yaml file", |
| Description: `This command starts from a project without Glide and |
| sets it up. It generates a glide.yaml file, parsing your codebase to guess |
| the dependencies to include. Once this step is done you may edit the |
| glide.yaml file to update imported dependency properties such as the version |
| or version range to include. |
| |
| To fetch the dependencies you may run 'glide install'.`, |
| Flags: []cli.Flag{ |
| cli.BoolFlag{ |
| Name: "skip-import", |
| Usage: "When initializing skip importing from other package managers.", |
| }, |
| cli.BoolFlag{ |
| Name: "non-interactive", |
| Usage: "Disable interactive prompts.", |
| }, |
| }, |
| Action: func(c *cli.Context) error { |
| action.Create(".", c.Bool("skip-import"), c.Bool("non-interactive")) |
| return nil |
| }, |
| }, |
| { |
| Name: "config-wizard", |
| ShortName: "cw", |
| Usage: "Wizard that makes optional suggestions to improve config in a glide.yaml file.", |
| Description: `Glide will analyze a projects glide.yaml file and the imported |
| projects to find ways the glide.yaml file can potentially be improved. It |
| will then interactively make suggestions that you can skip or accept.`, |
| Action: func(c *cli.Context) error { |
| action.ConfigWizard(".") |
| return nil |
| }, |
| }, |
| { |
| Name: "get", |
| Usage: "Install one or more packages into `vendor/` and add dependency to glide.yaml.", |
| Description: `Gets one or more package (like 'go get') and then adds that file |
| to the glide.yaml file. Multiple package names can be specified on one line. |
| |
| $ glide get github.com/Masterminds/cookoo/web |
| |
| The above will install the project github.com/Masterminds/cookoo and add |
| the subpackage 'web'. |
| |
| If a fetched dependency has a glide.yaml file, configuration from Godep, |
| GPM, GOM, or GB Glide that configuration will be used to find the dependencies |
| and versions to fetch. If those are not available the dependent packages will |
| be fetched as either a version specified elsewhere or the latest version. |
| |
| When adding a new dependency Glide will perform an update to work out the |
| the versions for the dependencies of this dependency (transitive ones). This |
| will generate an updated glide.lock file with specific locked versions to use. |
| |
| The '--strip-vendor' flag will remove any nested 'vendor' folders and |
| 'Godeps/_workspace' folders after an update (along with undoing any Godep |
| import rewriting). Note, The Godeps specific functionality is deprecated and |
| will be removed when most Godeps users have migrated to using the vendor |
| folder.`, |
| Flags: []cli.Flag{ |
| cli.BoolFlag{ |
| Name: "test", |
| Usage: "Add test dependencies.", |
| }, |
| cli.BoolFlag{ |
| Name: "insecure", |
| Usage: "Use http:// rather than https:// to retrieve packages.", |
| }, |
| cli.BoolFlag{ |
| Name: "no-recursive, quick", |
| Usage: "Disable updating dependencies' dependencies.", |
| }, |
| cli.BoolFlag{ |
| Name: "force", |
| Usage: "If there was a change in the repo or VCS switch to new one. Warning, changes will be lost.", |
| }, |
| cli.BoolFlag{ |
| Name: "all-dependencies", |
| Usage: "This will resolve all dependencies for all packages, not just those directly used.", |
| }, |
| cli.BoolFlag{ |
| Name: "update-vendored, u", |
| Usage: "Update vendored packages (without local VCS repo). Warning, changes will be lost.", |
| Hidden: true, |
| }, |
| cli.BoolFlag{ |
| Name: "cache", |
| Usage: "When downloading dependencies attempt to cache them.", |
| Hidden: true, |
| }, |
| cli.BoolFlag{ |
| Name: "cache-gopath", |
| Usage: "When downloading dependencies attempt to put them in the GOPATH, too.", |
| Hidden: true, |
| }, |
| cli.BoolFlag{ |
| Name: "use-gopath", |
| Usage: "Copy dependencies from the GOPATH if they exist there.", |
| Hidden: true, |
| }, |
| cli.BoolFlag{ |
| Name: "resolve-current", |
| Usage: "Resolve dependencies for only the current system rather than all build modes.", |
| }, |
| cli.BoolFlag{ |
| Name: "strip-vcs, s", |
| Usage: "Removes version control metadata (e.g, .git directory) from the vendor folder.", |
| Hidden: true, |
| }, |
| cli.BoolFlag{ |
| Name: "strip-vendor, v", |
| Usage: "Removes nested vendor and Godeps/_workspace directories.", |
| }, |
| cli.BoolFlag{ |
| Name: "non-interactive", |
| Usage: "Disable interactive prompts.", |
| }, |
| cli.BoolFlag{ |
| Name: "skip-test", |
| Usage: "Resolve dependencies in test files.", |
| }, |
| }, |
| Action: func(c *cli.Context) error { |
| if c.Bool("delete") { |
| msg.Warn("The --delete flag is deprecated. This now works by default.") |
| } |
| if c.Bool("update-vendored") { |
| msg.Warn("The --update-vendored flag is deprecated. This now works by default.") |
| } |
| if c.String("file") != "" { |
| msg.Warn("The --flag flag is deprecated.") |
| } |
| if c.Bool("cache") { |
| msg.Warn("The --cache flag is deprecated. This now works by default.") |
| } |
| if c.Bool("cache-gopath") { |
| msg.Warn("The --cache-gopath flag is deprecated.") |
| } |
| if c.Bool("use-gopath") { |
| msg.Warn("The --use-gopath flag is deprecated. Please see overrides.") |
| } |
| if c.Bool("strip-vcs") { |
| msg.Warn("The --strip-vcs flag is deprecated. This now works by default.") |
| } |
| |
| if len(c.Args()) < 1 { |
| fmt.Println("Oops! Package name is required.") |
| os.Exit(1) |
| } |
| |
| if c.Bool("resolve-current") { |
| util.ResolveCurrent = true |
| msg.Warn("Only resolving dependencies for the current OS/Arch") |
| } |
| |
| inst := repo.NewInstaller() |
| inst.Force = c.Bool("force") |
| inst.ResolveAllFiles = c.Bool("all-dependencies") |
| inst.ResolveTest = !c.Bool("skip-test") |
| packages := []string(c.Args()) |
| insecure := c.Bool("insecure") |
| action.Get(packages, inst, insecure, c.Bool("no-recursive"), c.Bool("strip-vendor"), c.Bool("non-interactive"), c.Bool("test")) |
| return nil |
| }, |
| }, |
| { |
| Name: "remove", |
| ShortName: "rm", |
| Usage: "Remove a package from the glide.yaml file, and regenerate the lock file.", |
| Description: `This takes one or more package names, and removes references from the glide.yaml file. |
| This will rebuild the glide lock file re-resolving the depencies.`, |
| Flags: []cli.Flag{ |
| cli.BoolFlag{ |
| Name: "delete,d", |
| Usage: "Also delete from vendor/ any packages that are no longer used.", |
| }, |
| }, |
| Action: func(c *cli.Context) error { |
| if len(c.Args()) < 1 { |
| fmt.Println("Oops! At least one package name is required.") |
| os.Exit(1) |
| } |
| |
| if c.Bool("delete") { |
| // FIXME: Implement this in the installer. |
| fmt.Println("Delete is not currently implemented.") |
| } |
| inst := repo.NewInstaller() |
| inst.Force = c.Bool("force") |
| packages := []string(c.Args()) |
| action.Remove(packages, inst) |
| return nil |
| }, |
| }, |
| { |
| Name: "import", |
| Usage: "Import files from other dependency management systems.", |
| Subcommands: []cli.Command{ |
| { |
| Name: "godep", |
| Usage: "Import Godep's Godeps.json files and display the would-be yaml file", |
| Flags: []cli.Flag{ |
| cli.StringFlag{ |
| Name: "file, f", |
| Usage: "Save all of the discovered dependencies to a Glide YAML file.", |
| }, |
| }, |
| Action: func(c *cli.Context) error { |
| action.ImportGodep(c.String("file")) |
| return nil |
| }, |
| }, |
| { |
| Name: "gpm", |
| Usage: "Import GPM's Godeps and Godeps-Git files and display the would-be yaml file", |
| Flags: []cli.Flag{ |
| cli.StringFlag{ |
| Name: "file, f", |
| Usage: "Save all of the discovered dependencies to a Glide YAML file.", |
| }, |
| }, |
| Action: func(c *cli.Context) error { |
| action.ImportGPM(c.String("file")) |
| return nil |
| }, |
| }, |
| { |
| Name: "gb", |
| Usage: "Import gb's manifest file and display the would-be yaml file", |
| Flags: []cli.Flag{ |
| cli.StringFlag{ |
| Name: "file, f", |
| Usage: "Save all of the discovered dependencies to a Glide YAML file.", |
| }, |
| }, |
| Action: func(c *cli.Context) error { |
| action.ImportGB(c.String("file")) |
| return nil |
| }, |
| }, |
| { |
| Name: "gom", |
| Usage: "Import Gomfile and display the would-be yaml file", |
| Flags: []cli.Flag{ |
| cli.StringFlag{ |
| Name: "file, f", |
| Usage: "Save all of the discovered dependencies to a Glide YAML file.", |
| }, |
| }, |
| Action: func(c *cli.Context) error { |
| action.ImportGom(c.String("file")) |
| return nil |
| }, |
| }, |
| }, |
| }, |
| { |
| Name: "name", |
| Usage: "Print the name of this project.", |
| Description: `Read the glide.yaml file and print the name given on the 'package' line.`, |
| Action: func(c *cli.Context) error { |
| action.Name() |
| return nil |
| }, |
| }, |
| { |
| Name: "novendor", |
| ShortName: "nv", |
| Usage: "List all non-vendor paths in a directory.", |
| Description: `Given a directory, list all the relevant Go paths that are not vendored. |
| |
| Example: |
| $ go test $(glide novendor)`, |
| Flags: []cli.Flag{ |
| cli.StringFlag{ |
| Name: "dir,d", |
| Usage: "Specify a directory to run novendor against.", |
| Value: ".", |
| }, |
| cli.BoolFlag{ |
| Name: "no-subdir,x", |
| Usage: "Specify this to prevent nv from append '/...' to all directories.", |
| }, |
| }, |
| Action: func(c *cli.Context) error { |
| action.NoVendor(c.String("dir"), true, !c.Bool("no-subdir")) |
| return nil |
| }, |
| }, |
| { |
| Name: "rebuild", |
| Usage: "Rebuild ('go build') the dependencies", |
| Description: `(Deprecated) This rebuilds the packages' '.a' files. On some systems |
| this can improve performance on subsequent 'go run' and 'go build' calls.`, |
| Action: func(c *cli.Context) error { |
| action.Rebuild() |
| return nil |
| }, |
| }, |
| { |
| Name: "install", |
| ShortName: "i", |
| Usage: "Install a project's dependencies", |
| Description: `This uses the native VCS of each packages to install |
| the appropriate version. There are two ways a projects dependencies can |
| be installed. When there is a glide.yaml file defining the dependencies but |
| no lock file (glide.lock) the dependencies are installed using the "update" |
| command and a glide.lock file is generated pinning all dependencies. If a |
| glide.lock file is already present the dependencies are installed or updated |
| from the lock file.`, |
| Flags: []cli.Flag{ |
| cli.BoolFlag{ |
| Name: "delete", |
| Usage: "Delete vendor packages not specified in config.", |
| Hidden: true, |
| }, |
| cli.BoolFlag{ |
| Name: "force", |
| Usage: "If there was a change in the repo or VCS switch to new one. Warning: changes will be lost.", |
| }, |
| cli.BoolFlag{ |
| Name: "update-vendored, u", |
| Usage: "Update vendored packages (without local VCS repo). Warning: this may destroy local modifications to vendor/.", |
| Hidden: true, |
| }, |
| cli.StringFlag{ |
| Name: "file, f", |
| Usage: "Save all of the discovered dependencies to a Glide YAML file. (DEPRECATED: This has no impact.)", |
| Hidden: true, |
| }, |
| cli.BoolFlag{ |
| Name: "cache", |
| Usage: "When downloading dependencies attempt to cache them.", |
| Hidden: true, |
| }, |
| cli.BoolFlag{ |
| Name: "cache-gopath", |
| Usage: "When downloading dependencies attempt to put them in the GOPATH, too.", |
| Hidden: true, |
| }, |
| cli.BoolFlag{ |
| Name: "use-gopath", |
| Usage: "Copy dependencies from the GOPATH if they exist there.", |
| Hidden: true, |
| }, |
| cli.BoolFlag{ |
| Name: "strip-vcs, s", |
| Usage: "Removes version control metadata (e.g, .git directory) from the vendor folder.", |
| Hidden: true, |
| }, |
| cli.BoolFlag{ |
| Name: "strip-vendor, v", |
| Usage: "Removes nested vendor and Godeps/_workspace directories.", |
| }, |
| cli.BoolFlag{ |
| Name: "skip-test", |
| Usage: "Resolve dependencies in test files.", |
| }, |
| }, |
| Action: func(c *cli.Context) error { |
| if c.Bool("delete") { |
| msg.Warn("The --delete flag is deprecated. This now works by default.") |
| } |
| if c.Bool("update-vendored") { |
| msg.Warn("The --update-vendored flag is deprecated. This now works by default.") |
| } |
| if c.String("file") != "" { |
| msg.Warn("The --flag flag is deprecated.") |
| } |
| if c.Bool("cache") { |
| msg.Warn("The --cache flag is deprecated. This now works by default.") |
| } |
| if c.Bool("cache-gopath") { |
| msg.Warn("The --cache-gopath flag is deprecated.") |
| } |
| if c.Bool("use-gopath") { |
| msg.Warn("The --use-gopath flag is deprecated. Please see overrides.") |
| } |
| if c.Bool("strip-vcs") { |
| msg.Warn("The --strip-vcs flag is deprecated. This now works by default.") |
| } |
| |
| installer := repo.NewInstaller() |
| installer.Force = c.Bool("force") |
| installer.Home = c.GlobalString("home") |
| installer.ResolveTest = !c.Bool("skip-test") |
| |
| action.Install(installer, c.Bool("strip-vendor")) |
| return nil |
| }, |
| }, |
| { |
| Name: "update", |
| ShortName: "up", |
| Usage: "Update a project's dependencies", |
| Description: `This updates the dependencies by scanning the codebase |
| to determine the needed dependencies and fetching them following the rules |
| in the glide.yaml file. When no rules exist the tip of the default branch |
| is used. For more details see https://glide.sh/docs/glide.yaml |
| |
| If a dependency has a glide.yaml file, update will read that file and |
| use the information contained there. Those dependencies are maintained in |
| the top level 'vendor/' directory. 'vendor/foo/bar' will have its |
| dependencies stored in 'vendor/'. This behavior can be disabled with |
| '--no-recursive'. When this behavior is skipped a glide.lock file is not |
| generated because the full dependency tree cannot be known. |
| |
| Glide will also import Godep, GB, GOM, and GPM files as it finds them in dependencies. |
| It will create a glide.yaml file from the Godeps data, and then update. This |
| has no effect if '--no-recursive' is set. |
| |
| The '--strip-vendor' flag will remove any nested 'vendor' folders and |
| 'Godeps/_workspace' folders after an update (along with undoing any Godep |
| import rewriting). Note, the Godeps specific functionality is deprecated and |
| will be removed when most Godeps users have migrated to using the vendor |
| folder.`, |
| Flags: []cli.Flag{ |
| cli.BoolFlag{ |
| Name: "delete", |
| Usage: "Delete vendor packages not specified in config.", |
| Hidden: true, |
| }, |
| cli.BoolFlag{ |
| Name: "no-recursive, quick", |
| Usage: "Disable updating dependencies' dependencies. Only update things in glide.yaml.", |
| }, |
| cli.BoolFlag{ |
| Name: "force", |
| Usage: "If there was a change in the repo or VCS switch to new one. Warning, changes will be lost.", |
| }, |
| cli.BoolFlag{ |
| Name: "all-dependencies", |
| Usage: "This will resolve all dependencies for all packages, not just those directly used.", |
| }, |
| cli.BoolFlag{ |
| Name: "update-vendored, u", |
| Usage: "Update vendored packages (without local VCS repo). Warning, changes will be lost.", |
| Hidden: true, |
| }, |
| cli.StringFlag{ |
| Name: "file, f", |
| Usage: "Save all of the discovered dependencies to a Glide YAML file.", |
| Hidden: true, |
| }, |
| cli.BoolFlag{ |
| Name: "cache", |
| Usage: "When downloading dependencies attempt to cache them.", |
| Hidden: true, |
| }, |
| cli.BoolFlag{ |
| Name: "cache-gopath", |
| Usage: "When downloading dependencies attempt to put them in the GOPATH, too.", |
| Hidden: true, |
| }, |
| cli.BoolFlag{ |
| Name: "use-gopath", |
| Usage: "Copy dependencies from the GOPATH if they exist there.", |
| Hidden: true, |
| }, |
| cli.BoolFlag{ |
| Name: "resolve-current", |
| Usage: "Resolve dependencies for only the current system rather than all build modes.", |
| }, |
| cli.BoolFlag{ |
| Name: "strip-vcs, s", |
| Usage: "Removes version control metadata (e.g, .git directory) from the vendor folder.", |
| Hidden: true, |
| }, |
| cli.BoolFlag{ |
| Name: "strip-vendor, v", |
| Usage: "Removes nested vendor and Godeps/_workspace directories.", |
| }, |
| cli.BoolFlag{ |
| Name: "skip-test", |
| Usage: "Resolve dependencies in test files.", |
| }, |
| }, |
| Action: func(c *cli.Context) error { |
| if c.Bool("delete") { |
| msg.Warn("The --delete flag is deprecated. This now works by default.") |
| } |
| if c.Bool("update-vendored") { |
| msg.Warn("The --update-vendored flag is deprecated. This now works by default.") |
| } |
| if c.String("file") != "" { |
| msg.Warn("The --flag flag is deprecated.") |
| } |
| if c.Bool("cache") { |
| msg.Warn("The --cache flag is deprecated. This now works by default.") |
| } |
| if c.Bool("cache-gopath") { |
| msg.Warn("The --cache-gopath flag is deprecated.") |
| } |
| if c.Bool("use-gopath") { |
| msg.Warn("The --use-gopath flag is deprecated. Please see overrides.") |
| } |
| if c.Bool("strip-vcs") { |
| msg.Warn("The --strip-vcs flag is deprecated. This now works by default.") |
| } |
| |
| if c.Bool("resolve-current") { |
| util.ResolveCurrent = true |
| msg.Warn("Only resolving dependencies for the current OS/Arch") |
| } |
| |
| installer := repo.NewInstaller() |
| installer.Force = c.Bool("force") |
| installer.ResolveAllFiles = c.Bool("all-dependencies") |
| installer.Home = c.GlobalString("home") |
| installer.ResolveTest = !c.Bool("skip-test") |
| |
| action.Update(installer, c.Bool("no-recursive"), c.Bool("strip-vendor")) |
| |
| return nil |
| }, |
| }, |
| { |
| Name: "tree", |
| Usage: "(Deprecated) Tree prints the dependencies of this project as a tree.", |
| Description: `This scans a project's source files and builds a tree |
| representation of the import graph. |
| |
| It ignores testdata/ and directories that begin with . or _. Packages in |
| vendor/ are only included if they are referenced by the main project or |
| one of its dependencies. |
| |
| Note, for large projects this can display a large list tens of thousands of |
| lines long.`, |
| Action: func(c *cli.Context) error { |
| action.Tree(".", false) |
| return nil |
| }, |
| }, |
| { |
| Name: "list", |
| Usage: "List prints all dependencies that the present code references.", |
| Description: `List scans your code and lists all of the packages that are used. |
| |
| It does not use the glide.yaml. Instead, it inspects the code to determine what packages are |
| imported. |
| |
| Directories that begin with . or _ are ignored, as are testdata directories. Packages in |
| vendor are only included if they are used by the project.`, |
| Action: func(c *cli.Context) error { |
| action.List(".", true, c.String("output")) |
| return nil |
| }, |
| Flags: []cli.Flag{ |
| cli.StringFlag{ |
| Name: "output, o", |
| Usage: "Output format. One of: json|json-pretty|text", |
| Value: "text", |
| }, |
| }, |
| }, |
| { |
| Name: "info", |
| Usage: "Info prints information about this project", |
| Flags: []cli.Flag{ |
| cli.StringFlag{ |
| Name: "format, f", |
| Usage: `Format of the information wanted (required).`, |
| }, |
| }, |
| Description: `A format containing the text with replacement variables |
| has to be passed in. Those variables are: |
| |
| %n - name |
| %d - description |
| %h - homepage |
| %l - license |
| |
| For example, given a project with the following glide.yaml: |
| |
| package: foo |
| homepage: https://example.com |
| license: MIT |
| description: Some example description |
| |
| Then running the following commands: |
| |
| glide info -f %n |
| prints 'foo' |
| |
| glide info -f "License: %l" |
| prints 'License: MIT' |
| |
| glide info -f "%n - %d - %h - %l" |
| prints 'foo - Some example description - https://example.com - MIT'`, |
| Action: func(c *cli.Context) error { |
| if c.IsSet("format") { |
| action.Info(c.String("format")) |
| } else { |
| cli.ShowCommandHelp(c, c.Command.Name) |
| } |
| return nil |
| }, |
| }, |
| { |
| Name: "cache-clear", |
| ShortName: "cc", |
| Usage: "Clears the Glide cache.", |
| Action: func(c *cli.Context) error { |
| action.CacheClear() |
| return nil |
| }, |
| }, |
| { |
| Name: "about", |
| Usage: "Learn about Glide", |
| Action: func(c *cli.Context) error { |
| action.About() |
| return nil |
| }, |
| }, |
| { |
| Name: "mirror", |
| Usage: "Manage mirrors", |
| Description: `Mirrors provide the ability to replace a repo location with |
| another location that's a mirror of the original. This is useful when you want |
| to have a cache for your continuous integration (CI) system or if you want to |
| work on a dependency in a local location. |
| |
| The mirrors are stored in an mirrors.yaml file in your GLIDE_HOME. |
| |
| The three commands to manager mirrors are 'list', 'set', and 'remove'. |
| |
| Use 'set' in the form: |
| |
| glide mirror set [original] [replacement] |
| |
| or |
| |
| glide mirror set [original] [replacement] --vcs [type] |
| |
| for example, |
| |
| glide mirror set https://github.com/example/foo https://git.example.com/example/foo.git |
| |
| glide mirror set https://github.com/example/foo file:///path/to/local/repo --vcs git |
| |
| Use 'remove' in the form: |
| |
| glide mirror remove [original] |
| |
| for example, |
| |
| glide mirror remove https://github.com/example/foo`, |
| Subcommands: []cli.Command{ |
| { |
| Name: "list", |
| Usage: "List the current mirrors", |
| Action: func(c *cli.Context) error { |
| return action.MirrorsList() |
| }, |
| }, |
| { |
| Name: "set", |
| Usage: "Set a mirror. This overwrites an existing entry if one exists", |
| Description: `Use 'set' in the form: |
| |
| glide mirror set [original] [replacement] |
| |
| or |
| |
| glide mirror set [original] [replacement] --vcs [type] |
| |
| for example, |
| |
| glide mirror set https://github.com/example/foo https://git.example.com/example/foo.git |
| |
| glide mirror set https://github.com/example/foo file:///path/to/local/repo --vcs git`, |
| Flags: []cli.Flag{ |
| cli.StringFlag{ |
| Name: "vcs", |
| Usage: "The VCS type to use. Autodiscovery is attempted when not supplied. Can be one of git, svn, bzr, or hg", |
| }, |
| }, |
| Action: func(c *cli.Context) error { |
| return action.MirrorsSet(c.Args().Get(0), c.Args().Get(1), c.String("vcs")) |
| }, |
| }, |
| { |
| Name: "remove", |
| ShortName: "rm", |
| Usage: "Remove an mirror", |
| Description: `Use 'remove' in the form: |
| |
| glide mirror remove [original] |
| |
| for example, |
| |
| glide mirror remove https://github.com/example/foo`, |
| Action: func(c *cli.Context) error { |
| return action.MirrorsRemove(c.Args().Get(0)) |
| }, |
| }, |
| }, |
| }, |
| } |
| } |
| |
| // startup sets up the base environment. |
| // |
| // It does not assume the presence of a Glide.yaml file or vendor/ directory, |
| // so it can be used by any Glide command. |
| func startup(c *cli.Context) error { |
| action.Debug(c.Bool("debug")) |
| action.NoColor(c.Bool("no-color")) |
| action.Quiet(c.Bool("quiet")) |
| action.Init(c.String("yaml"), c.String("home")) |
| action.EnsureGoVendor() |
| gpath.Tmp = c.String("tmp") |
| return nil |
| } |
| |
| func shutdown(c *cli.Context) error { |
| cache.SystemUnlock() |
| return nil |
| } |
| |
| // Get the path to the glide.yaml file. |
| // |
| // This returns the name of the path, even if the file does not exist. The value |
| // may be set by the user, or it may be the default. |
| func glidefile(c *cli.Context) string { |
| path := c.String("file") |
| if path == "" { |
| // For now, we construct a basic assumption. In the future, we could |
| // traverse backward to see if a glide.yaml exists in a parent. |
| path = "./glide.yaml" |
| } |
| a, err := filepath.Abs(path) |
| if err != nil { |
| // Underlying fs didn't provide working dir. |
| return path |
| } |
| return a |
| } |