Skip to content

Option to ignore package.yaml #39

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Mar 8, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions stack2nix/Stack2nix.hs
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ packages2nix args (Stack _ _ pkgs) =
do cwd <- getCurrentDirectory
fmap (mkNonRecSet . concat) . forM pkgs $ \case
(LocalPath folder) ->
do cabalFiles <- findCabalFiles (dropFileName (argStackYaml args) </> folder)
do cabalFiles <- findCabalFiles (argHpackUse args) (dropFileName (argStackYaml args) </> folder)
forM cabalFiles $ \cabalFile ->
let pkg = cabalFilePkgName cabalFile
nix = pkg <.> "nix"
Expand Down Expand Up @@ -147,7 +147,7 @@ packages2nix args (Stack _ _ pkgs) =
cabalFromPath url rev subdir path = do
d <- liftIO $ doesDirectoryExist path
unless d $ fail ("not a directory: " ++ path)
cabalFiles <- liftIO $ findCabalFiles path
cabalFiles <- liftIO $ findCabalFiles (argHpackUse args) path
return $ \sha256 ->
forM cabalFiles $ \cabalFile -> do
let pkg = cabalFilePkgName cabalFile
Expand Down
7 changes: 7 additions & 0 deletions stack2nix/Stack2nix/CLI.hs
Original file line number Diff line number Diff line change
@@ -1,17 +1,23 @@
module Stack2nix.CLI
( Args(..)
, HpackUse(..)
, parseStack2nixArgs
) where

import Options.Applicative hiding (option)
import Data.Semigroup ((<>))

data HpackUse
= IgnorePackageYaml
| UsePackageYamlFirst
deriving Show

--------------------------------------------------------------------------------
-- CLI Arguments
data Args = Args
{ argOutputDir :: FilePath
, argStackYaml :: FilePath
, argHpackUse :: HpackUse
, argCacheFile :: FilePath
} deriving Show

Expand All @@ -20,6 +26,7 @@ args :: Parser Args
args = Args
<$> strOption ( long "output" <> short 'o' <> metavar "DIR" <> help "Generate output in DIR" )
<*> strOption ( long "stack-yaml" <> value "stack.yaml" <> showDefault <> metavar "FILE" <> help "Override project stack.yaml" )
<*> flag UsePackageYamlFirst IgnorePackageYaml (long "ignore-package-yaml" <> help "disable hpack run and use only cabal disregarding package.yaml existence")
<*> strOption ( long "cache" <> value ".stack-to-nix.cache" <> showDefault <> metavar "FILE" <> help "Dependency cache file" )

parseStack2nixArgs :: IO Args
Expand Down
13 changes: 9 additions & 4 deletions stack2nix/Stack2nix/Project.hs
Original file line number Diff line number Diff line change
Expand Up @@ -12,15 +12,17 @@ import System.FilePath ((</>))
import System.Directory (listDirectory, doesFileExist)
import Data.List (isSuffixOf)

import qualified Hpack
import qualified Hpack.Config as Hpack
import qualified Hpack.Render as Hpack

import Cabal2Nix (CabalFile(..), CabalFileGenerator(..))

findCabalFiles :: FilePath -> IO [CabalFile]
findCabalFiles path = doesFileExist (path </> Hpack.packageConfig) >>= \case
False -> fmap (OnDisk . (path </>)) . filter (isSuffixOf ".cabal") <$> listDirectory path
import Stack2nix.CLI (HpackUse(..))

findCabalFiles :: HpackUse -> FilePath -> IO [CabalFile]
findCabalFiles IgnorePackageYaml path = findOnlyCabalFiles path
findCabalFiles UsePackageYamlFirst path = doesFileExist (path </> Hpack.packageConfig) >>= \case
False -> findOnlyCabalFiles path
True -> do
mbPkg <- Hpack.readPackageConfig Hpack.defaultDecodeOptions {Hpack.decodeOptionsTarget = path </> Hpack.packageConfig}
case mbPkg of
Expand All @@ -32,3 +34,6 @@ findCabalFiles path = doesFileExist (path </> Hpack.packageConfig) >>= \case

where encodeUtf8 :: String -> ByteString
encodeUtf8 = T.encodeUtf8 . T.pack

findOnlyCabalFiles :: FilePath -> IO [CabalFile]
findOnlyCabalFiles path = fmap (OnDisk . (path </>)) . filter (isSuffixOf ".cabal") <$> listDirectory path