Milo Swarmbucket: Use got_revision as revision

The intended effect is that this gets placed in the revision field, which would then become indexed for console view.

BUG=468053

Review-Url: https://codereview.chromium.org/2984143002
diff --git a/milo/buildsource/rawpresentation/logDogBuild.go b/milo/buildsource/rawpresentation/logDogBuild.go
index c4a3de6..668c66d 100644
--- a/milo/buildsource/rawpresentation/logDogBuild.go
+++ b/milo/buildsource/rawpresentation/logDogBuild.go
@@ -15,6 +15,7 @@
 package rawpresentation
 
 import (
+	"encoding/json"
 	"fmt"
 	"time"
 
@@ -205,6 +206,7 @@
 	// TODO(hinoka): This is totes cachable.
 	buildCompletedTime := google.TimeFromProto(mainAnno.Ended)
 	build.Summary = *(miloBuildStep(ub, mainAnno, true, buildCompletedTime, now)[0])
+	propMap := map[string]string{}
 	for _, substepContainer := range mainAnno.Substep {
 		anno := substepContainer.GetStep()
 		if anno == nil {
@@ -225,6 +227,7 @@
 					Key:   prop.Name,
 					Value: prop.Value,
 				})
+				propMap[prop.Name] = prop.Value
 			}
 			build.PropertyGroup = append(build.PropertyGroup, propGroup)
 		}
@@ -237,8 +240,23 @@
 			Key:   prop.Name,
 			Value: prop.Value,
 		})
+		propMap[prop.Name] = prop.Value
 	}
 	build.PropertyGroup = append(build.PropertyGroup, propGroup)
 
+	// HACK(hinoka,iannucci): Extract revision out of properties.
+	if jrev, ok := propMap["got_revision"]; ok {
+		// got_revision is a json string, so it looks like "aaaaaabbcc123..."
+		var rev string
+		err := json.Unmarshal([]byte(jrev), &rev)
+		if err == nil {
+			if build.SourceStamp == nil {
+				build.SourceStamp = &resp.SourceStamp{}
+			}
+			build.SourceStamp.Revision = resp.NewLink(
+				rev, fmt.Sprintf("https://crrev.com/%s", rev))
+		}
+	}
+
 	return
 }