diff --git a/hell b/hell new file mode 100644 index 0000000000000000000000000000000000000000..392907b3a74800038d60cc899e866c97f0afc28d --- /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 8fe7fdb9ee299488204c8a9dda55a9b7542ce2dc..715cb5522ca5a98143a45edf7e9ec49517b6778d 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 168ce0da7d7336a907d66c930772df3df627294f..6736e496f29cb335239c8553117f13df355f588d 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) }, }