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
This commit is contained in:
David Symonds 2012-04-30 22:47:51 +10:00
parent 5d331964e7
commit 1bdb788b2e
2 changed files with 25 additions and 3 deletions

View file

@ -45,8 +45,9 @@ type CL struct {
LGTMs []string
// Mail information.
Subject string `datastore:",noindex"`
Recipients []string `datastore:",noindex"`
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)

View file

@ -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)
}