Commit 1bdb788b authored by David Symonds's avatar David Symonds

misc/dashboard/codereview: record Message-ID of code review thread mails.

This will allow us to properly thread "R=..." mails at a later time.

R=golang-dev, r
CC=golang-dev
https://golang.org/cl/6135053
parent 5d331964
......@@ -47,6 +47,7 @@ type CL struct {
// Mail information.
Subject string `datastore:",noindex"`
Recipients []string `datastore:",noindex"`
LastMessageID string `datastore:",noindex"`
// These are person IDs (e.g. "rsc"); they may be empty
Author string
......@@ -193,6 +194,8 @@ func handleAssign(w http.ResponseWriter, r *http.Request) {
Subject: cl.Subject + " (issue " + n + ")",
Body: "R=" + rev + "\n\n(sent by gocodereview)",
}
// TODO(dsymonds): Use cl.LastMessageID as the In-Reply-To header
// when the appengine/mail package supports that.
sendMailLater.Call(c, msg)
}
}
......@@ -339,7 +342,8 @@ func updateCL(c appengine.Context, n string) error {
if err != nil && err != datastore.ErrNoSuchEntity {
return err
} else if err == nil {
// Reviewer is the only field that needs preserving.
// LastMessageID and Reviewer need preserving.
cl.LastMessageID = ocl.LastMessageID
cl.Reviewer = ocl.Reviewer
}
_, err = datastore.Put(c, key, cl)
......
......@@ -9,6 +9,7 @@ import (
"time"
"appengine"
"appengine/datastore"
)
func init() {
......@@ -35,6 +36,23 @@ func handleMail(w http.ResponseWriter, r *http.Request) {
}
c.Infof("Found issue %q", m[1])
// Track the MessageID.
key := datastore.NewKey(c, "CL", m[1], 0, nil)
err = datastore.RunInTransaction(c, func(c appengine.Context) error {
cl := new(CL)
err := datastore.Get(c, key, cl)
if err != nil && err != datastore.ErrNoSuchEntity {
return err
}
cl.LastMessageID = msg.Header.Get("Message-ID")
_, err = datastore.Put(c, key, cl)
return err
}, nil)
if err != nil {
c.Errorf("datastore transaction failed: %v", err)
}
// Update the CL after a delay to give Rietveld a chance to catch up.
UpdateCLLater(c, m[1], 10*time.Second)
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment