Simplify lockfile unmarshalling

Change-Id: I8ea05f8be97a8a4388f573e1f1e08118fc317c17
Reviewed-on: https://fuchsia-review.googlesource.com/c/jiri/+/557441
Reviewed-by: Nathan Mulcahey <nmulcahey@google.com>
Commit-Queue: Auto-Submit <auto-submit@fuchsia-infra.iam.gserviceaccount.com>
Fuchsia-Auto-Submit: Tamir Duberstein <tamird@google.com>
diff --git a/project/project.go b/project/project.go
index 03691c8..aee8bb3 100644
--- a/project/project.go
+++ b/project/project.go
@@ -438,58 +438,35 @@
 // UnmarshalLockEntries unmarshals project locks and package locks from
 // jsonData.
 func UnmarshalLockEntries(jsonData []byte) (ProjectLocks, PackageLocks, error) {
-	entries := make([]interface{}, 0)
 	projectLocks := make(ProjectLocks)
 	pkgLocks := make(PackageLocks)
+	var entries []map[string]string
 	if err := json.Unmarshal(jsonData, &entries); err != nil {
 		return nil, nil, err
 	}
 	for _, entry := range entries {
-		entryMap := entry.(map[string]interface{})
-		if _, ok := entryMap["package"]; ok {
-			pkgName, ok := entryMap["package"].(string)
-			if !ok {
-				return nil, nil, fmt.Errorf("package name %+v is not a valid string", entryMap["package"])
-			}
-			id, ok := entryMap["instance_id"].(string)
-			if !ok {
-				return nil, nil, fmt.Errorf("package instance_id %+v is not a valid string", entryMap["instance_id"])
-			}
-			version, ok := entryMap["version"].(string)
-			if !ok {
-				return nil, nil, fmt.Errorf("package version %+v is not a valid string", entryMap["version"])
-			}
-			localPath, ok := entryMap["path"].(string)
+		if pkgName, ok := entry["package"]; ok {
 			pkgLock := PackageLock{
 				PackageName: pkgName,
-				VersionTag:  version,
-				InstanceID:  id,
-				LocalPath:   localPath,
+				VersionTag:  entry["version"],
+				InstanceID:  entry["instance_id"],
+				LocalPath:   entry["path"],
 			}
 			if v, ok := pkgLocks[pkgLock.Key()]; ok {
 				if v != pkgLock {
-					return nil, nil, fmt.Errorf("package %q has more than 1 version lock %q, %q", pkgName, v.InstanceID, id)
+					return nil, nil, fmt.Errorf("package %q has more than 1 version lock %q, %q", pkgName, v.InstanceID, pkgLock.InstanceID)
 				}
 			}
 			pkgLocks[pkgLock.Key()] = pkgLock
-		} else if _, ok := entryMap["repository_url"]; ok {
-			repoURL, ok := entryMap["repository_url"].(string)
-			if !ok {
-				return nil, nil, fmt.Errorf("project repository url %+v is not a valid string", entryMap["repository_url"])
+		} else if repoURL, ok := entry["repository_url"]; ok {
+			projectLock := ProjectLock{
+				Remote:   repoURL,
+				Name:     entry["name"],
+				Revision: entry["revision"],
 			}
-			revision, ok := entryMap["revision"].(string)
-			if !ok {
-				return nil, nil, fmt.Errorf("project revision %+v is not a valid string", entryMap["revision"])
-			}
-			name, ok := entryMap["name"].(string)
-			if !ok {
-				return nil, nil, fmt.Errorf("project name %+v is not a valid string", entryMap["name"])
-			}
-
-			projectLock := ProjectLock{repoURL, name, revision}
 			if v, ok := projectLocks[projectLock.Key()]; ok {
 				if v != projectLock {
-					return nil, nil, fmt.Errorf("package %q has more than 1 revision lock %q, %q", repoURL, v.Revision, revision)
+					return nil, nil, fmt.Errorf("package %q has more than 1 revision lock %q, %q", repoURL, v.Revision, projectLock.Revision)
 				}
 			}
 			projectLocks[projectLock.Key()] = projectLock