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
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)
}
}
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)
"time"
"appengine"
+ "appengine/datastore"
)
func init() {
}
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)
}