summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoman Smrž <roman.smrz@seznam.cz>2025-04-05 19:43:16 +0200
committerRoman Smrž <roman.smrz@seznam.cz>2025-04-05 19:43:16 +0200
commit6350311e81bb116bb7975bcc76e1dc9577194531 (patch)
treea266a0fdbd40be98725d85a8915a6aba7f8ba9bb
parent1f01dbd2b1d3fb89efdaab56bc52d82a8ed0483e (diff)
Convert JobRepo to a closed type family
-rw-r--r--src/Config.hs2
-rw-r--r--src/Eval.hs6
-rw-r--r--src/Job.hs2
-rw-r--r--src/Job/Types.hs7
4 files changed, 9 insertions, 8 deletions
diff --git a/src/Config.hs b/src/Config.hs
index bc66ea9..98b5aa5 100644
--- a/src/Config.hs
+++ b/src/Config.hs
@@ -101,7 +101,7 @@ parseSingleCheckout = withMap "checkout definition" $ \m -> do
Nothing -> return [ Left checkout ]
Just name -> do
revision <- m .:? "revision"
- return [ Right ( DeclaredJobRepo (RepoName name), revision, checkout ) ]
+ return [ Right ( RepoName name, revision, checkout ) ]
parseMultipleCheckouts :: Node Pos -> Parser [ Either JobCheckout ( JobRepo Declared, Maybe Text, JobCheckout ) ]
parseMultipleCheckouts = withSeq "checkout definitions" $ fmap concat . mapM parseSingleCheckout
diff --git a/src/Eval.hs b/src/Eval.hs
index 7e53128..807a3b8 100644
--- a/src/Eval.hs
+++ b/src/Eval.hs
@@ -44,10 +44,10 @@ runEval action einput = runExceptT $ flip runReaderT einput action
evalJob :: EvalInput -> DeclaredJob -> Except EvalError Job
evalJob EvalInput {..} decl = do
- otherCheckout <- forM (jobOtherCheckout decl) $ \( DeclaredJobRepo name, revision, checkout ) -> do
+ otherCheckout <- forM (jobOtherCheckout decl) $ \( name, revision, checkout ) -> do
repo <- maybe (throwError $ OtherEvalError $ "repo `" <> textRepoName name <> "' not defined") return $
lookup name eiOtherRepos
- return ( EvaluatedJobRepo repo, revision, checkout )
+ return ( repo, revision, checkout )
return Job
{ jobName = jobName decl
, jobContainingCheckout = jobContainingCheckout decl
@@ -80,7 +80,7 @@ canonicalJobName (r : rs) mbTree config = do
[ case mbTree of
Just _ -> return []
Nothing -> maybeToList <$> asks eiContainingRepo
- , return $ nub $ map (\( EvaluatedJobRepo repo, _, _ ) -> repo) $ jobOtherCheckout job
+ , return $ nub $ map (\( repo, _, _ ) -> repo) $ jobOtherCheckout job
]
(JobIdName name :) <$> canonicalOtherCheckouts rs repos
Nothing -> throwError $ OtherEvalError $ "job ‘" <> r <> "’ not found"
diff --git a/src/Job.hs b/src/Job.hs
index a9effba..5a4cf7e 100644
--- a/src/Job.hs
+++ b/src/Job.hs
@@ -297,7 +297,7 @@ prepareJob dir mbCommit job inner = do
fail $ "no containing repository, can't do checkout"
return $ stringJobName (jobName job)
- jdirOther <- forM (jobOtherCheckout job) $ \( EvaluatedJobRepo repo, revision, JobCheckout mbsub dest ) -> do
+ jdirOther <- forM (jobOtherCheckout job) $ \( repo, revision, JobCheckout mbsub dest ) -> do
commit <- readCommit repo $ fromMaybe "HEAD" revision
tree <- getCommitTree commit
subtree <- maybe return (getSubtree (Just commit)) mbsub $ tree
diff --git a/src/Job/Types.hs b/src/Job/Types.hs
index 0447615..5415e4d 100644
--- a/src/Job/Types.hs
+++ b/src/Job/Types.hs
@@ -1,5 +1,6 @@
module Job.Types where
+import Data.Kind
import Data.Text (Text)
import Data.Text qualified as T
@@ -34,9 +35,9 @@ textJobName :: JobName -> Text
textJobName (JobName name) = name
-data JobRepo d where
- DeclaredJobRepo :: RepoName -> JobRepo Declared
- EvaluatedJobRepo :: Repo -> JobRepo Evaluated
+type family JobRepo d :: Type where
+ JobRepo Declared = RepoName
+ JobRepo Evaluated = Repo
data JobCheckout = JobCheckout
{ jcSubtree :: Maybe FilePath