summaryrefslogtreecommitdiff
path: root/src/Command/Run.hs
diff options
context:
space:
mode:
authorRoman Smrž <roman.smrz@seznam.cz>2025-04-01 23:33:06 +0200
committerRoman Smrž <roman.smrz@seznam.cz>2025-04-04 21:25:00 +0200
commit1f01dbd2b1d3fb89efdaab56bc52d82a8ed0483e (patch)
treeed2a279157f6af16dbdd3b620e10e6028a320f23 /src/Command/Run.hs
parent7e8ec380763292d8afa4f3d0f03a679ffe384d49 (diff)
Job root either as repo or jobfile
Diffstat (limited to 'src/Command/Run.hs')
-rw-r--r--src/Command/Run.hs36
1 files changed, 24 insertions, 12 deletions
diff --git a/src/Command/Run.hs b/src/Command/Run.hs
index 905204e..e0277c3 100644
--- a/src/Command/Run.hs
+++ b/src/Command/Run.hs
@@ -123,24 +123,41 @@ mergeSources sources = do
argumentJobSource :: [ JobName ] -> CommandExec JobSource
argumentJobSource [] = emptyJobSource
argumentJobSource names = do
- config <- getConfig
+ ( config, jobsetCommit ) <- getJobRoot >>= \case
+ JobRootConfig config -> do
+ commit <- sequence . fmap createWipCommit =<< tryGetDefaultRepo
+ return ( config, commit )
+ JobRootRepo repo -> do
+ commit <- createWipCommit repo
+ config <- either fail return =<< loadConfigForCommit =<< getCommitTree commit
+ return ( config, Just commit )
+
einput <- getEvalInput
jobsetJobsEither <- fmap Right $ forM names $ \name ->
case find ((name ==) . jobName) (configJobs config) of
Just job -> return job
Nothing -> tfail $ "job `" <> textJobName name <> "' not found"
- jobsetCommit <- sequence . fmap createWipCommit =<< tryGetDefaultRepo
oneshotJobSource [ evalJobSet einput JobSet {..} ]
+loadJobSetFromRoot :: (MonadIO m, MonadFail m) => JobRoot -> Commit -> m DeclaredJobSet
+loadJobSetFromRoot root commit = case root of
+ JobRootRepo _ -> loadJobSetForCommit commit
+ JobRootConfig config -> return JobSet
+ { jobsetCommit = Just commit
+ , jobsetJobsEither = Right $ configJobs config
+ }
+
rangeSource :: Text -> Text -> CommandExec JobSource
rangeSource base tip = do
+ root <- getJobRoot
repo <- getDefaultRepo
einput <- getEvalInput
commits <- listCommits repo (base <> ".." <> tip)
- oneshotJobSource . map (evalJobSet einput) =<< mapM loadJobSetForCommit commits
+ oneshotJobSource . map (evalJobSet einput) =<< mapM (loadJobSetFromRoot root) commits
watchBranchSource :: Text -> CommandExec JobSource
watchBranchSource branch = do
+ root <- getJobRoot
repo <- getDefaultRepo
einput <- getEvalInput
getCurrentTip <- watchBranch repo branch
@@ -153,7 +170,7 @@ watchBranchSource branch = do
Nothing -> retry
commits <- listCommits repo (textCommitId (commitId prev) <> ".." <> textCommitId (commitId cur))
- jobsets <- map (evalJobSet einput) <$> mapM loadJobSetForCommit commits
+ jobsets <- map (evalJobSet einput) <$> mapM (loadJobSetFromRoot root) commits
nextvar <- newEmptyTMVarIO
atomically $ putTMVar tmvar $ Just ( jobsets, JobSource nextvar )
go cur nextvar
@@ -170,6 +187,7 @@ watchBranchSource branch = do
watchTagSource :: Pattern -> CommandExec JobSource
watchTagSource pat = do
+ root <- getJobRoot
chan <- watchTags =<< getDefaultRepo
einput <- getEvalInput
@@ -177,7 +195,7 @@ watchTagSource pat = do
tag <- atomically $ readTChan chan
if match pat $ T.unpack $ tagTag tag
then do
- jobset <- evalJobSet einput <$> loadJobSetForCommit (tagObject tag)
+ jobset <- evalJobSet einput <$> (loadJobSetFromRoot root) (tagObject tag)
nextvar <- newEmptyTMVarIO
atomically $ putTMVar tmvar $ Just ( [ jobset ], JobSource nextvar )
go nextvar
@@ -202,13 +220,7 @@ cmdRun (RunCommand RunOptions {..} args) = do
, forM roSinceUpstream $ return . Left . ( Nothing, )
, forM args $ \arg -> case T.splitOn ".." arg of
[ base, tip ] -> return $ Left ( Just base, tip )
- [ _ ] -> do
- config <- getConfig
- if any ((JobName arg ==) . jobName) (configJobs config)
- then return $ Right $ JobName arg
- else do
- liftIO $ T.hPutStrLn stderr $ "standalone `" <> arg <> "' argument deprecated, use `--since-upstream=" <> arg <> "' instead"
- return $ Left ( Nothing, arg )
+ [ _ ] -> return $ Right $ JobName arg
_ -> tfail $ "invalid argument: " <> arg
]