refactor(nix): use our own writeScript(Bin)

We have this nice `runExecline` now, so we don’t need to use
`runCommand` (which spawns bash) just to write a simple script.

Change-Id: I2941ed8c1448fa1d7cc02dc18b24a8a945b2c38b
Reviewed-on: https://cl.tvl.fyi/c/depot/+/704
Tested-by: BuildkiteCI
Reviewed-by: tazjin <mail@tazj.in>
Reviewed-by: BuildkiteCI
This commit is contained in:
Profpatsch 2020-06-28 04:52:08 +02:00
parent 4402c363b6
commit 2f21e0c8c0
8 changed files with 46 additions and 25 deletions

View file

@ -10,7 +10,7 @@
# with `binify { exe = …; name = "hello" }`.
{ exe, name }:
pkgs.runCommandLocal "binify-${name}" {} ''
pkgs.runCommandLocal "${name}-bin" {} ''
mkdir -p $out/bin
ln -sT ${lib.escapeShellArg exe} $out/bin/${lib.escapeShellArg name}
''

View file

@ -38,7 +38,7 @@ let
tests = import ./tests.nix {
inherit getBins;
inherit (pkgs) writeScriptBin;
inherit (depot.nix) writeScriptBin;
inherit (depot.nix.runTestsuite) assertEq it runTestsuite;
};

View file

@ -8,7 +8,7 @@ let
tests = import ./tests.nix {
inherit runExecline;
inherit (depot.nix) getBins;
inherit (depot.nix) getBins writeScript;
inherit (pkgs) stdenv coreutils;
inherit pkgs;
};

View file

@ -1,4 +1,4 @@
{ stdenv, pkgs, runExecline, getBins
{ stdenv, pkgs, runExecline, getBins, writeScript
# https://www.mail-archive.com/skaware@list.skarnet.org/msg01256.html
, coreutils }:
@ -19,23 +19,6 @@ let
"s6-test"
];
# lol
writeScript = name: script: runExecline name {
derivationArgs = {
inherit script;
passAsFile = [ "script" ];
preferLocalBuild = true;
allowSubstitutes = false;
};
} [
"importas" "-ui" "s" "scriptPath"
"importas" "-ui" "out" "out"
"foreground" [
bins.mv "$s" "$out"
]
bins.s6-chmod "0755" "$out"
];
# execline block of depth 1
block = args: builtins.map (arg: " ${arg}") args ++ [ "" ];

View file

@ -32,8 +32,7 @@ let
else abort ''"${toString argMode}" is not a valid argMode, use one of "var", "var-full", "env", "none", "env-no-push".'';
in
# TODO(Profpatsch): rewrite `writeScript` with `runExecline`
pkgs.writeScript name ''
depot.nix.writeScript name ''
#!${pkgs.execline}/bin/execlineb -W${env}
${depot.nix.escapeExecline argList}
''

View file

@ -0,0 +1,29 @@
{ pkgs, depot, ... }:
# Write the given string to $out
# and make it executable.
let
bins = depot.nix.getBins pkgs.s6-portable-utils [
"s6-cat"
"s6-chmod"
];
in
name:
# string of the executable script that is put in $out
script:
depot.nix.runExecline name {
stdin = script;
derivationArgs = {
preferLocalBuild = true;
allowSubstitutes = false;
};
} [
"importas" "out" "out"
# this pipes stdout of s6-cat to $out
# and s6-cat redirects from stdin to stdout
"if" [ "redirfd" "-w" "1" "$out" bins.s6-cat ]
bins.s6-chmod "0755" "$out"
]

View file

@ -0,0 +1,12 @@
{ depot, ... }:
# Like writeScript,
# but put the script into `$out/bin/${name}`.
name:
script:
depot.nix.binify {
exe = (depot.nix.writeScript name script);
inherit name;
}

View file

@ -132,8 +132,6 @@ let
thttpd
tree
which
writeScript
writeScriptBin
writeShellScript
writeShellScriptBin
writeText