// Add interactively prompts the user for details of a dependency, adds it to deps.json, and writes out the file func Add(deps dep.DependencyMap, name string) { var cont = true _, exists := deps.Map[name] if exists { util.Fatal(colors.Red("Dependency '" + name + "'' is already defined, pick another name.")) } util.Print(colors.Blue("Adding: ") + name) for cont { d := new(dep.Dependency) d.Type = promptType("Type", "git, git-clone, hg, bzr") if d.Type == dep.TypeGitClone { d.Repo = promptString("Repo", "git url") } else { d.Repo = promptString("Repo", "go import") } d.Version = promptString("Version", "hash, branch, or tag") if d.Type == dep.TypeGitClone { d.Alias = promptString("Alias", "where to install the repo") } deps.Map[name] = d cont = promptBool("Add another", "y/N") } for name, d := range deps.Map { err := d.SetupVCS(name) if err != nil { delete(deps.Map, name) } } err := deps.Write() if err != nil { util.Fatal(colors.Red("Error Writing " + deps.Path + ": " + err.Error())) } install.Install(deps) return }
// Update rewrites Dependency name in deps.json to use the last commit in branch as version func Update(deps dep.DependencyMap, name string, branch string) { util.Print(colors.Blue("Updating:")) d, ok := deps.Map[name] if !ok { util.Fatal(colors.Red("Dependency Name '" + name + "' not found in deps.json")) } // record the old version oldVersion := d.Version // temporarily use the branch d.Version = branch pwd := util.Pwd() util.Cd(d.Path()) d.VCS.Checkout(d) d.VCS.Update(d) // get the last commit on the newly checked out branch v, err := d.VCS.LastCommit(d, branch) if err != nil { util.Fatal(err) } // set the version to be the last commit d.Version = v util.PrintIndent(colors.Blue(name) + " (" + oldVersion + " --> " + d.Version + ")") util.Cd(pwd) deps.Map[name] = d deps.Write() install.Install(deps) }