devtools/{depotview,hackdoc}: tie both together
Change-Id: I0a1ca3b4fa0e0a074eccbe0f8748839b926db9c1
diff --git a/devtools/depotview/service/gerrit.go b/devtools/depotview/service/gerrit.go
new file mode 100644
index 0000000..7dab9e6
--- /dev/null
+++ b/devtools/depotview/service/gerrit.go
@@ -0,0 +1,56 @@
+package service
+
+import (
+ "strconv"
+ "strings"
+)
+
+type gerritMeta struct {
+ patchSet int64
+ changeId string
+ commit string
+}
+
+// parseGerritMetadata takes a NoteDB metadata entry and extracts info from it.
+func parseGerritMetadata(messages []string) *gerritMeta {
+ meta := &gerritMeta{}
+
+ for _, message := range messages {
+ for _, line := range strings.Split(message, "\n") {
+ line = strings.TrimSpace(line)
+ if len(line) == 0 {
+ continue
+ }
+
+ parts := strings.SplitN(line, ":", 2)
+ if len(parts) < 2 {
+ continue
+ }
+ k, v := parts[0], strings.TrimSpace(parts[1])
+
+ switch k {
+ case "Patch-set":
+ n, err := strconv.ParseInt(v, 10, 64)
+ if err != nil {
+ continue
+ }
+ meta.patchSet = n
+ case "Change-id":
+ meta.changeId = v
+ case "Commit":
+ meta.commit = v
+ }
+ }
+ }
+
+ if meta.patchSet == 0 {
+ return nil
+ }
+ if meta.changeId == "" {
+ return nil
+ }
+ if meta.commit == "" {
+ return nil
+ }
+ return meta
+}