Loading pkgs/development/compilers/elm/default.nix +1 −0 Original line number Diff line number Diff line Loading @@ -247,6 +247,7 @@ in lib.makeScope pkgs.newScope (self: with self; { # see upstream issue https://github.com/dillonkearns/elm-pages/issues/305 for dealing with the read-only problem preFixup = '' patch $out/lib/node_modules/elm-pages/generator/src/codegen.js ${./packages/elm-pages-fix-read-only.patch} patch $out/lib/node_modules/elm-pages/generator/src/init.js ${./packages/elm-pages-fix-init-read-only.patch} ''; postFixup = '' Loading pkgs/development/compilers/elm/packages/elm-pages-fix-init-read-only.patch 0 → 100644 +39 −0 Original line number Diff line number Diff line diff --git a/generator/src/init.js b/generator/src/init.js index 06386ff..7127dae 100644 --- a/generator/src/init.js +++ b/generator/src/init.js @@ -6,6 +6,20 @@ import { fileURLToPath } from "url"; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); +let walknDo = function(somePath, doStuff) { + doStuff(somePath, true); + const dir = fs.readdirSync(somePath) + dir.forEach((i) => { + let p = path.join(somePath, i); + const s = fs.statSync(p) + if (s.isDirectory()) { + walknDo(p, doStuff) + } else { + doStuff(p); + } + }); +} + /** * @param {string} name */ @@ -18,6 +32,13 @@ export async function run(name) { if (!fs.existsSync(name)) { try { await fsExtra.copy(template, appRoot); + walknDo(appRoot, (file, isDir) => { + if (isDir) { + fs.chmodSync(file, 0o755); + } else { + fs.chmodSync(file, 0o644); + } + }); fs.renameSync( path.resolve(appRoot, "gitignore"), path.resolve(appRoot, ".gitignore") pkgs/development/compilers/elm/packages/elm-pages-fix-read-only.patch +27 −47 Original line number Diff line number Diff line diff --git a/generator/src/codegen.js b/generator/src/codegen.js index a0ef8806e..fe00ac904 100644 index baf5368..e5edf4d 100644 --- a/generator/src/codegen.js +++ b/generator/src/codegen.js @@ -20,33 +20,33 @@ async function generate(basePath) { @@ -37,9 +37,9 @@ export async function generate(basePath) { copyToBoth("SiteConfig.elm"), const uiFileContent = elmPagesUiFile(); await Promise.all([ - fs.promises.copyFile( - path.join(__dirname, `./Page.elm`), - `./.elm-pages/Page.elm` + fs.promises.writeFile( + `./.elm-pages/Page.elm`, + fs.readFileSync(path.join(__dirname, `./Page.elm`)) ), fs.promises.writeFile("./.elm-pages/Pages.elm", uiFileContent), - fs.promises.copyFile( - path.join(__dirname, `./elm-application.json`), - `./elm-stuff/elm-pages/elm-application.json` Loading @@ -20,40 +13,27 @@ index a0ef8806e..fe00ac904 100644 + `./elm-stuff/elm-pages/elm-application.json`, + fs.readFileSync(path.join(__dirname, `./elm-application.json`)) ), - fs.promises.copyFile( - path.join(__dirname, `./Page.elm`), - `./elm-stuff/elm-pages/.elm-pages/Page.elm` + fs.promises.writeFile( + `./elm-stuff/elm-pages/.elm-pages/Page.elm`, + fs.readFileSync(path.join(__dirname, `./Page.elm`)) ), - fs.promises.copyFile( - path.join(__dirname, `./SharedTemplate.elm`), - `./.elm-pages/SharedTemplate.elm` + fs.promises.writeFile( + `./.elm-pages/SharedTemplate.elm`, + fs.readFileSync(path.join(__dirname, `./SharedTemplate.elm`)) ), - fs.promises.copyFile( - path.join(__dirname, `./SharedTemplate.elm`), - `./elm-stuff/elm-pages/.elm-pages/SharedTemplate.elm` + fs.promises.writeFile( + `./elm-stuff/elm-pages/.elm-pages/SharedTemplate.elm`, + fs.readFileSync(path.join(__dirname, `./SharedTemplate.elm`)) ), - fs.promises.copyFile( - path.join(__dirname, `./SiteConfig.elm`), - `./.elm-pages/SiteConfig.elm` + fs.promises.writeFile( + `./.elm-pages/SiteConfig.elm`, + fs.readFileSync(path.join(__dirname, `./SiteConfig.elm`)) ), - fs.promises.copyFile( - path.join(__dirname, `./SiteConfig.elm`), - `./elm-stuff/elm-pages/.elm-pages/SiteConfig.elm` + fs.promises.writeFile( + `./elm-stuff/elm-pages/.elm-pages/SiteConfig.elm`, + fs.readFileSync(path.join(__dirname, `./SiteConfig.elm`)) ), fs.promises.writeFile("./.elm-pages/Pages.elm", uiFileContent), // write `Pages.elm` with cli interface fs.promises.writeFile( @@ -82,9 +82,9 @@ function writeFetcherModules(basePath, fetcherData) { } async function newCopyBoth(modulePath) { - await fs.promises.copyFile( - path.join(__dirname, modulePath), - path.join(`./elm-stuff/elm-pages/client/.elm-pages/`, modulePath) + await fs.promises.writeFile( + path.join(`./elm-stuff/elm-pages/client/.elm-pages/`, modulePath), + fs.readFileSync(path.join(__dirname, modulePath)) ); } @@ -197,7 +197,7 @@ async function copyFileEnsureDir(from, to) { await fs.promises.mkdir(path.dirname(to), { recursive: true, }); - await fs.promises.copyFile(from, to); + await fs.promises.writeFile(to, fs.readFileSync(from)); } /** pkgs/development/compilers/elm/packages/elm-srcs.nix +22 −22 Original line number Diff line number Diff line Loading @@ -5,9 +5,14 @@ version = "1.0.0"; }; "elm/json" = { sha256 = "1a107nmm905dih4w4mjjkkpdcjbgaf5qjvr7fl30kkpkckfjjnrw"; version = "1.1.2"; "elm/browser" = { sha256 = "1zlmx672glg7fdgkvh5jm47y85pv7pdfr5mkhg6x7ar6k000vyka"; version = "1.0.1"; }; "elm/core" = { sha256 = "1l0qdbczw91kzz8sx5d5zwz9x662bspy7p21dsr3f2rigxiix2as"; version = "1.0.2"; }; "elm/html" = { Loading @@ -15,9 +20,14 @@ version = "1.0.0"; }; "elm/svg" = { sha256 = "1cwcj73p61q45wqwgqvrvz3aypjyy3fw732xyxdyj6s256hwkn0k"; version = "1.0.1"; "elm/http" = { sha256 = "008bs76mnp48b4dw8qwjj4fyvzbxvlrl4xpa2qh1gg2kfwyw56v1"; version = "2.0.0"; }; "elm/json" = { sha256 = "1a107nmm905dih4w4mjjkkpdcjbgaf5qjvr7fl30kkpkckfjjnrw"; version = "1.1.2"; }; "elm/project-metadata-utils" = { Loading @@ -25,21 +35,11 @@ version = "1.0.0"; }; "elm/browser" = { sha256 = "1zlmx672glg7fdgkvh5jm47y85pv7pdfr5mkhg6x7ar6k000vyka"; "elm/svg" = { sha256 = "1cwcj73p61q45wqwgqvrvz3aypjyy3fw732xyxdyj6s256hwkn0k"; version = "1.0.1"; }; "elm/core" = { sha256 = "1l0qdbczw91kzz8sx5d5zwz9x662bspy7p21dsr3f2rigxiix2as"; version = "1.0.2"; }; "elm/http" = { sha256 = "008bs76mnp48b4dw8qwjj4fyvzbxvlrl4xpa2qh1gg2kfwyw56v1"; version = "2.0.0"; }; "elm/bytes" = { sha256 = "040d7irrawcbnq9jxhzx8p9qacdlw5bncy6lgndd6inm53rvvwbp"; version = "1.0.7"; Loading @@ -55,13 +55,13 @@ version = "1.1.0"; }; "elm/url" = { sha256 = "0av8x5syid40sgpl5vd7pry2rq0q4pga28b4yykn9gd9v12rs3l4"; "elm/time" = { sha256 = "0vch7i86vn0x8b850w1p69vplll1bnbkp8s383z7pinyg94cm2z1"; version = "1.0.0"; }; "elm/time" = { sha256 = "0vch7i86vn0x8b850w1p69vplll1bnbkp8s383z7pinyg94cm2z1"; "elm/url" = { sha256 = "0av8x5syid40sgpl5vd7pry2rq0q4pga28b4yykn9gd9v12rs3l4"; version = "1.0.0"; }; Loading pkgs/development/compilers/elm/packages/elm.nix +3 −3 Original line number Diff line number Diff line { mkDerivation, ansi-terminal, ansi-wl-pprint, base, binary , bytestring, containers, directory, edit-distance, fetchgit , file-embed, filelock, filepath, ghc-prim, haskeline, HTTP , http-client, http-client-tls, http-types, language-glsl, mtl , http-client, http-client-tls, http-types, language-glsl, lib, mtl , network, parsec, process, raw-strings-qq, scientific, SHA , snap-core, snap-server, lib, template-haskell, time , snap-core, snap-server, template-haskell, time , unordered-containers, utf8-string, vector, zip-archive }: mkDerivation { pname = "elm"; version = "0.19.1"; Loading @@ -29,4 +28,5 @@ mkDerivation { homepage = "https://elm-lang.org"; description = "The `elm` command line interface"; license = lib.licenses.bsd3; mainProgram = "elm"; } Loading
pkgs/development/compilers/elm/default.nix +1 −0 Original line number Diff line number Diff line Loading @@ -247,6 +247,7 @@ in lib.makeScope pkgs.newScope (self: with self; { # see upstream issue https://github.com/dillonkearns/elm-pages/issues/305 for dealing with the read-only problem preFixup = '' patch $out/lib/node_modules/elm-pages/generator/src/codegen.js ${./packages/elm-pages-fix-read-only.patch} patch $out/lib/node_modules/elm-pages/generator/src/init.js ${./packages/elm-pages-fix-init-read-only.patch} ''; postFixup = '' Loading
pkgs/development/compilers/elm/packages/elm-pages-fix-init-read-only.patch 0 → 100644 +39 −0 Original line number Diff line number Diff line diff --git a/generator/src/init.js b/generator/src/init.js index 06386ff..7127dae 100644 --- a/generator/src/init.js +++ b/generator/src/init.js @@ -6,6 +6,20 @@ import { fileURLToPath } from "url"; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); +let walknDo = function(somePath, doStuff) { + doStuff(somePath, true); + const dir = fs.readdirSync(somePath) + dir.forEach((i) => { + let p = path.join(somePath, i); + const s = fs.statSync(p) + if (s.isDirectory()) { + walknDo(p, doStuff) + } else { + doStuff(p); + } + }); +} + /** * @param {string} name */ @@ -18,6 +32,13 @@ export async function run(name) { if (!fs.existsSync(name)) { try { await fsExtra.copy(template, appRoot); + walknDo(appRoot, (file, isDir) => { + if (isDir) { + fs.chmodSync(file, 0o755); + } else { + fs.chmodSync(file, 0o644); + } + }); fs.renameSync( path.resolve(appRoot, "gitignore"), path.resolve(appRoot, ".gitignore")
pkgs/development/compilers/elm/packages/elm-pages-fix-read-only.patch +27 −47 Original line number Diff line number Diff line diff --git a/generator/src/codegen.js b/generator/src/codegen.js index a0ef8806e..fe00ac904 100644 index baf5368..e5edf4d 100644 --- a/generator/src/codegen.js +++ b/generator/src/codegen.js @@ -20,33 +20,33 @@ async function generate(basePath) { @@ -37,9 +37,9 @@ export async function generate(basePath) { copyToBoth("SiteConfig.elm"), const uiFileContent = elmPagesUiFile(); await Promise.all([ - fs.promises.copyFile( - path.join(__dirname, `./Page.elm`), - `./.elm-pages/Page.elm` + fs.promises.writeFile( + `./.elm-pages/Page.elm`, + fs.readFileSync(path.join(__dirname, `./Page.elm`)) ), fs.promises.writeFile("./.elm-pages/Pages.elm", uiFileContent), - fs.promises.copyFile( - path.join(__dirname, `./elm-application.json`), - `./elm-stuff/elm-pages/elm-application.json` Loading @@ -20,40 +13,27 @@ index a0ef8806e..fe00ac904 100644 + `./elm-stuff/elm-pages/elm-application.json`, + fs.readFileSync(path.join(__dirname, `./elm-application.json`)) ), - fs.promises.copyFile( - path.join(__dirname, `./Page.elm`), - `./elm-stuff/elm-pages/.elm-pages/Page.elm` + fs.promises.writeFile( + `./elm-stuff/elm-pages/.elm-pages/Page.elm`, + fs.readFileSync(path.join(__dirname, `./Page.elm`)) ), - fs.promises.copyFile( - path.join(__dirname, `./SharedTemplate.elm`), - `./.elm-pages/SharedTemplate.elm` + fs.promises.writeFile( + `./.elm-pages/SharedTemplate.elm`, + fs.readFileSync(path.join(__dirname, `./SharedTemplate.elm`)) ), - fs.promises.copyFile( - path.join(__dirname, `./SharedTemplate.elm`), - `./elm-stuff/elm-pages/.elm-pages/SharedTemplate.elm` + fs.promises.writeFile( + `./elm-stuff/elm-pages/.elm-pages/SharedTemplate.elm`, + fs.readFileSync(path.join(__dirname, `./SharedTemplate.elm`)) ), - fs.promises.copyFile( - path.join(__dirname, `./SiteConfig.elm`), - `./.elm-pages/SiteConfig.elm` + fs.promises.writeFile( + `./.elm-pages/SiteConfig.elm`, + fs.readFileSync(path.join(__dirname, `./SiteConfig.elm`)) ), - fs.promises.copyFile( - path.join(__dirname, `./SiteConfig.elm`), - `./elm-stuff/elm-pages/.elm-pages/SiteConfig.elm` + fs.promises.writeFile( + `./elm-stuff/elm-pages/.elm-pages/SiteConfig.elm`, + fs.readFileSync(path.join(__dirname, `./SiteConfig.elm`)) ), fs.promises.writeFile("./.elm-pages/Pages.elm", uiFileContent), // write `Pages.elm` with cli interface fs.promises.writeFile( @@ -82,9 +82,9 @@ function writeFetcherModules(basePath, fetcherData) { } async function newCopyBoth(modulePath) { - await fs.promises.copyFile( - path.join(__dirname, modulePath), - path.join(`./elm-stuff/elm-pages/client/.elm-pages/`, modulePath) + await fs.promises.writeFile( + path.join(`./elm-stuff/elm-pages/client/.elm-pages/`, modulePath), + fs.readFileSync(path.join(__dirname, modulePath)) ); } @@ -197,7 +197,7 @@ async function copyFileEnsureDir(from, to) { await fs.promises.mkdir(path.dirname(to), { recursive: true, }); - await fs.promises.copyFile(from, to); + await fs.promises.writeFile(to, fs.readFileSync(from)); } /**
pkgs/development/compilers/elm/packages/elm-srcs.nix +22 −22 Original line number Diff line number Diff line Loading @@ -5,9 +5,14 @@ version = "1.0.0"; }; "elm/json" = { sha256 = "1a107nmm905dih4w4mjjkkpdcjbgaf5qjvr7fl30kkpkckfjjnrw"; version = "1.1.2"; "elm/browser" = { sha256 = "1zlmx672glg7fdgkvh5jm47y85pv7pdfr5mkhg6x7ar6k000vyka"; version = "1.0.1"; }; "elm/core" = { sha256 = "1l0qdbczw91kzz8sx5d5zwz9x662bspy7p21dsr3f2rigxiix2as"; version = "1.0.2"; }; "elm/html" = { Loading @@ -15,9 +20,14 @@ version = "1.0.0"; }; "elm/svg" = { sha256 = "1cwcj73p61q45wqwgqvrvz3aypjyy3fw732xyxdyj6s256hwkn0k"; version = "1.0.1"; "elm/http" = { sha256 = "008bs76mnp48b4dw8qwjj4fyvzbxvlrl4xpa2qh1gg2kfwyw56v1"; version = "2.0.0"; }; "elm/json" = { sha256 = "1a107nmm905dih4w4mjjkkpdcjbgaf5qjvr7fl30kkpkckfjjnrw"; version = "1.1.2"; }; "elm/project-metadata-utils" = { Loading @@ -25,21 +35,11 @@ version = "1.0.0"; }; "elm/browser" = { sha256 = "1zlmx672glg7fdgkvh5jm47y85pv7pdfr5mkhg6x7ar6k000vyka"; "elm/svg" = { sha256 = "1cwcj73p61q45wqwgqvrvz3aypjyy3fw732xyxdyj6s256hwkn0k"; version = "1.0.1"; }; "elm/core" = { sha256 = "1l0qdbczw91kzz8sx5d5zwz9x662bspy7p21dsr3f2rigxiix2as"; version = "1.0.2"; }; "elm/http" = { sha256 = "008bs76mnp48b4dw8qwjj4fyvzbxvlrl4xpa2qh1gg2kfwyw56v1"; version = "2.0.0"; }; "elm/bytes" = { sha256 = "040d7irrawcbnq9jxhzx8p9qacdlw5bncy6lgndd6inm53rvvwbp"; version = "1.0.7"; Loading @@ -55,13 +55,13 @@ version = "1.1.0"; }; "elm/url" = { sha256 = "0av8x5syid40sgpl5vd7pry2rq0q4pga28b4yykn9gd9v12rs3l4"; "elm/time" = { sha256 = "0vch7i86vn0x8b850w1p69vplll1bnbkp8s383z7pinyg94cm2z1"; version = "1.0.0"; }; "elm/time" = { sha256 = "0vch7i86vn0x8b850w1p69vplll1bnbkp8s383z7pinyg94cm2z1"; "elm/url" = { sha256 = "0av8x5syid40sgpl5vd7pry2rq0q4pga28b4yykn9gd9v12rs3l4"; version = "1.0.0"; }; Loading
pkgs/development/compilers/elm/packages/elm.nix +3 −3 Original line number Diff line number Diff line { mkDerivation, ansi-terminal, ansi-wl-pprint, base, binary , bytestring, containers, directory, edit-distance, fetchgit , file-embed, filelock, filepath, ghc-prim, haskeline, HTTP , http-client, http-client-tls, http-types, language-glsl, mtl , http-client, http-client-tls, http-types, language-glsl, lib, mtl , network, parsec, process, raw-strings-qq, scientific, SHA , snap-core, snap-server, lib, template-haskell, time , snap-core, snap-server, template-haskell, time , unordered-containers, utf8-string, vector, zip-archive }: mkDerivation { pname = "elm"; version = "0.19.1"; Loading @@ -29,4 +28,5 @@ mkDerivation { homepage = "https://elm-lang.org"; description = "The `elm` command line interface"; license = lib.licenses.bsd3; mainProgram = "elm"; }