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