Allow for plain revs in solver solutions
diff --git a/action/install.go b/action/install.go
index 2248460..a719cc0 100644
--- a/action/install.go
+++ b/action/install.go
@@ -182,7 +182,12 @@
if gw.lock == nil {
writeLock, writeVendor = true, true
} else {
- rlf := cfg.LockfileFromSolverLock(gw.resultLock)
+ rlf, err := cfg.LockfileFromSolverLock(gw.resultLock)
+ // This err really shouldn't occur, but could if we get an unpaired
+ // version back from gps somehow
+ if err != nil {
+ return err
+ }
if !locksAreEquivalent(rlf, gw.lock) {
writeLock, writeVendor = true, true
}
@@ -228,7 +233,12 @@
return fmt.Errorf("Failed to write glide lock file: %s", err)
}
} else {
- rlf := cfg.LockfileFromSolverLock(gw.resultLock)
+ rlf, err := cfg.LockfileFromSolverLock(gw.resultLock)
+ // As with above, this case really shouldn't get hit unless there's
+ // a bug in gps, or guarantees change
+ if err != nil {
+ return err
+ }
if err := rlf.WriteFile(filepath.Join(td, gpath.LockFile)); err != nil {
return fmt.Errorf("Failed to write glide lock file: %s", err)
}
diff --git a/cfg/lock.go b/cfg/lock.go
index 0d91363..89f6e19 100644
--- a/cfg/lock.go
+++ b/cfg/lock.go
@@ -23,9 +23,9 @@
}
// LockfileFromSolverLock transforms a gps.Lock into a glide *Lockfile.
-func LockfileFromSolverLock(r gps.Lock) *Lockfile {
+func LockfileFromSolverLock(r gps.Lock) (*Lockfile, error) {
if r == nil {
- return nil
+ return nil, fmt.Errorf("no gps lock data provided to transform")
}
// Create and write out a new lock file from the result
@@ -50,18 +50,26 @@
//
// TODO might still be better to check and return out with an err if
// not, though
- l.Revision = v.(gps.PairedVersion).Underlying().String()
- switch v.Type() {
- case "branch":
- l.Branch = v.String()
- case "semver", "version":
- l.Version = v.String()
+ switch tv := v.(type) {
+ case gps.Revision:
+ l.Revision = tv.String()
+ case gps.PairedVersion:
+ l.Revision = v.(gps.PairedVersion).Underlying().String()
+ switch v.Type() {
+ case "branch":
+ l.Branch = v.String()
+ case "semver", "version":
+ l.Version = v.String()
+ }
+ case gps.UnpairedVersion:
+ // this should not be possible - error if we hit it
+ return nil, fmt.Errorf("should not be possible - gps returned an unpaired version for %s", pi)
}
lf.Imports = append(lf.Imports, l)
}
- return lf
+ return lf, nil
}
// LockfileFromYaml returns an instance of Lockfile from YAML