aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatar Alexander Foremny <aforemny@posteo.de>2024-03-13 05:35:58 +0100
committerLibravatar Alexander Foremny <aforemny@posteo.de>2024-03-14 07:07:45 +0100
commitf63a777c07094af31c8841a3f50af8beca0aa369 (patch)
tree07de3fd250be4886d0f424afe671034161c9a765
parentf73d14f3f7ff7b7f188d9038856baee0cada0d51 (diff)
chore: add review commit template
-rw-r--r--app/Main.hs6
-rw-r--r--app/Review.hs36
2 files changed, 38 insertions, 4 deletions
diff --git a/app/Main.hs b/app/Main.hs
index a2fef0b..5a21787 100644
--- a/app/Main.hs
+++ b/app/Main.hs
@@ -343,7 +343,7 @@ import Options.Applicative ((<**>))
import Options.Applicative qualified as O
import Patch qualified as A
import Process (proc, sh_, textInput)
-import Render (renderAsText, (<<<))
+import Render ((<<<))
import Render qualified as P
import Review qualified as R
import Settings (Settings (..), readSettings)
@@ -592,8 +592,8 @@ main = do
`catch` \(_ :: E.ProcessException) ->
error "working directory not clean, aborting.."
plan <- R.formulatePlan perCommit baseBranch featureBranch
- patch <- A.Patch . concat <$> mapM R.reviewStep (NE.toList plan.steps)
- T.writeFile "review.patch" (renderAsText patch)
+ R.commitReview plan . A.Patch . concat
+ =<< mapM R.reviewStep (NE.toList plan.steps)
-- REVIEW Why is withReviewing in the Status module and not the Review
-- module?
--
diff --git a/app/Review.hs b/app/Review.hs
index 37690d9..3b7afbe 100644
--- a/app/Review.hs
+++ b/app/Review.hs
@@ -3,10 +3,11 @@ module Review
PlanStep (..),
formulatePlan,
reviewStep,
+ commitReview,
)
where
-import Control.Monad (ap, forM, forM_)
+import Control.Monad (ap, forM, forM_, when)
import Data.Binary qualified as B
import Data.ByteString.Lazy qualified as LB
import Data.Function ((&))
@@ -28,6 +29,8 @@ import Text.Diff.Parse.Types qualified as D
data Plan = Plan
{ baseBranch :: BranchName,
+ featureBranch :: BranchName,
+ commit :: Git.CommitHash,
perCommit :: Bool,
steps :: NE.NonEmpty PlanStep
}
@@ -71,6 +74,7 @@ formulatePlan perCommit baseBranch featureBranch = do
)
fileDeltas
),
+ commit = featureCommit,
..
}
@@ -177,3 +181,33 @@ withTempSourceFiles (Git.Commit hash) fileDeltas action = do
if' :: Bool -> a -> a -> a
if' True a _ = a
if' False _ b = b
+
+commitReview :: Plan -> A.Patch -> IO ()
+commitReview plan patch = do
+ withSystemTempDirectory "anissue" $ \tmp -> do
+ when (not (null patch.fileDeltas)) do
+ T.writeFile (tmp </> "review.patch") (renderAsText patch)
+ sh_ (proc "patch -p0 <%/review.patch" tmp)
+ T.writeFile (tmp </> "commit_editmsg") (commit_editmsg plan)
+ sh_ (proc "git add %" (map (.fileDeltaDestFile) patch.fileDeltas))
+ sh_ (proc "git commit --allow-empty --template %/commit_editmsg" tmp)
+
+commit_editmsg :: Plan -> T.Text
+commit_editmsg plan = do
+ T.unlines
+ [ "",
+ "# Please enter the commit message for your review. Lines starting",
+ "# with '#' will be ignored, and an empty message aborts the commit.",
+ "#",
+ "# To approve the changes, format your commit message like this:",
+ "#",
+ "# review: approve " <> plan.featureBranch,
+ "#",
+ "# Reviewed branch " <> plan.featureBranch <> " at commit " <> Git.toTextUnsafe plan.commit <> ".",
+ "#",
+ "# To requst changes, format your commit message like this:",
+ "#",
+ "# review: request-changes " <> plan.featureBranch,
+ "#",
+ "# Reviewed branch " <> plan.featureBranch <> " at commit " <> Git.toTextUnsafe plan.commit <> "."
+ ]