mirror of
https://github.com/golang/go
synced 2024-11-22 06:54:39 -07:00
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:
parent
5d331964e7
commit
1bdb788b2e
@ -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)
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user