Skip to content

Commit 9734fd1

Browse files
committed
Update the 'PR mail settings' after posting to the mailing list
The settings are changed in two ways: * The version is incremented in the subject prefix * The message-id for in-reply-to is set to the id of the just-sent message
1 parent 9141d90 commit 9734fd1

File tree

4 files changed

+30
-19
lines changed

4 files changed

+30
-19
lines changed

app/controllers/Application.scala

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -98,18 +98,17 @@ object Application extends Controller {
9898

9999
val settings = req.body
100100

101-
for (patchCommits <- req.patchCommitsF) yield {
102-
val patchBomb = PatchBomb(patchCommits, addresses, settings.subjectPrefix, mailType.subjectPrefix, mailType.footer(req.pr))
103-
val initialEmail = patchBomb.emails.head
104-
val initialEmailWithReply = settings.inReplyTo.fold(initialEmail)(initialEmail.inReplyTo)
105-
for (initialMessageId <- ses.send(initialEmailWithReply)) {
106-
for (email <- patchBomb.emails.drop(1)) {
107-
ses.send(email.inReplyTo(initialMessageId))
108-
}
109-
110-
mailType.afterSending(req.pr, initialMessageId)
101+
for {
102+
patchCommits <- req.patchCommitsF
103+
patchBomb = PatchBomb(patchCommits, addresses, settings.subjectPrefix, mailType.subjectPrefix, mailType.footer(req.pr))
104+
initialEmail = patchBomb.emails.head
105+
initialMessageId <- ses.send(settings.inReplyTo.fold(initialEmail)(initialEmail.inReplyTo))
106+
} yield {
107+
for (email <- patchBomb.emails.tail) {
108+
ses.send(email.inReplyTo(initialMessageId))
111109
}
112-
Ok(pullRequestSent(req.pr, req.user, mailType)).addingToSession(prId.slug -> toJson(settings).toString)
110+
val updatedSettings = mailType.afterSending(req.pr, initialMessageId, settings)
111+
Ok(pullRequestSent(req.pr, req.user, mailType)).addingToSession(prId.slug -> toJson(updatedSettings).toString)
113112
}
114113
}
115114

app/lib/MailType.scala

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package lib
33
import com.github.nscala_time.time.Imports._
44
import com.madgag.github.Implicits._
55
import controllers.routes
6+
import lib.PRMailSettings
67
import lib.actions.Requests._
78
import lib.checks.{Check, GHChecks, PRChecks}
89
import org.kohsuke.github.{GHMyself, GHPullRequest}
@@ -12,7 +13,7 @@ import scala.concurrent.ExecutionContext.Implicits.global
1213
import scala.concurrent.Future
1314

1415
sealed trait MailType {
15-
def afterSending(pr: GHPullRequest, messageId: String)
16+
def afterSending(pr: GHPullRequest, messageId: String, prMailSettings: PRMailSettings): PRMailSettings
1617

1718
val slug: String
1819

@@ -66,8 +67,9 @@ object MailType {
6667
HasAReasonableNumberOfCommits
6768
)
6869

69-
override def afterSending(request: GHPullRequest, messageId: String) {
70+
override def afterSending(request: GHPullRequest, messageId: String, prMailSettings: PRMailSettings) = {
7071
// Nothing for preview
72+
prMailSettings
7173
}
7274
}
7375

@@ -105,11 +107,12 @@ object MailType {
105107
HasAReasonableNumberOfCommits
106108
)
107109

108-
override def afterSending(pr: GHPullRequest, messageId: String) {
110+
override def afterSending(pr: GHPullRequest, messageId: String, prMailSettings: PRMailSettings) = {
109111
val mailingListLinks = Project.byRepoId(pr.id.repo).mailingList.archives.map(a => s"[${a.providerName}](${a.linkFor(messageId)})").mkString(", ")
110112
pr.comment(
111113
s"${pr.getUser.atLogin} sent this to the mailing list with [_submitGit_](https://github.com/rtyley/submitgit) - " +
112114
s"here on $mailingListLinks []($messageId)")
115+
prMailSettings.afterBeingUsedToSend(messageId)
113116
}
114117
}
115118
}

app/lib/PRMailSettings.scala

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,15 @@
11
package lib
22

3+
import lib.model.SubjectPrefixParsing
34
import play.api.libs.json.Json
45

5-
case class PRMailSettings(subjectPrefix: String, inReplyTo: Option[String] = None)
6+
case class PRMailSettings(subjectPrefix: String, inReplyTo: Option[String] = None) {
7+
def afterBeingUsedToSend(messageId: String) = copy(
8+
subjectPrefix =
9+
SubjectPrefixParsing.patchPrefixContent.parse(subjectPrefix).get.value.suggestsNext.toString,
10+
inReplyTo = Some(messageId)
11+
)
12+
}
613

714
object PRMailSettings {
815
implicit val formats = Json.format[PRMailSettings]

app/lib/model/SubjectPrefix.scala

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,14 @@ object SubjectPrefixParsing {
2323

2424
val descriptor: P[String] = P( descriptorWord.rep(1, sep = " ").! )
2525

26-
val patchPrefix: P[SubjectPrefix] =
27-
P( "[" ~ descriptor ~ (" " ~ version).? ~ (" " ~ patchIndexAndBombSize).map(_ => ()).? ~ "]").map(SubjectPrefix.tupled)
26+
val patchPrefixContent: P[SubjectPrefix] =
27+
P( descriptor ~ (" " ~ version).? ~ (" " ~ patchIndexAndBombSize).map(_ => ()).? ).map(SubjectPrefix.tupled)
2828

29-
def parse(subjectLine: String): Option[SubjectPrefix] = {
29+
val subjectLine: P[SubjectPrefix] =
30+
P( "[" ~ patchPrefixContent ~ "]")
3031

31-
patchPrefix.parse(subjectLine) match {
32+
def parse(subjectLineText: String): Option[SubjectPrefix] = {
33+
subjectLine.parse(subjectLineText) match {
3234
case Result.Success(subjectPrefix, _) => Some(subjectPrefix)
3335
case _ => None
3436
}

0 commit comments

Comments
 (0)