summaryrefslogtreecommitdiff
path: root/src/Job.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Job.hs')
-rw-r--r--src/Job.hs15
1 files changed, 13 insertions, 2 deletions
diff --git a/src/Job.hs b/src/Job.hs
index 1d30489..820f5e5 100644
--- a/src/Job.hs
+++ b/src/Job.hs
@@ -286,12 +286,23 @@ prepareJob dir mbCommit job inner = do
jdirCommit <- case mbCommit of
Just commit -> do
tree <- getCommitTree commit
- checkoutAt tree checkoutPath
+ forM_ (jobContainingCheckout job) $ \(JobCheckout mbsub dest) -> do
+ subtree <- maybe return (getSubtree mbCommit) mbsub $ tree
+ checkoutAt subtree $ checkoutPath </> fromMaybe "" dest
return $ showTreeId (treeId tree) </> stringJobName (jobName job)
Nothing -> do
+ when (not $ null $ jobContainingCheckout job) $ do
+ fail $ "no containing repository, can't do checkout"
return $ stringJobName (jobName job)
- let jdir = dir </> "jobs" </> jdirCommit
+ jdirOther <- forM (jobOtherCheckout job) $ \( EvaluatedJobRepo repo, revision, JobCheckout mbsub dest ) -> do
+ commit <- readCommit repo $ fromMaybe "HEAD" revision
+ tree <- getCommitTree commit
+ subtree <- maybe return (getSubtree (Just commit)) mbsub $ tree
+ checkoutAt subtree $ checkoutPath </> fromMaybe "" dest
+ return $ showTreeId (treeId tree)
+
+ let jdir = dir </> "jobs" </> jdirCommit </> joinPath jdirOther
liftIO $ createDirectoryIfMissing True jdir
inner checkoutPath jdir