diff options
author | Roman Smrž <roman.smrz@seznam.cz> | 2025-04-05 19:43:16 +0200 |
---|---|---|
committer | Roman Smrž <roman.smrz@seznam.cz> | 2025-04-05 19:43:16 +0200 |
commit | 6350311e81bb116bb7975bcc76e1dc9577194531 (patch) | |
tree | a266a0fdbd40be98725d85a8915a6aba7f8ba9bb | |
parent | 1f01dbd2b1d3fb89efdaab56bc52d82a8ed0483e (diff) |
Convert JobRepo to a closed type family
-rw-r--r-- | src/Config.hs | 2 | ||||
-rw-r--r-- | src/Eval.hs | 6 | ||||
-rw-r--r-- | src/Job.hs | 2 | ||||
-rw-r--r-- | src/Job/Types.hs | 7 |
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" @@ -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 |