func runTest(ctx *cli.Context) { if err := setup(ctx); err != nil { errors.SetError(err) return } if err := linkVendors(ctx, ""); err != nil { errors.SetError(err) return } log.Info("Testing...") cmdArgs := []string{"go", "test"} if len(ctx.String("tags")) > 0 { cmdArgs = append(cmdArgs, "-tags") cmdArgs = append(cmdArgs, ctx.String("tags")) } if ctx.IsSet("verbose") { cmdArgs = append(cmdArgs, "-v") } cmdArgs = append(cmdArgs, ctx.Args()...) if err := execCmd(setting.DefaultVendor, setting.WorkDir, cmdArgs...); err != nil { errors.SetError(fmt.Errorf("fail to run program: %v", err)) return } log.Info("Command executed successfully!") }
func runTest(ctx *cli.Context) { if err := setup(ctx); err != nil { errors.SetError(err) return } os.RemoveAll(setting.DefaultVendor) if !setting.Debug { defer os.RemoveAll(setting.DefaultVendor) } if err := linkVendors(ctx, ""); err != nil { errors.SetError(err) return } log.Info("Testing...") cmdArgs := []string{"go", "test"} cmdArgs = append(cmdArgs, ctx.Args()...) if err := execCmd(setting.DefaultVendor, setting.WorkDir, cmdArgs...); err != nil { errors.SetError(fmt.Errorf("fail to run program: %v", err)) return } log.Info("Command executed successfully!") }
func getByPaths(ctx *cli.Context) error { nodes := make([]*doc.Node, 0, len(ctx.Args())) for _, info := range ctx.Args() { pkgPath := info n := doc.NewNode(pkgPath, doc.BRANCH, "", !ctx.Bool("download")) if i := strings.Index(info, "@"); i > -1 { pkgPath = info[:i] tp, val, err := validPkgInfo(info[i+1:]) if err != nil { return err } n = doc.NewNode(pkgPath, tp, val, !ctx.Bool("download")) } // Check package name. if !strings.Contains(pkgPath, "/") { tmpPath, err := setting.GetPkgFullPath(pkgPath) if err != nil { return err } if tmpPath != pkgPath { n = doc.NewNode(tmpPath, n.Type, n.Value, n.IsGetDeps) } } nodes = append(nodes, n) } return getPackages(".", ctx, nodes) }
func runConfigUnset(ctx *cli.Context) { if err := setup(ctx); err != nil { errors.SetError(err) return } if len(ctx.Args()) != 1 { errors.SetError(fmt.Errorf("Incorrect number of arguments for command: should have 1")) return } var err error switch ctx.Args().First() { case "proxy": err = setting.DeleteConfigOption("settings", "HTTP_PROXY") case "github": if err = setting.DeleteConfigOption("github", "CLIENT_ID"); err != nil { errors.SetError(err) return } err = setting.DeleteConfigOption("github", "CLIENT_SECRET") } if err != nil { errors.SetError(err) return } }
func runBuild(ctx *cli.Context) { if err := setup(ctx); err != nil { errors.SetError(err) return } if err := buildBinary(ctx, ctx.Args()...); err != nil { errors.SetError(err) return } log.Info("Command executed successfully!") }
func runConfigSetProxy(ctx *cli.Context) { if err := setup(ctx); err != nil { errors.SetError(err) return } if len(ctx.Args()) != 1 { errors.SetError(fmt.Errorf("Incorrect number of arguments for command: should have 1")) return } if err := setting.SetConfigValue("settings", "HTTP_PROXY", ctx.Args().First()); err != nil { errors.SetError(err) return } }
func runBuild(ctx *cli.Context) { if err := setup(ctx); err != nil { errors.SetError(err) return } os.RemoveAll(setting.DefaultVendor) if !setting.Debug { defer os.RemoveAll(setting.DefaultVendor) } if err := buildBinary(ctx, ctx.Args()...); err != nil { errors.SetError(err) return } log.Info("Command executed successfully!") }
func runConfigGet(ctx *cli.Context) { if err := setup(ctx); err != nil { errors.SetError(err) return } if len(ctx.Args()) != 1 { errors.SetError(fmt.Errorf("Incorrect number of arguments for command: should have 1")) return } switch ctx.Args().First() { case "proxy": fmt.Printf("[%s]\n", "settings") showSettingString("settings", "HTTP_PROXY") case "github": fmt.Printf("[%s]\n", "github") showSettingString("github", "CLIENT_ID") showSettingString("github", "CLIENT_SECRET") } }
func runGet(ctx *cli.Context) { if err := setup(ctx); err != nil { errors.SetError(err) return } // Check option conflicts. hasConflict := false names := "" switch { case ctx.Bool("local") && ctx.Bool("gopath"): hasConflict = true names = "'--local, -l' and '--gopath, -g'" case ctx.Bool("local") && ctx.Bool("remote"): hasConflict = true names = "'--local, -l' and '--remote, -r'" case ctx.Bool("gopath") && ctx.Bool("remote"): hasConflict = true names = "'--gopath, -g' and '--remote, -r'" } if hasConflict { errors.SetError(fmt.Errorf("Command options have conflicts: %s", names)) return } var err error // Check number of arguments to decide which function to call. if len(ctx.Args()) == 0 { if ctx.Bool("download") { errors.SetError(fmt.Errorf("Not enough arguments for option: '--download, -d'")) return } err = getByGopmfile(ctx) } else { err = getByPaths(ctx) } if err != nil { errors.SetError(err) } }
func runGet(ctx *cli.Context) { if err := setup(ctx); err != nil { errors.SetError(err) return } // Check option conflicts. hasConflict := false names := "" switch { case ctx.Bool("local") && ctx.Bool("gopath"): hasConflict = true names = "'--local, -l' and '--gopath, -g'" case ctx.Bool("local") && ctx.Bool("remote"): hasConflict = true names = "'--local, -l' and '--remote, -r'" case ctx.Bool("gopath") && ctx.Bool("remote"): hasConflict = true names = "'--gopath, -g' and '--remote, -r'" } if hasConflict { errors.SetError(fmt.Errorf("Command options have conflicts: %s", names)) return } var err error // Check number of arguments to decide which function to call. if len(ctx.Args()) == 0 { if ctx.Bool("download") { errors.SetError(fmt.Errorf("Not enough arguments for option: '--download, -d'")) return } err = getByGopmfile(ctx) } else { err = getByPaths(ctx) } if err != nil { errors.SetError(err) return } if len(ctx.Args()) > 0 && ctx.Bool("save") { gf, _, err := parseGopmfile(setting.GOPMFILE) if err != nil { errors.SetError(err) return } for _, info := range ctx.Args() { if i := strings.Index(info, "@"); i > -1 { gf.SetValue("deps", info[:i], info[i+1:]) } else { gf.SetValue("deps", info, "") } } setting.SaveGopmfile(gf, setting.GOPMFILE) } }
func runConfigSetGitHub(ctx *cli.Context) { if err := setup(ctx); err != nil { errors.SetError(err) return } if len(ctx.Args()) != 2 { errors.SetError(fmt.Errorf("Incorrect number of arguments for command: should have 2")) return } if err := setting.SetConfigValue("github", "CLIENT_ID", ctx.Args().First()); err != nil { errors.SetError(err) return } if err := setting.SetConfigValue("github", "CLIENT_SECRET", ctx.Args().Get(1)); err != nil { errors.SetError(err) return } }
func runBin(ctx *cli.Context) { if err := setup(ctx); err != nil { errors.SetError(err) return } if len(ctx.Args()) != 1 { errors.SetError(fmt.Errorf("Incorrect number of arguments for command: should have 1")) return } // Check if given directory exists if specified. if ctx.IsSet("dir") && !base.IsDir(ctx.String("dir")) { errors.SetError(fmt.Errorf("Indicated path does not exist or not a directory")) return } // Parse package version. info := ctx.Args().First() pkgPath := info n := doc.NewNode(pkgPath, doc.BRANCH, "", true) if i := strings.Index(info, "@"); i > -1 { pkgPath = info[:i] var err error tp, val, err := validPkgInfo(info[i+1:]) if err != nil { errors.SetError(err) return } n = doc.NewNode(pkgPath, tp, val, !ctx.Bool("download")) } // Check package name. if !strings.Contains(pkgPath, "/") { tmpPath, err := setting.GetPkgFullPath(pkgPath) if err != nil { errors.SetError(err) return } if tmpPath != pkgPath { n = doc.NewNode(tmpPath, n.Type, n.Value, n.IsGetDeps) } } if err := downloadPackages(".", ctx, []*doc.Node{n}); err != nil { errors.SetError(err) return } // Check if previous steps were successful. if !n.IsExist() { errors.SetError(fmt.Errorf("Download steps weren't successful")) return } tmpVendor := path.Join("vendor", path.Base(n.RootPath)) os.RemoveAll(tmpVendor) os.RemoveAll(setting.VENDOR) // TODO: should use .gopm/temp path. if err := autoLink(n.InstallPath, tmpVendor); err != nil { errors.SetError(fmt.Errorf("Fail to link slef: %v", err)) return } os.Chdir(tmpVendor) oldWorkDir := setting.WorkDir setting.WorkDir = path.Join(setting.WorkDir, tmpVendor) if !setting.Debug { defer func() { os.Chdir(oldWorkDir) os.RemoveAll("vendor") os.RemoveAll(setting.VENDOR) }() } // if err := buildBinary(ctx); err != nil { // errors.SetError(err) // return // } if err := linkVendors(ctx, n.ImportPath); err != nil { errors.SetError(err) return } log.Info("Installing...") cmdArgs := []string{"go", "install"} if ctx.Bool("verbose") { cmdArgs = append(cmdArgs, "-v") } cmdArgs = append(cmdArgs, n.ImportPath) if err := execCmd(setting.DefaultVendor, setting.WorkDir, cmdArgs...); err != nil { errors.SetError(fmt.Errorf("fail to run program: %v", err)) return } gf, _, err := parseGopmfile(setting.GOPMFILE) if err != nil { errors.SetError(err) return } // Because build command moved binary to root path. binName := path.Base(n.RootPath) binPath := path.Join(setting.DefaultVendor, "bin", path.Base(n.RootPath)) if runtime.GOOS == "windows" { binName += ".exe" } // Move binary to given directory. movePath := oldWorkDir if ctx.IsSet("dir") { movePath = ctx.String("dir") } else if strings.HasPrefix(n.ImportPath, "code.google.com/p/go.tools/cmd/") { movePath = path.Join(runtime.GOROOT(), "pkg/tool", runtime.GOOS+"_"+runtime.GOARCH) log.Info("Command executed successfully!") fmt.Println("Binary has been built into: " + movePath) return } if !base.IsFile(binPath) { errors.SetError(fmt.Errorf("Previous steps weren't successful or the project does not contain main package")) return } if base.IsExist(path.Join(movePath, binName)) { if err := os.Remove(path.Join(movePath, binName)); err != nil { log.Warn("Cannot remove binary in work directory: %v", err) } } if err := os.Rename(binPath, movePath+"/"+binName); err != nil { errors.SetError(fmt.Errorf("Fail to move binary: %v", err)) return } os.Chmod(movePath+"/"+binName, os.ModePerm) includes := strings.Split(gf.MustValue("res", "include"), "|") if len(includes) > 0 { log.Info("Copying resources to %s", movePath) for _, include := range includes { if base.IsDir(include) { os.RemoveAll(path.Join(movePath, include)) if err := base.CopyDir(include, filepath.Join(movePath, include)); err != nil { errors.AppendError(errors.NewErrCopyResource(include)) } } } } log.Info("Command executed successfully!") fmt.Println("Binary has been built into: " + movePath) }