From 05901cd57576eae77db3fa6f42ef8c07e136f138 Mon Sep 17 00:00:00 2001 From: Marek Fajkus Date: Sun, 19 May 2019 17:57:01 +0200 Subject: [PATCH 01/21] Haskell parsing of SRC dirs & base nix support --- data/default.nix | 19 +++++++++--------- elm2nix.cabal | 1 + src/Elm2Nix.hs | 51 ++++++++++++++++++++++++++++++++++++++++++------ 3 files changed, 56 insertions(+), 15 deletions(-) diff --git a/data/default.nix b/data/default.nix index 9abda72..d363a77 100644 --- a/data/default.nix +++ b/data/default.nix @@ -6,25 +6,25 @@ with (import nixpkgs config); let mkDerivation = - { srcs ? ./elm-srcs.nix - , src + { elmSrcs ? ./elm-srcs.nix + , srcs + , sourceRoot ? "./src" , name - , srcdir ? "./src" , targets ? [] , versionsDat ? ./versions.dat }: stdenv.mkDerivation { - inherit name src; + inherit name srcs sourceRoot; buildInputs = [ elmPackages.elm ]; buildPhase = pkgs.elmPackages.fetchElmDeps { - elmPackages = import srcs; + elmPackages = import elmSrcs; inherit versionsDat; }; installPhase = let - elmfile = module: "\${srcdir}/\${builtins.replaceStrings ["."] ["/"] module}.elm"; + elmfile = module: "\${builtins.replaceStrings ["."] ["/"] module}.elm"; in '' mkdir -p \$out/share/doc \${lib.concatStrings (map (module: '' @@ -35,8 +35,9 @@ let }; in mkDerivation { name = "${name}"; - srcs = ./elm-srcs.nix; - src = ./.; + elmSrcs = ./elm-srcs.nix; + # TODO: add haskell paths + srcs = ${srcs}; targets = ["Main"]; - srcdir = "${srcdir}"; + sourceRoot = "${sourceRoot}"; } diff --git a/elm2nix.cabal b/elm2nix.cabal index 23d2b36..60bcf22 100644 --- a/elm2nix.cabal +++ b/elm2nix.cabal @@ -45,6 +45,7 @@ library , text , transformers , unordered-containers + , vector exposed-modules: Elm2Nix Elm2Nix.FixedOutput diff --git a/src/Elm2Nix.hs b/src/Elm2Nix.hs index f151747..454898d 100644 --- a/src/Elm2Nix.hs +++ b/src/Elm2Nix.hs @@ -17,6 +17,7 @@ import Data.List (intercalate) import Data.HashMap.Strict (HashMap) import Data.String.Here import Data.Text (Text) +import Data.Vector (Vector) import System.Exit (exitFailure) import System.IO (hPutStrLn, stderr) @@ -67,13 +68,36 @@ parseElmJsonDeps obj = parseDeps (Object hm) = mapM (uncurry parseDep) (HM.toList hm) parseDeps v = Left (UnexpectedValue v) +-- TODO: there is likely to be even better abstraction +tryLookup :: HashMap Text Value -> Text -> Either Elm2NixError Value +tryLookup hm key = maybeToRight (KeyNotFound key) (HM.lookup key hm) + where maybeToRight :: b -> Maybe a -> Either b a maybeToRight _ (Just x) = Right x maybeToRight y Nothing = Left y - tryLookup :: HashMap Text Value -> Text -> Either Elm2NixError Value - tryLookup hm key = - maybeToRight (KeyNotFound key) (HM.lookup key hm) +parseElmJsonSrcs :: Value -> Either Elm2NixError (Vector FilePath) +parseElmJsonSrcs obj = + case obj of + Object hm -> do + case tryLookup hm "source-directories" of + -- the `source-directories` part of elm.json is optional + -- if user don't specified this value `src` directory is the default + Left _ -> Right $ pure "./src" + Right srcs -> + case srcs of + Array vec -> mapM extractSrcPath vec + v -> Left $ UnexpectedValue v + v -> Left $ UnexpectedValue v + where + extractSrcPath :: Value -> Either Elm2NixError String + extractSrcPath val = + case val of + String text -> Right $ toNixPath text + v -> Left $ UnexpectedValue v + + toNixPath :: Text -> String + toNixPath = (\p -> if p == "." then "./." else p ) . Text.unpack -- CMDs @@ -90,7 +114,16 @@ convert = runCLI $ do liftIO (putStrLn (generateNixSources sources)) initialize :: IO () -initialize = runCLI $ +initialize = runCLI $ do + liftIO (hPutStrLn stderr "Resolving elm.json source directories into Nix paths...") + res <- liftIO (fmap Json.eitherDecode (LBS.readFile "elm.json")) + elmJson <- either (throwErr . ElmJsonReadError) return res + + srcs' <- either throwErr return (parseElmJsonSrcs elmJson) + liftIO (hPutStrLn stderr $ "Using source directories:") + liftIO (mapM (hPutStrLn stderr) srcs') + let srcs = stringifySrcs srcs' + liftIO (putStrLn [template|data/default.nix|]) where -- | Converts Package.Name to Nix friendly name @@ -102,8 +135,14 @@ initialize = runCLI $ toNixName = Text.replace "/" "-" name :: String name = Text.unpack (toNixName baseName <> "-" <> version) - srcdir :: String - srcdir = "./src" -- TODO: get from elm.json + sourceRoot :: String + sourceRoot = "./src" -- TODO: get from elm.json + -- TODO: Improve + stringifySrcs :: Vector String -> String + stringifySrcs xs = + "[\n" + <> foldr (\i acc -> " " <> i <> "\n" <> acc) "" xs + <> " ]" -- Utils From bec0af09ffa7fc30b82882a289c32622ac0583ff Mon Sep 17 00:00:00 2001 From: Marek Fajkus Date: Sun, 19 May 2019 19:48:51 +0200 Subject: [PATCH 02/21] Generate custom elm.json via nix --- data/default.nix | 25 +++++++++++++++++++++---- src/Elm2Nix.hs | 4 ++-- 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/data/default.nix b/data/default.nix index d363a77..1262c90 100644 --- a/data/default.nix +++ b/data/default.nix @@ -8,13 +8,15 @@ let mkDerivation = { elmSrcs ? ./elm-srcs.nix , srcs - , sourceRoot ? "./src" + , srcDir ? "./src" + , extension ? ".elm" , name , targets ? [] , versionsDat ? ./versions.dat }: stdenv.mkDerivation { - inherit name srcs sourceRoot; + inherit name srcs; + sourceRoot = "."; buildInputs = [ elmPackages.elm ]; @@ -24,9 +26,24 @@ let }; installPhase = let - elmfile = module: "\${builtins.replaceStrings ["."] ["/"] module}.elm"; + elmfile = module: "\${srcDir}/\${builtins.replaceStrings ["."] ["/"] module}\${extension}"; + elmJson = pkgs.lib.importJSON ./elm.json; + elmJsonFile = pkgs.writeText "elm.json" (builtins.toJSON generatedElmJson); + genSrcs = xs: map (path: if path == "." then srcDir else builtins.replaceStrings [".." "/"] ["" ""] path) xs; + generatedElmJson = with pkgs.lib; + if hasAttrByPath ["source-directories"] elmJson then + attrsets.mapAttrs + (name: value: if name == "source-directories" then genSrcs value else value) + elmJson + else + elmJson; in '' mkdir -p \$out/share/doc + + cp \${elmJsonFile} ./elm.json + echo "Generating new elm.json..." + cat elm.json + \${lib.concatStrings (map (module: '' echo "compiling \${elmfile module}" elm make \${elmfile module} --output \$out/\${module}.html --docs \$out/share/doc/\${module}.json @@ -39,5 +56,5 @@ in mkDerivation { # TODO: add haskell paths srcs = ${srcs}; targets = ["Main"]; - sourceRoot = "${sourceRoot}"; + srcDir = "${srcDir}"; } diff --git a/src/Elm2Nix.hs b/src/Elm2Nix.hs index 454898d..8d94794 100644 --- a/src/Elm2Nix.hs +++ b/src/Elm2Nix.hs @@ -135,8 +135,8 @@ initialize = runCLI $ do toNixName = Text.replace "/" "-" name :: String name = Text.unpack (toNixName baseName <> "-" <> version) - sourceRoot :: String - sourceRoot = "./src" -- TODO: get from elm.json + srcDir :: String + srcDir = "./src" -- TODO: get from elm.json -- TODO: Improve stringifySrcs :: Vector String -> String stringifySrcs xs = From 9f0e44e4277d8abc489bd321ba0d1fc4314dba8c Mon Sep 17 00:00:00 2001 From: Marek Fajkus Date: Sun, 19 May 2019 19:51:28 +0200 Subject: [PATCH 03/21] add todo comments --- data/default.nix | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/data/default.nix b/data/default.nix index 1262c90..833c9e5 100644 --- a/data/default.nix +++ b/data/default.nix @@ -27,11 +27,13 @@ let installPhase = let elmfile = module: "\${srcDir}/\${builtins.replaceStrings ["."] ["/"] module}\${extension}"; + # TODO: review naming elmJson = pkgs.lib.importJSON ./elm.json; elmJsonFile = pkgs.writeText "elm.json" (builtins.toJSON generatedElmJson); genSrcs = xs: map (path: if path == "." then srcDir else builtins.replaceStrings [".." "/"] ["" ""] path) xs; generatedElmJson = with pkgs.lib; if hasAttrByPath ["source-directories"] elmJson then + # TODO: check if there isn't better function attrsets.mapAttrs (name: value: if name == "source-directories" then genSrcs value else value) elmJson @@ -53,7 +55,6 @@ let in mkDerivation { name = "${name}"; elmSrcs = ./elm-srcs.nix; - # TODO: add haskell paths srcs = ${srcs}; targets = ["Main"]; srcDir = "${srcDir}"; From d293a8200fc60f6b6cad451760bd65ddeb919239 Mon Sep 17 00:00:00 2001 From: Marek Fajkus Date: Sun, 19 May 2019 19:54:03 +0200 Subject: [PATCH 04/21] additional TODO --- data/default.nix | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/data/default.nix b/data/default.nix index 833c9e5..b413ead 100644 --- a/data/default.nix +++ b/data/default.nix @@ -55,6 +55,10 @@ let in mkDerivation { name = "${name}"; elmSrcs = ./elm-srcs.nix; + # TODO: given we need to process elm.json via nix anyway + # it might be better to just read this from elm.json? + # - check if we're possible to get to elm.json + # - consult with maitainer srcs = ${srcs}; targets = ["Main"]; srcDir = "${srcDir}"; From aaebde0cc4411f2e1c2dc43c932b928f02817ee2 Mon Sep 17 00:00:00 2001 From: Marek Fajkus Date: Sun, 19 May 2019 19:55:33 +0200 Subject: [PATCH 05/21] one more TODO --- data/default.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/data/default.nix b/data/default.nix index b413ead..6e0cdf6 100644 --- a/data/default.nix +++ b/data/default.nix @@ -30,6 +30,7 @@ let # TODO: review naming elmJson = pkgs.lib.importJSON ./elm.json; elmJsonFile = pkgs.writeText "elm.json" (builtins.toJSON generatedElmJson); + # TODO: hacky.. there might be a better way genSrcs = xs: map (path: if path == "." then srcDir else builtins.replaceStrings [".." "/"] ["" ""] path) xs; generatedElmJson = with pkgs.lib; if hasAttrByPath ["source-directories"] elmJson then From 505750ce3e99aabf69f717ff9bd115b80510ed1c Mon Sep 17 00:00:00 2001 From: Marek Fajkus Date: Sun, 19 May 2019 21:11:18 +0200 Subject: [PATCH 06/21] srcdir detection --- data/default.nix | 8 ++++---- elm2nix.cabal | 1 + src/Elm2Nix.hs | 24 +++++++++++++++++++++--- 3 files changed, 26 insertions(+), 7 deletions(-) diff --git a/data/default.nix b/data/default.nix index 6e0cdf6..9c3d487 100644 --- a/data/default.nix +++ b/data/default.nix @@ -8,7 +8,7 @@ let mkDerivation = { elmSrcs ? ./elm-srcs.nix , srcs - , srcDir ? "./src" + , srcdir ? "./src" , extension ? ".elm" , name , targets ? [] @@ -26,12 +26,12 @@ let }; installPhase = let - elmfile = module: "\${srcDir}/\${builtins.replaceStrings ["."] ["/"] module}\${extension}"; + elmfile = module: "\${srcdir}/\${builtins.replaceStrings ["."] ["/"] module}\${extension}"; # TODO: review naming elmJson = pkgs.lib.importJSON ./elm.json; elmJsonFile = pkgs.writeText "elm.json" (builtins.toJSON generatedElmJson); # TODO: hacky.. there might be a better way - genSrcs = xs: map (path: if path == "." then srcDir else builtins.replaceStrings [".." "/"] ["" ""] path) xs; + genSrcs = xs: map (path: if path == "." then srcdir else builtins.replaceStrings [".." "/"] ["" ""] path) xs; generatedElmJson = with pkgs.lib; if hasAttrByPath ["source-directories"] elmJson then # TODO: check if there isn't better function @@ -62,5 +62,5 @@ in mkDerivation { # - consult with maitainer srcs = ${srcs}; targets = ["Main"]; - srcDir = "${srcDir}"; + srcdir = "${srcdir}"; } diff --git a/elm2nix.cabal b/elm2nix.cabal index 60bcf22..caee9e8 100644 --- a/elm2nix.cabal +++ b/elm2nix.cabal @@ -46,6 +46,7 @@ library , transformers , unordered-containers , vector + , directory exposed-modules: Elm2Nix Elm2Nix.FixedOutput diff --git a/src/Elm2Nix.hs b/src/Elm2Nix.hs index 8d94794..6d8659c 100644 --- a/src/Elm2Nix.hs +++ b/src/Elm2Nix.hs @@ -21,10 +21,12 @@ import Data.Vector (Vector) import System.Exit (exitFailure) import System.IO (hPutStrLn, stderr) +import qualified System.Directory import qualified Data.HashMap.Strict as HM import qualified Data.ByteString.Lazy as LBS import qualified Data.Aeson as Json import qualified Data.Text as Text +import qualified Data.Vector as Vector import Elm2Nix.FixedOutput (FixedDerivation(..), prefetch) import Elm2Nix.PackagesSnapshot (snapshot) @@ -123,6 +125,7 @@ initialize = runCLI $ do liftIO (hPutStrLn stderr $ "Using source directories:") liftIO (mapM (hPutStrLn stderr) srcs') let srcs = stringifySrcs srcs' + srcdir <- liftIO (getSrcDir srcs') liftIO (putStrLn [template|data/default.nix|]) where @@ -135,10 +138,25 @@ initialize = runCLI $ do toNixName = Text.replace "/" "-" name :: String name = Text.unpack (toNixName baseName <> "-" <> version) - srcDir :: String - srcDir = "./src" -- TODO: get from elm.json + getSrcDir :: Vector FilePath -> IO FilePath + getSrcDir dirs = + case Vector.toList dirs of + [] -> pure "./src" -- in theory redundant + [ dir ] -> pure dir + xs@(h:t) -> + if "./." `elem` xs then do + -- Nix creates dir named after current directory + -- if `srcs` contains `./.` + path <- liftIO System.Directory.getCurrentDirectory + pure (lastDir path) + else + -- We can't really tell which one to choose + -- so we guess it's the first one + pure h + lastDir :: FilePath -> FilePath + lastDir = foldl (\path c -> if c == '/' then "" else path <> [c]) "" -- TODO: Improve - stringifySrcs :: Vector String -> String + stringifySrcs :: Vector FilePath -> String stringifySrcs xs = "[\n" <> foldr (\i acc -> " " <> i <> "\n" <> acc) "" xs From f7b8cc8963cce405cb5dbda02ba58dec67b75657 Mon Sep 17 00:00:00 2001 From: Marek Fajkus Date: Sun, 19 May 2019 22:19:18 +0200 Subject: [PATCH 07/21] fix toNixPath --- src/Elm2Nix.hs | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/Elm2Nix.hs b/src/Elm2Nix.hs index 6d8659c..f29587a 100644 --- a/src/Elm2Nix.hs +++ b/src/Elm2Nix.hs @@ -95,11 +95,15 @@ parseElmJsonSrcs obj = extractSrcPath :: Value -> Either Elm2NixError String extractSrcPath val = case val of - String text -> Right $ toNixPath text + String text -> Right (toNixPath (Text.unpack text)) v -> Left $ UnexpectedValue v - toNixPath :: Text -> String - toNixPath = (\p -> if p == "." then "./." else p ) . Text.unpack + toNixPath :: FilePath -> FilePath + toNixPath path = + case path of + "." -> "./." + p@('.':_) -> p + p -> "./" <> p -- CMDs From 256138e70404989be1fd2cd1df9d3c168e987925 Mon Sep 17 00:00:00 2001 From: Marek Fajkus Date: Thu, 23 May 2019 18:25:09 +0200 Subject: [PATCH 08/21] move dirty patches to patchPhase --- data/default.nix | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/data/default.nix b/data/default.nix index 9c3d487..90dd724 100644 --- a/data/default.nix +++ b/data/default.nix @@ -25,13 +25,12 @@ let inherit versionsDat; }; - installPhase = let - elmfile = module: "\${srcdir}/\${builtins.replaceStrings ["."] ["/"] module}\${extension}"; + patchPhase = let # TODO: review naming elmJson = pkgs.lib.importJSON ./elm.json; elmJsonFile = pkgs.writeText "elm.json" (builtins.toJSON generatedElmJson); # TODO: hacky.. there might be a better way - genSrcs = xs: map (path: if path == "." then srcdir else builtins.replaceStrings [".." "/"] ["" ""] path) xs; + genSrcs = xs: map (path: if path == "." then srcdir else builtins.replaceStrings ["../" ".." "./" "."] ["" "" "" ""] path) xs; generatedElmJson = with pkgs.lib; if hasAttrByPath ["source-directories"] elmJson then # TODO: check if there isn't better function @@ -41,11 +40,15 @@ let else elmJson; in '' - mkdir -p \$out/share/doc - cp \${elmJsonFile} ./elm.json echo "Generating new elm.json..." cat elm.json + ''; + + installPhase = let + elmfile = module: "\${srcdir}/\${builtins.replaceStrings ["."] ["/"] module}\${extension}"; + in '' + mkdir -p \$out/share/doc \${lib.concatStrings (map (module: '' echo "compiling \${elmfile module}" From 58a2a19d0b1334736e523e79bb10a61883eba07d Mon Sep 17 00:00:00 2001 From: Marek Fajkus Date: Thu, 23 May 2019 21:34:47 +0200 Subject: [PATCH 09/21] improvements --- data/default.nix | 51 ++++++++++++++++++++++-------------------------- 1 file changed, 23 insertions(+), 28 deletions(-) diff --git a/data/default.nix b/data/default.nix index 90dd724..928e575 100644 --- a/data/default.nix +++ b/data/default.nix @@ -1,20 +1,21 @@ { nixpkgs ? , config ? {} }: - with (import nixpkgs config); - let mkDerivation = { elmSrcs ? ./elm-srcs.nix , srcs - , srcdir ? "./src" - , extension ? ".elm" + , srcdir ? "${srcdir}" , name , targets ? [] , versionsDat ? ./versions.dat }: - stdenv.mkDerivation { + let sanitizePath = str: lib.concatStringsSep "/" + (map (p: if p == "." then srcdir else p) + (builtins.filter (p: p != "..") + (lib.splitString "/" str))); + in stdenv.mkDerivation { inherit name srcs; sourceRoot = "."; @@ -26,44 +27,38 @@ let }; patchPhase = let - # TODO: review naming - elmJson = pkgs.lib.importJSON ./elm.json; - elmJsonFile = pkgs.writeText "elm.json" (builtins.toJSON generatedElmJson); - # TODO: hacky.. there might be a better way - genSrcs = xs: map (path: if path == "." then srcdir else builtins.replaceStrings ["../" ".." "./" "."] ["" "" "" ""] path) xs; - generatedElmJson = with pkgs.lib; - if hasAttrByPath ["source-directories"] elmJson then - # TODO: check if there isn't better function - attrsets.mapAttrs - (name: value: if name == "source-directories" then genSrcs value else value) - elmJson - else - elmJson; + elmJsonFile = with lib; + let elmjson = importJSON ./elm.json; + in writeText "elm.json" (builtins.toJSON + (if hasAttrByPath ["source-directories"] elmjson then + # TODO: check if there isn't better function + attrsets.mapAttrs (name: value: if name == "source-directories" then map sanitizePath value else value) elmjson + else + elmjson + )); in '' cp \${elmJsonFile} ./elm.json echo "Generating new elm.json..." cat elm.json ''; - installPhase = let - elmfile = module: "\${srcdir}/\${builtins.replaceStrings ["."] ["/"] module}\${extension}"; - in '' - mkdir -p \$out/share/doc + installPhase = '' + mkdir -p $out/share/doc - \${lib.concatStrings (map (module: '' - echo "compiling \${elmfile module}" - elm make \${elmfile module} --output \$out/\${module}.html --docs \$out/share/doc/\${module}.json + \${lib.concatStrings (map (module: + let fullmodule = sanitizePath module; + in '' + echo "compiling \${module}" + elm make \${fullmodule}.elm --output $out/\${fullmodule}.html --docs $out/share/doc/\${fullmodule}.json '') targets)} ''; }; in mkDerivation { name = "${name}"; - elmSrcs = ./elm-srcs.nix; # TODO: given we need to process elm.json via nix anyway # it might be better to just read this from elm.json? # - check if we're possible to get to elm.json # - consult with maitainer srcs = ${srcs}; - targets = ["Main"]; - srcdir = "${srcdir}"; + targets = ["./src/Main"]; } From 1c7ab690381a3d38c56f8b70bf46c69f0de82404 Mon Sep 17 00:00:00 2001 From: Marek Fajkus Date: Thu, 23 May 2019 21:38:43 +0200 Subject: [PATCH 10/21] fix targets in src --- data/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/default.nix b/data/default.nix index 928e575..b95d390 100644 --- a/data/default.nix +++ b/data/default.nix @@ -60,5 +60,5 @@ in mkDerivation { # - check if we're possible to get to elm.json # - consult with maitainer srcs = ${srcs}; - targets = ["./src/Main"]; + targets = ["./Main"]; } From b562beec16eeaba087b31f98598b82c871678f7d Mon Sep 17 00:00:00 2001 From: Marek Fajkus Date: Thu, 23 May 2019 21:58:53 +0200 Subject: [PATCH 11/21] simplify source-directories update --- data/default.nix | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/data/default.nix b/data/default.nix index b95d390..0ab182e 100644 --- a/data/default.nix +++ b/data/default.nix @@ -31,8 +31,7 @@ let let elmjson = importJSON ./elm.json; in writeText "elm.json" (builtins.toJSON (if hasAttrByPath ["source-directories"] elmjson then - # TODO: check if there isn't better function - attrsets.mapAttrs (name: value: if name == "source-directories" then map sanitizePath value else value) elmjson + elmjson // { source-directories = (map sanitizePath elmjson.source-directories); } else elmjson )); @@ -48,9 +47,9 @@ let \${lib.concatStrings (map (module: let fullmodule = sanitizePath module; in '' - echo "compiling \${module}" - elm make \${fullmodule}.elm --output $out/\${fullmodule}.html --docs $out/share/doc/\${fullmodule}.json - '') targets)} + echo "compiling \${module}" + elm make \${fullmodule}.elm --output $out/\${fullmodule}.html --docs $out/share/doc/\${fullmodule}.json + '') targets)} ''; }; in mkDerivation { From bb5bcc19b3671ceaad0608e648db7dffa37878ec Mon Sep 17 00:00:00 2001 From: Marek Fajkus Date: Thu, 23 May 2019 22:09:51 +0200 Subject: [PATCH 12/21] improve output file names --- data/default.nix | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/data/default.nix b/data/default.nix index 0ab182e..77f13a2 100644 --- a/data/default.nix +++ b/data/default.nix @@ -46,9 +46,10 @@ let \${lib.concatStrings (map (module: let fullmodule = sanitizePath module; + modulename = sanitizePath (lib.removePrefix "./" module); in '' echo "compiling \${module}" - elm make \${fullmodule}.elm --output $out/\${fullmodule}.html --docs $out/share/doc/\${fullmodule}.json + elm make \${fullmodule}.elm --output $out/\${modulename}.html --docs $out/share/doc/\${modulename}.json '') targets)} ''; }; From b65e410149fcf3358516ee6c8c2c67543bb6b39a Mon Sep 17 00:00:00 2001 From: Marek Fajkus Date: Fri, 24 May 2019 11:43:23 +0200 Subject: [PATCH 13/21] cleanup default.nix --- data/default.nix | 22 +++++----------------- 1 file changed, 5 insertions(+), 17 deletions(-) diff --git a/data/default.nix b/data/default.nix index 77f13a2..ed13c5d 100644 --- a/data/default.nix +++ b/data/default.nix @@ -12,9 +12,7 @@ let , versionsDat ? ./versions.dat }: let sanitizePath = str: lib.concatStringsSep "/" - (map (p: if p == "." then srcdir else p) - (builtins.filter (p: p != "..") - (lib.splitString "/" str))); + (map (p: if p == "." then srcdir else p) (builtins.filter (p: p != "..") (lib.splitString "/" str))); in stdenv.mkDerivation { inherit name srcs; sourceRoot = "."; @@ -27,17 +25,11 @@ let }; patchPhase = let - elmJsonFile = with lib; - let elmjson = importJSON ./elm.json; - in writeText "elm.json" (builtins.toJSON - (if hasAttrByPath ["source-directories"] elmjson then - elmjson // { source-directories = (map sanitizePath elmjson.source-directories); } - else - elmjson - )); + elmjson = let json = (lib.importJSON ./elm.json) // { source-directories = map sanitizePath srcs; }; + in writeText "elm.json" (builtins.toJSON json); in '' - cp \${elmJsonFile} ./elm.json - echo "Generating new elm.json..." + echo "Generating elm.json" + cp \${elmjson} ./elm.json cat elm.json ''; @@ -55,10 +47,6 @@ let }; in mkDerivation { name = "${name}"; - # TODO: given we need to process elm.json via nix anyway - # it might be better to just read this from elm.json? - # - check if we're possible to get to elm.json - # - consult with maitainer srcs = ${srcs}; targets = ["./Main"]; } From e1c290e3bb1becf6096adae05986cc981faa18b8 Mon Sep 17 00:00:00 2001 From: Marek Fajkus Date: Fri, 24 May 2019 12:13:14 +0200 Subject: [PATCH 14/21] fix syntax err --- data/default.nix | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/data/default.nix b/data/default.nix index ed13c5d..9ec8992 100644 --- a/data/default.nix +++ b/data/default.nix @@ -4,15 +4,16 @@ with (import nixpkgs config); let mkDerivation = - { elmSrcs ? ./elm-srcs.nix + { elmsrcs ? ./elm-srcs.nix , srcs - , srcdir ? "${srcdir}" + , srcdir ? "src" , name , targets ? [] , versionsDat ? ./versions.dat }: - let sanitizePath = str: lib.concatStringsSep "/" - (map (p: if p == "." then srcdir else p) (builtins.filter (p: p != "..") (lib.splitString "/" str))); + let sanitizePath = str: + let path = (builtins.filter (p: p != "..") (lib.splitString "/" str)); + in lib.concatStringsSep "/" (map (p: if p == "." then srcdir else p)) path; in stdenv.mkDerivation { inherit name srcs; sourceRoot = "."; @@ -20,7 +21,7 @@ let buildInputs = [ elmPackages.elm ]; buildPhase = pkgs.elmPackages.fetchElmDeps { - elmPackages = import elmSrcs; + elmPackages = import elmsrcs; inherit versionsDat; }; @@ -48,5 +49,6 @@ let in mkDerivation { name = "${name}"; srcs = ${srcs}; + srcdir = "${srcdir}"; targets = ["./Main"]; } From 7d6771156aa220fda3db3002d548550d6e1828e6 Mon Sep 17 00:00:00 2001 From: Marek Fajkus Date: Fri, 24 May 2019 12:20:57 +0200 Subject: [PATCH 15/21] fix syntax err --- data/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/data/default.nix b/data/default.nix index 9ec8992..2a3eb5e 100644 --- a/data/default.nix +++ b/data/default.nix @@ -12,8 +12,8 @@ let , versionsDat ? ./versions.dat }: let sanitizePath = str: - let path = (builtins.filter (p: p != "..") (lib.splitString "/" str)); - in lib.concatStringsSep "/" (map (p: if p == "." then srcdir else p)) path; + let path = builtins.filter (p: p != "..") (lib.splitString "/" str); + in lib.concatStringsSep "/" (map (p: if p == "." then srcdir else p) path); in stdenv.mkDerivation { inherit name srcs; sourceRoot = "."; From 571cac6b871d76bb71a72065b3d922783b33269f Mon Sep 17 00:00:00 2001 From: Marek Fajkus Date: Fri, 24 May 2019 12:21:59 +0200 Subject: [PATCH 16/21] move pathPhase above buildPhase --- data/default.nix | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/data/default.nix b/data/default.nix index 2a3eb5e..c03a230 100644 --- a/data/default.nix +++ b/data/default.nix @@ -20,11 +20,6 @@ let buildInputs = [ elmPackages.elm ]; - buildPhase = pkgs.elmPackages.fetchElmDeps { - elmPackages = import elmsrcs; - inherit versionsDat; - }; - patchPhase = let elmjson = let json = (lib.importJSON ./elm.json) // { source-directories = map sanitizePath srcs; }; in writeText "elm.json" (builtins.toJSON json); @@ -34,6 +29,11 @@ let cat elm.json ''; + buildPhase = pkgs.elmPackages.fetchElmDeps { + elmPackages = import elmsrcs; + inherit versionsDat; + }; + installPhase = '' mkdir -p $out/share/doc From 2f46543a6cc22493a60f4dab27d7b5d4f7a2c316 Mon Sep 17 00:00:00 2001 From: Marek Fajkus Date: Sat, 25 May 2019 17:06:09 +0200 Subject: [PATCH 17/21] unify codestyle --- data/default.nix | 5 +++++ src/Elm2Nix.hs | 50 +++++++++++++++++++++--------------------------- 2 files changed, 27 insertions(+), 28 deletions(-) diff --git a/data/default.nix b/data/default.nix index c03a230..ee0f9f3 100644 --- a/data/default.nix +++ b/data/default.nix @@ -49,6 +49,11 @@ let in mkDerivation { name = "${name}"; srcs = ${srcs}; + # Generated by elm2nix + # should be *name* of current directory is used to find sources srcdir = "${srcdir}"; + # Please configure this line + # Should be relative path as a string to modules you want to compile + # excluding `.elm` extension targets = ["./Main"]; } diff --git a/src/Elm2Nix.hs b/src/Elm2Nix.hs index f29587a..5bdce31 100644 --- a/src/Elm2Nix.hs +++ b/src/Elm2Nix.hs @@ -70,7 +70,6 @@ parseElmJsonDeps obj = parseDeps (Object hm) = mapM (uncurry parseDep) (HM.toList hm) parseDeps v = Left (UnexpectedValue v) --- TODO: there is likely to be even better abstraction tryLookup :: HashMap Text Value -> Text -> Either Elm2NixError Value tryLookup hm key = maybeToRight (KeyNotFound key) (HM.lookup key hm) where @@ -83,27 +82,23 @@ parseElmJsonSrcs obj = case obj of Object hm -> do case tryLookup hm "source-directories" of - -- the `source-directories` part of elm.json is optional - -- if user don't specified this value `src` directory is the default - Left _ -> Right $ pure "./src" - Right srcs -> - case srcs of - Array vec -> mapM extractSrcPath vec - v -> Left $ UnexpectedValue v + Left _ -> Right Vector.empty + Right (Array vec) -> mapM extractSrcPath vec + Right v -> Left (UnexpectedValue v) v -> Left $ UnexpectedValue v where extractSrcPath :: Value -> Either Elm2NixError String extractSrcPath val = case val of - String text -> Right (toNixPath (Text.unpack text)) - v -> Left $ UnexpectedValue v + String text -> Right (toNixPath (Text.unpack text)) + v -> Left (UnexpectedValue v) toNixPath :: FilePath -> FilePath toNixPath path = case path of - "." -> "./." - p@('.':_) -> p - p -> "./" <> p + "." -> "./." + p@('.':_) -> p + p -> "./" <> p -- CMDs @@ -136,30 +131,29 @@ initialize = runCLI $ do -- | Converts Package.Name to Nix friendly name baseName :: Text baseName = "elm-app" + version :: Text version = "0.1.0" + toNixName :: Text -> Text toNixName = Text.replace "/" "-" + name :: String name = Text.unpack (toNixName baseName <> "-" <> version) + getSrcDir :: Vector FilePath -> IO FilePath - getSrcDir dirs = - case Vector.toList dirs of - [] -> pure "./src" -- in theory redundant - [ dir ] -> pure dir - xs@(h:t) -> - if "./." `elem` xs then do - -- Nix creates dir named after current directory - -- if `srcs` contains `./.` - path <- liftIO System.Directory.getCurrentDirectory - pure (lastDir path) - else - -- We can't really tell which one to choose - -- so we guess it's the first one - pure h + getSrcDir dirs + | Vector.null dirs = pure "./src" + | "./." `Vector.elem` dirs || "." `Vector.elem` dirs = + -- Nix creates dir named after current directory if `srcs` contains `./.` + lastDir <$> liftIO System.Directory.getCurrentDirectory + | otherwise = + -- Can't fail as there is case for Vec.null! + pure (Vector.head dirs) + lastDir :: FilePath -> FilePath lastDir = foldl (\path c -> if c == '/' then "" else path <> [c]) "" - -- TODO: Improve + stringifySrcs :: Vector FilePath -> String stringifySrcs xs = "[\n" From 9bd289e80c534c24398bc803a52503e1a5669e03 Mon Sep 17 00:00:00 2001 From: Marek Fajkus Date: Sat, 25 May 2019 19:08:25 +0200 Subject: [PATCH 18/21] add test --- elm2nix.cabal | 11 ---- scripts/tests.sh | 8 +++ test/Spec.hs | 2 - test/lib/default.nix | 43 ++++++++++++++ test/lib/elm-srcs.nix | 7 +++ test/lib/versions.dat | Bin 0 -> 103802 bytes test/source-directories/a-src/Main.elm | 6 ++ test/source-directories/a-src/default.nix | 63 +++++++++++++++++++++ test/source-directories/a-src/elm-srcs.nix | 37 ++++++++++++ test/source-directories/a-src/elm.json | 25 ++++++++ test/source-directories/a-src/versions.dat | Bin 0 -> 103802 bytes test/source-directories/b-src/src/Text.elm | 3 + 12 files changed, 192 insertions(+), 13 deletions(-) delete mode 100644 test/Spec.hs create mode 100644 test/lib/default.nix create mode 100644 test/lib/elm-srcs.nix create mode 100644 test/lib/versions.dat create mode 100644 test/source-directories/a-src/Main.elm create mode 100644 test/source-directories/a-src/default.nix create mode 100644 test/source-directories/a-src/elm-srcs.nix create mode 100644 test/source-directories/a-src/elm.json create mode 100644 test/source-directories/a-src/versions.dat create mode 100644 test/source-directories/b-src/src/Text.elm diff --git a/elm2nix.cabal b/elm2nix.cabal index caee9e8..3ee0294 100644 --- a/elm2nix.cabal +++ b/elm2nix.cabal @@ -74,14 +74,3 @@ executable elm2nix , here , ansi-wl-pprint default-language: Haskell2010 - -test-suite elm2nix-test - type: exitcode-stdio-1.0 - main-is: Spec.hs - hs-source-dirs: - test - ghc-options: -threaded -rtsopts -with-rtsopts=-N - build-depends: - base >= 4.7 && < 5 - , elm2nix - default-language: Haskell2010 diff --git a/scripts/tests.sh b/scripts/tests.sh index 26e49b4..232d7cb 100755 --- a/scripts/tests.sh +++ b/scripts/tests.sh @@ -27,3 +27,11 @@ pushd $MYTMPDIR/elm-todomvc nix-build checkfile ./result/Main.html popd + +pushd test/source-directories/a-src + elm2nix init > default.nix + elm2nix convert > elm-srcs.nix + elm2nix snapshot > versions.dat + nix-build + checkfile ./result/Main.html +popd diff --git a/test/Spec.hs b/test/Spec.hs deleted file mode 100644 index cd4753f..0000000 --- a/test/Spec.hs +++ /dev/null @@ -1,2 +0,0 @@ -main :: IO () -main = putStrLn "Test suite not yet implemented" diff --git a/test/lib/default.nix b/test/lib/default.nix new file mode 100644 index 0000000..8e88584 --- /dev/null +++ b/test/lib/default.nix @@ -0,0 +1,43 @@ +{ nixpkgs ? +, config ? {} +}: + +with (import nixpkgs config); + +let + mkDerivation = + { srcs ? ./elm-srcs.nix + , src + , name + , srcdir ? "./src" + , targets ? [] + , versionsDat ? ./versions.dat + }: + stdenv.mkDerivation { + inherit name src; + + buildInputs = [ elmPackages.elm ]; + + buildPhase = pkgs.elmPackages.fetchElmDeps { + elmPackages = import srcs; + inherit versionsDat; + }; + + installPhase = let + elmfile = module: "${srcdir}/${builtins.replaceStrings ["."] ["/"] module}.elm"; + in '' + mkdir -p $out/share/doc + ${lib.concatStrings (map (module: '' + echo "compiling ${elmfile module}" + elm make ${elmfile module} --output $out/${module}.html --docs $out/share/doc/${module}.json + '') targets)} + ''; + }; +in mkDerivation { + name = "elm-app-0.1.0"; + srcs = ./elm-srcs.nix; + src = ./.; + targets = ["Main"]; + srcdir = "./src"; +} + diff --git a/test/lib/elm-srcs.nix b/test/lib/elm-srcs.nix new file mode 100644 index 0000000..1b7ad75 --- /dev/null +++ b/test/lib/elm-srcs.nix @@ -0,0 +1,7 @@ +{ + + "elm/core" = { + sha256 = "1l0qdbczw91kzz8sx5d5zwz9x662bspy7p21dsr3f2rigxiix2as"; + version = "1.0.2"; + }; +} diff --git a/test/lib/versions.dat b/test/lib/versions.dat new file mode 100644 index 0000000000000000000000000000000000000000..b074d451f623b94bad8111a90f50d5da6ab7f847 GIT binary patch literal 103802 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

n{uBkyiR1Q9kYmB0*O><#`^&N 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 IAiON)e;nKo`v3p{ literal 0 HcmV?d00001 diff --git a/test/source-directories/a-src/Main.elm b/test/source-directories/a-src/Main.elm new file mode 100644 index 0000000..c0580c6 --- /dev/null +++ b/test/source-directories/a-src/Main.elm @@ -0,0 +1,6 @@ +module Main exposing (main) + +import Html exposing (..) +import Text + +main = text Text.hello diff --git a/test/source-directories/a-src/default.nix b/test/source-directories/a-src/default.nix new file mode 100644 index 0000000..acb8ca8 --- /dev/null +++ b/test/source-directories/a-src/default.nix @@ -0,0 +1,63 @@ +{ nixpkgs ? +, config ? {} +}: +with (import nixpkgs config); +let + mkDerivation = + { elmsrcs ? ./elm-srcs.nix + , srcs + , srcdir ? "src" + , name + , targets ? [] + , versionsDat ? ./versions.dat + }: + let sanitizePath = str: + let path = builtins.filter (p: p != "..") (lib.splitString "/" str); + in lib.concatStringsSep "/" (map (p: if p == "." then srcdir else p) path); + in stdenv.mkDerivation { + inherit name srcs; + sourceRoot = "."; + + buildInputs = [ elmPackages.elm ]; + + patchPhase = let + elmjson = let json = (lib.importJSON ./elm.json) // { source-directories = map sanitizePath srcs; }; + in writeText "elm.json" (builtins.toJSON json); + in '' + echo "Generating elm.json" + cp ${elmjson} ./elm.json + cat elm.json + ''; + + buildPhase = pkgs.elmPackages.fetchElmDeps { + elmPackages = import elmsrcs; + inherit versionsDat; + }; + + installPhase = '' + mkdir -p $out/share/doc + + ${lib.concatStrings (map (module: + let fullmodule = sanitizePath module; + modulename = sanitizePath (lib.removePrefix "./" module); + in '' + echo "compiling ${module}" + elm make ${fullmodule}.elm --output $out/${modulename}.html --docs $out/share/doc/${modulename}.json + '') targets)} + ''; + }; +in mkDerivation { + name = "elm-app-0.1.0"; + srcs = [ + ./. + ../b-src/src + ]; + # Generated by elm2nix + # should be *name* of current directory is used to find sources + srcdir = "a-src"; + # Please configure this line + # Should be relative path as a string to modules you want to compile + # excluding `.elm` extension + targets = ["./Main"]; +} + diff --git a/test/source-directories/a-src/elm-srcs.nix b/test/source-directories/a-src/elm-srcs.nix new file mode 100644 index 0000000..f79194b --- /dev/null +++ b/test/source-directories/a-src/elm-srcs.nix @@ -0,0 +1,37 @@ +{ + + "elm/html" = { + sha256 = "1n3gpzmpqqdsldys4ipgyl1zacn0kbpc3g4v3hdpiyfjlgh8bf3k"; + version = "1.0.0"; + }; + + "elm/browser" = { + sha256 = "1zlmx672glg7fdgkvh5jm47y85pv7pdfr5mkhg6x7ar6k000vyka"; + version = "1.0.1"; + }; + + "elm/core" = { + sha256 = "1l0qdbczw91kzz8sx5d5zwz9x662bspy7p21dsr3f2rigxiix2as"; + version = "1.0.2"; + }; + + "elm/json" = { + sha256 = "0kjwrz195z84kwywaxhhlnpl3p251qlbm5iz6byd6jky2crmyqyh"; + version = "1.1.3"; + }; + + "elm/url" = { + sha256 = "0av8x5syid40sgpl5vd7pry2rq0q4pga28b4yykn9gd9v12rs3l4"; + version = "1.0.0"; + }; + + "elm/time" = { + sha256 = "0vch7i86vn0x8b850w1p69vplll1bnbkp8s383z7pinyg94cm2z1"; + version = "1.0.0"; + }; + + "elm/virtual-dom" = { + sha256 = "0q1v5gi4g336bzz1lgwpn5b1639lrn63d8y6k6pimcyismp2i1yg"; + version = "1.0.2"; + }; +} diff --git a/test/source-directories/a-src/elm.json b/test/source-directories/a-src/elm.json new file mode 100644 index 0000000..3adbb7a --- /dev/null +++ b/test/source-directories/a-src/elm.json @@ -0,0 +1,25 @@ +{ + "type": "application", + "source-directories": [ + ".", + "../b-src/src" + ], + "elm-version": "0.19.0", + "dependencies": { + "direct": { + "elm/browser": "1.0.1", + "elm/core": "1.0.2", + "elm/html": "1.0.0" + }, + "indirect": { + "elm/json": "1.1.3", + "elm/time": "1.0.0", + "elm/url": "1.0.0", + "elm/virtual-dom": "1.0.2" + } + }, + "test-dependencies": { + "direct": {}, + "indirect": {} + } +} diff --git a/test/source-directories/a-src/versions.dat b/test/source-directories/a-src/versions.dat new file mode 100644 index 0000000000000000000000000000000000000000..b074d451f623b94bad8111a90f50d5da6ab7f847 GIT binary patch literal 103802 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

n{uBkyiR1Q9kYmB0*O><#`^&N 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 IAiON)e;nKo`v3p{ literal 0 HcmV?d00001 diff --git a/test/source-directories/b-src/src/Text.elm b/test/source-directories/b-src/src/Text.elm new file mode 100644 index 0000000..1a39c3f --- /dev/null +++ b/test/source-directories/b-src/src/Text.elm @@ -0,0 +1,3 @@ +module Text exposing (hello) + +hello = "Hello world!" From 778695593988db1a0bfe1e1e4ad4616db6faf21c Mon Sep 17 00:00:00 2001 From: Marek Fajkus Date: Sat, 25 May 2019 19:10:18 +0200 Subject: [PATCH 19/21] gitignore stuff generated during tests --- test/.gitignore | 2 + test/source-directories/a-src/default.nix | 63 --------------------- test/source-directories/a-src/elm-srcs.nix | 37 ------------ test/source-directories/a-src/versions.dat | Bin 103802 -> 0 bytes 4 files changed, 2 insertions(+), 100 deletions(-) create mode 100644 test/.gitignore delete mode 100644 test/source-directories/a-src/default.nix delete mode 100644 test/source-directories/a-src/elm-srcs.nix delete mode 100644 test/source-directories/a-src/versions.dat diff --git a/test/.gitignore b/test/.gitignore new file mode 100644 index 0000000..da7980e --- /dev/null +++ b/test/.gitignore @@ -0,0 +1,2 @@ +*.nix +*.dat diff --git a/test/source-directories/a-src/default.nix b/test/source-directories/a-src/default.nix deleted file mode 100644 index acb8ca8..0000000 --- a/test/source-directories/a-src/default.nix +++ /dev/null @@ -1,63 +0,0 @@ -{ nixpkgs ? -, config ? {} -}: -with (import nixpkgs config); -let - mkDerivation = - { elmsrcs ? ./elm-srcs.nix - , srcs - , srcdir ? "src" - , name - , targets ? [] - , versionsDat ? ./versions.dat - }: - let sanitizePath = str: - let path = builtins.filter (p: p != "..") (lib.splitString "/" str); - in lib.concatStringsSep "/" (map (p: if p == "." then srcdir else p) path); - in stdenv.mkDerivation { - inherit name srcs; - sourceRoot = "."; - - buildInputs = [ elmPackages.elm ]; - - patchPhase = let - elmjson = let json = (lib.importJSON ./elm.json) // { source-directories = map sanitizePath srcs; }; - in writeText "elm.json" (builtins.toJSON json); - in '' - echo "Generating elm.json" - cp ${elmjson} ./elm.json - cat elm.json - ''; - - buildPhase = pkgs.elmPackages.fetchElmDeps { - elmPackages = import elmsrcs; - inherit versionsDat; - }; - - installPhase = '' - mkdir -p $out/share/doc - - ${lib.concatStrings (map (module: - let fullmodule = sanitizePath module; - modulename = sanitizePath (lib.removePrefix "./" module); - in '' - echo "compiling ${module}" - elm make ${fullmodule}.elm --output $out/${modulename}.html --docs $out/share/doc/${modulename}.json - '') targets)} - ''; - }; -in mkDerivation { - name = "elm-app-0.1.0"; - srcs = [ - ./. - ../b-src/src - ]; - # Generated by elm2nix - # should be *name* of current directory is used to find sources - srcdir = "a-src"; - # Please configure this line - # Should be relative path as a string to modules you want to compile - # excluding `.elm` extension - targets = ["./Main"]; -} - diff --git a/test/source-directories/a-src/elm-srcs.nix b/test/source-directories/a-src/elm-srcs.nix deleted file mode 100644 index f79194b..0000000 --- a/test/source-directories/a-src/elm-srcs.nix +++ /dev/null @@ -1,37 +0,0 @@ -{ - - "elm/html" = { - sha256 = "1n3gpzmpqqdsldys4ipgyl1zacn0kbpc3g4v3hdpiyfjlgh8bf3k"; - version = "1.0.0"; - }; - - "elm/browser" = { - sha256 = "1zlmx672glg7fdgkvh5jm47y85pv7pdfr5mkhg6x7ar6k000vyka"; - version = "1.0.1"; - }; - - "elm/core" = { - sha256 = "1l0qdbczw91kzz8sx5d5zwz9x662bspy7p21dsr3f2rigxiix2as"; - version = "1.0.2"; - }; - - "elm/json" = { - sha256 = "0kjwrz195z84kwywaxhhlnpl3p251qlbm5iz6byd6jky2crmyqyh"; - version = "1.1.3"; - }; - - "elm/url" = { - sha256 = "0av8x5syid40sgpl5vd7pry2rq0q4pga28b4yykn9gd9v12rs3l4"; - version = "1.0.0"; - }; - - "elm/time" = { - sha256 = "0vch7i86vn0x8b850w1p69vplll1bnbkp8s383z7pinyg94cm2z1"; - version = "1.0.0"; - }; - - "elm/virtual-dom" = { - sha256 = "0q1v5gi4g336bzz1lgwpn5b1639lrn63d8y6k6pimcyismp2i1yg"; - version = "1.0.2"; - }; -} diff --git a/test/source-directories/a-src/versions.dat b/test/source-directories/a-src/versions.dat deleted file mode 100644 index b074d451f623b94bad8111a90f50d5da6ab7f847..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 103802 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

n{uBkyiR1Q9kYmB0*O><#`^&N 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 IAiON)e;nKo`v3p{ From 56be5d77a81714d1c130334e325da5236487aab5 Mon Sep 17 00:00:00 2001 From: Marek Fajkus Date: Sun, 29 Sep 2019 14:35:21 +0200 Subject: [PATCH 20/21] bring elmsrcs back (previously srcs) --- data/default.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/data/default.nix b/data/default.nix index 5cd4351..50cf00b 100644 --- a/data/default.nix +++ b/data/default.nix @@ -56,6 +56,7 @@ let }; in mkDerivation { name = "${name}"; + elmsrcs = ./elm-srcs.nix; srcs = ${srcs}; # Generated by elm2nix # should be *name* of current directory is used to find sources From f9511bd49e484b5bdfa271e473ed52b93c7b04b9 Mon Sep 17 00:00:00 2001 From: Marek Fajkus Date: Sun, 29 Sep 2019 18:17:34 +0200 Subject: [PATCH 21/21] remove lib test --- test/lib/default.nix | 43 ------------------------------------------ test/lib/elm-srcs.nix | 7 ------- test/lib/versions.dat | Bin 103802 -> 0 bytes 3 files changed, 50 deletions(-) delete mode 100644 test/lib/default.nix delete mode 100644 test/lib/elm-srcs.nix delete mode 100644 test/lib/versions.dat diff --git a/test/lib/default.nix b/test/lib/default.nix deleted file mode 100644 index 8e88584..0000000 --- a/test/lib/default.nix +++ /dev/null @@ -1,43 +0,0 @@ -{ nixpkgs ? -, config ? {} -}: - -with (import nixpkgs config); - -let - mkDerivation = - { srcs ? ./elm-srcs.nix - , src - , name - , srcdir ? "./src" - , targets ? [] - , versionsDat ? ./versions.dat - }: - stdenv.mkDerivation { - inherit name src; - - buildInputs = [ elmPackages.elm ]; - - buildPhase = pkgs.elmPackages.fetchElmDeps { - elmPackages = import srcs; - inherit versionsDat; - }; - - installPhase = let - elmfile = module: "${srcdir}/${builtins.replaceStrings ["."] ["/"] module}.elm"; - in '' - mkdir -p $out/share/doc - ${lib.concatStrings (map (module: '' - echo "compiling ${elmfile module}" - elm make ${elmfile module} --output $out/${module}.html --docs $out/share/doc/${module}.json - '') targets)} - ''; - }; -in mkDerivation { - name = "elm-app-0.1.0"; - srcs = ./elm-srcs.nix; - src = ./.; - targets = ["Main"]; - srcdir = "./src"; -} - diff --git a/test/lib/elm-srcs.nix b/test/lib/elm-srcs.nix deleted file mode 100644 index 1b7ad75..0000000 --- a/test/lib/elm-srcs.nix +++ /dev/null @@ -1,7 +0,0 @@ -{ - - "elm/core" = { - sha256 = "1l0qdbczw91kzz8sx5d5zwz9x662bspy7p21dsr3f2rigxiix2as"; - version = "1.0.2"; - }; -} diff --git a/test/lib/versions.dat b/test/lib/versions.dat deleted file mode 100644 index b074d451f623b94bad8111a90f50d5da6ab7f847..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 103802 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

n{uBkyiR1Q9kYmB0*O><#`^&N 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 IAiON)e;nKo`v3p{