From 6ef60b6862bdfcc9dee7a684fb0a0c870bbee36d Mon Sep 17 00:00:00 2001
From: Silas Davis <silas@erisindustries.com>
Date: Thu, 26 Jan 2017 21:15:40 +0000
Subject: [PATCH] Include package in lock, and make sure everything installed

---
 hell                       |  3 +++
 util/hell/README.md        |  9 ++++++-
 util/hell/cmd/hell/main.go | 53 ++++++++++++++++++++++++--------------
 3 files changed, 45 insertions(+), 20 deletions(-)
 create mode 100644 hell

diff --git a/hell b/hell
new file mode 100644
index 00000000..392907b3
--- /dev/null
+++ b/hell
@@ -0,0 +1,3 @@
+#!/usr/bin/env bash
+
+go run ./util/hell/cmd/hell/main.go "$@"
\ No newline at end of file
diff --git a/util/hell/README.md b/util/hell/README.md
index 8fe7fdb9..715cb552 100644
--- a/util/hell/README.md
+++ b/util/hell/README.md
@@ -1,4 +1,11 @@
 > Hell is other people's packages
 
 While we wait for working package management in go we need a way to make
-maintaining the glide.lock by hand less painful.
\ No newline at end of file
+maintaining the glide.lock by hand less painful.
+
+To interactively add a package run from the root:
+
+```bash
+go run ./util/hell/cmd/hell/main.go get --interactive github.com/tendermint/tendermint
+```
+
diff --git a/util/hell/cmd/hell/main.go b/util/hell/cmd/hell/main.go
index 168ce0da..6736e496 100644
--- a/util/hell/cmd/hell/main.go
+++ b/util/hell/cmd/hell/main.go
@@ -74,37 +74,52 @@ func main() {
 			}
 			rootPackage, _ := util.NormalizeName(args[0])
 			// Add dependency to glide
-			action.Get(args, repo.NewInstaller(), false, true, false, !interactive, false)
+			installer := repo.NewInstaller()
+			action.Get(args, installer, false, true, false, !interactive, false)
 			// Now hunt down the repo cache
 			dep := action.EnsureConfig().Imports.Get(rootPackage)
+
 			key, err := cache.Key(dep.Remote())
 			if err != nil {
 				msg.Die("%s requires a single argument of the remote dependency\n", cmd.Name())
 			}
 			cacheDir := filepath.Join(cache.Location(), "src", key)
-
+			repos, err := dep.GetRepo(cacheDir)
+			if err != nil {
+				msg.Die("Could not get repo: %s", err)
+			}
+			version, err := repos.Version()
+			if err != nil {
+				msg.Die("Could not get version: %s", err)
+			}
+			dep.Pin = version
+			lockPath := filepath.Join(".", path.LockFile)
+			baseLockFile, err := cfg.ReadLockFile(lockPath)
+			if err != nil {
+				msg.Die("Could not read base lock file: %s", err)
+			}
+			overrideLockFile := &cfg.Lockfile{}
 			if path.HasLock(cacheDir) {
-				msg.Info("Found dependency lock file, merging into project lock file")
-				lockPath := filepath.Join(".", path.LockFile)
-				baseLockFile, err := cfg.ReadLockFile(lockPath)
-				if err != nil {
-					msg.Die("Could not read base lock file: %s", err)
-				}
-				overrideLockFile, err := cfg.ReadLockFile(filepath.Join(cacheDir, path.LockFile))
+				msg.Info("Found dependency lock file so merging into project lock file")
+				overrideLockFile, err = cfg.ReadLockFile(filepath.Join(cacheDir, path.LockFile))
 				if err != nil {
 					msg.Die("Could not read dependency lock file: %s", err)
 				}
-				mergedLockFile, err := hell.MergeGlideLockFiles(baseLockFile, overrideLockFile)
-				if err != nil {
-					msg.Die("Could not merge lock files: %s\n", err)
-				}
-				err = mergedLockFile.WriteFile(lockPath)
-				if err != nil {
-					msg.Die("Could not write merged lock file: %s", err)
-				}
-			} else {
-				msg.Info("Did not find dependency lock file, so nothing merged intoo project lock file")
 			}
+			// Add the package to glide lock too!
+			overrideLockFile.Imports = append(overrideLockFile.Imports, cfg.LockFromDependency(dep))
+
+			mergedLockFile, err := hell.MergeGlideLockFiles(baseLockFile, overrideLockFile)
+			fmt.Printf("%#v\n", mergedLockFile.Imports)
+			if err != nil {
+				msg.Die("Could not merge lock files: %s\n", err)
+			}
+			err = mergedLockFile.WriteFile(lockPath)
+			if err != nil {
+				msg.Die("Could not write merged lock file: %s", err)
+			}
+
+			action.Install(installer, false)
 		},
 	}
 
-- 
GitLab