diff options
| author | Roman Smrž <roman.smrz@seznam.cz> | 2025-11-08 22:24:27 +0100 |
|---|---|---|
| committer | Roman Smrž <roman.smrz@seznam.cz> | 2025-11-08 22:24:27 +0100 |
| commit | f449ef32e31e10b9412e932f0181ccfa4314e728 (patch) | |
| tree | 3322d63a909615cb18874796bb0adcb93b21d66d | |
| parent | d8354b8f1b2bbb6d911070ca9822c7e4fbd88bca (diff) | |
Allow repo declaration without giving path
| -rw-r--r-- | src/Command.hs | 2 | ||||
| -rw-r--r-- | src/Config.hs | 9 | ||||
| -rw-r--r-- | src/Main.hs | 19 | ||||
| -rw-r--r-- | src/Repo.hs | 2 |
4 files changed, 21 insertions, 11 deletions
diff --git a/src/Command.hs b/src/Command.hs index 0b1c790..30b0df0 100644 --- a/src/Command.hs +++ b/src/Command.hs @@ -36,7 +36,7 @@ import Repo data CommonOptions = CommonOptions { optJobs :: Int - , optRepo :: [ DeclaredRepo ] + , optRepo :: [ ( RepoName, FilePath ) ] } defaultCommonOptions :: CommonOptions diff --git a/src/Config.hs b/src/Config.hs index 8a7649a..1b0e046 100644 --- a/src/Config.hs +++ b/src/Config.hs @@ -138,9 +138,12 @@ parseUses = withSeq "Uses list" $ mapM $ parseRepo :: Text -> Node Pos -> Parser DeclaredRepo -parseRepo name node = flip (withMap "Repo") node $ \r -> DeclaredRepo - <$> pure (RepoName name) - <*> (T.unpack <$> r .: "path") +parseRepo name node = choice + [ flip (withNull "Repo") node $ return $ DeclaredRepo (RepoName name) Nothing + , flip (withMap "Repo") node $ \r -> DeclaredRepo + <$> pure (RepoName name) + <*> (fmap T.unpack <$> r .:? "path") + ] findConfig :: IO (Maybe FilePath) diff --git a/src/Main.hs b/src/Main.hs index 83b0ab3..91d3acd 100644 --- a/src/Main.hs +++ b/src/Main.hs @@ -65,7 +65,7 @@ options = case span (/= ':') value of ( repo, ':' : path ) -> return opts { optCommon = (optCommon opts) - { optRepo = DeclaredRepo (RepoName $ T.pack repo) path : optRepo (optCommon opts) + { optRepo = ( RepoName $ T.pack repo, path ) : optRepo (optCommon opts) } } _ -> throwError $ "--repo: invalid value ‘" <> value <> "’" @@ -243,13 +243,13 @@ runSomeCommand rootPath gopts (SC tproxy) args = do JobRootRepo repo -> return (Just repo) JobRootConfig _ -> openRepo $ takeDirectory ciRootPath - let openDeclaredRepo dir decl = do - let path = dir </> repoPath decl + let openDeclaredRepo dir ( name, dpath ) = do + let path = dir </> dpath openRepo path >>= \case - Just repo -> return ( repoName decl, repo ) + Just repo -> return ( name, repo ) Nothing -> do absPath <- makeAbsolute path - hPutStrLn stderr $ "Failed to open repo ‘" <> showRepoName (repoName decl) <> "’ at " <> repoPath decl <> " (" <> absPath <> ")" + hPutStrLn stderr $ "Failed to open repo ‘" <> showRepoName name <> "’ at " <> dpath <> " (" <> absPath <> ")" exitFailure cmdlineRepos <- forM (optRepo ciOptions) (openDeclaredRepo "") @@ -258,7 +258,14 @@ runSomeCommand rootPath gopts (SC tproxy) args = do forM (configRepos config) $ \decl -> do case lookup (repoName decl) cmdlineRepos of Just repo -> return ( repoName decl, repo ) - Nothing -> openDeclaredRepo (takeDirectory ciRootPath) decl + Nothing + | Just path <- repoPath decl + -> openDeclaredRepo (takeDirectory ciRootPath) ( repoName decl, path ) + + | otherwise + -> do + hPutStrLn stderr $ "No path defined for repo ‘" <> showRepoName (repoName decl) <> "’" + exitFailure _ -> return [] let ciOtherRepos = configRepos ++ cmdlineRepos diff --git a/src/Repo.hs b/src/Repo.hs index 09e577b..c878b1e 100644 --- a/src/Repo.hs +++ b/src/Repo.hs @@ -72,7 +72,7 @@ getRepoWorkDir GitRepo {..} = takeDirectory gitDir data DeclaredRepo = DeclaredRepo { repoName :: RepoName - , repoPath :: FilePath + , repoPath :: Maybe FilePath } newtype RepoName = RepoName Text |