Skip to content

Commit

Permalink
pkgs/profpatsch/runExecline: move to writeCommand form
Browse files Browse the repository at this point in the history
It’s conventional that these tools have the form

  tool name options data

so we should adhere to that.
  • Loading branch information
Profpatsch committed Sep 26, 2019
1 parent 61dda87 commit 93f5d25
Show file tree
Hide file tree
Showing 4 changed files with 61 additions and 69 deletions.
17 changes: 10 additions & 7 deletions pkgs/profpatsch/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -61,12 +61,14 @@ let
// (bins pkgs.execline [ "redirfd" "importas" "exec" ]);
inherit stdenv lib;
};
itLocal = args: it (args // {
derivationArgs = args.derivationArgs or {} // {
preferLocalBuild = true;
allowSubstitutes = false;
};
});
itLocal = name: args: execline:
it name (args // {
derivationArgs = args.derivationArgs or {} // {
preferLocalBuild = true;
allowSubstitutes = false;
};
}) execline;

tests = import ./execline/run-execline-tests.nix {
# can’t use runExeclineLocal in the tests,
# because it is tested by the tests (well, it does
Expand All @@ -85,7 +87,8 @@ let
};
in {
runExecline = it;
runExeclineLocal = args: testing.drvSeqL tests (itLocal args);
runExeclineLocal = name: args: execline:
testing.drvSeqL tests (itLocal name args execline);
};


Expand Down
52 changes: 22 additions & 30 deletions pkgs/profpatsch/execline/run-execline-tests.nix
Original file line number Diff line number Diff line change
Expand Up @@ -5,23 +5,21 @@
let

# lol
writeScript = name: script: runExecline {
inherit name;
writeScript = name: script: runExecline name {
derivationArgs = {
inherit script;
passAsFile = [ "script" ];
preferLocalBuild = true;
allowSubstitutes = false;
};
execline = [
} [
"importas" "-ui" "s" "scriptPath"
"importas" "-ui" "out" "out"
"foreground" [
"${coreutils}/bin/mv" "$s" "$out"
]
"${bin.s6-chmod}" "0755" "$out"
];
};
];

# execline block of depth 1
block = args: builtins.map (arg: " ${arg}") args ++ [ "" ];
Expand All @@ -48,50 +46,44 @@ let
};

# basic test that touches out
basic = runExecline {
name = "run-execline-test-basic";
execline = [
"importas" "-ui" "out" "out"
"${bin.s6-touch}" "$out"
];
basic = runExecline "run-execline-test-basic" {
derivationArgs = {
preferLocalBuild = true;
allowSubstitutes = false;
};
};
} [
"importas" "-ui" "out" "out"
"${bin.s6-touch}" "$out"
];

# whether the stdin argument works as intended
stdin = fileHasLine "foo" (runExecline {
name = "run-execline-test-stdin";
stdin = fileHasLine "foo" (runExecline "run-execline-test-stdin" {
stdin = "foo\nbar\nfoo";
execline = [
"importas" "-ui" "out" "out"
# this pipes stdout of s6-cat to $out
# and s6-cat redirects from stdin to stdout
"redirfd" "-w" "1" "$out" bin.s6-cat
];
derivationArgs = {
preferLocalBuild = true;
allowSubstitutes = false;
};
});
} [
"importas" "-ui" "out" "out"
# this pipes stdout of s6-cat to $out
# and s6-cat redirects from stdin to stdout
"redirfd" "-w" "1" "$out" bin.s6-cat
]);

wrapWithVar = runExecline {
name = "run-execline-test-wrap-with-var";
wrapWithVar = runExecline "run-execline-test-wrap-with-var" {
builderWrapper = writeScript "var-wrapper" ''
#!${bin.execlineb} -S0
export myvar myvalue $@
'';
execline = [
"importas" "-ui" "v" "myvar"
"if" [ bin.s6-test "myvalue" "=" "$v" ]
"importas" "out" "out"
bin.s6-touch "$out"
];
derivationArgs = {
preferLocalBuild = true;
allowSubstitutes = false;
};
};
} [
"importas" "-ui" "v" "myvar"
"if" [ bin.s6-test "myvalue" "=" "$v" ]
"importas" "out" "out"
bin.s6-touch "$out"
];

in [ basic stdin wrapWithVar ]
13 changes: 7 additions & 6 deletions pkgs/profpatsch/execline/run-execline.nix
Original file line number Diff line number Diff line change
@@ -1,17 +1,18 @@
{ stdenv, bin, lib }:
{ name
# the execline script as a nested list of string,
# representing the blocks;
# see docs of `escapeExecline`.
, execline
name:
{
# a string to pass as stdin to the execline script
, stdin ? ""
stdin ? ""
# a program wrapping the acutal execline invocation;
# should be in Bernstein-chaining style
, builderWrapper ? bin.exec
# additional arguments to pass to the derivation
, derivationArgs ? {}
}:
# the execline script as a nested list of string,
# representing the blocks;
# see docs of `escapeExecline`.
execline:

# those arguments can’t be overwritten
assert !derivationArgs ? system;
Expand Down
48 changes: 22 additions & 26 deletions pkgs/profpatsch/execline/symlink.nix
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,7 @@ let
"${toString (builtins.stringLength s)}:${s},";

in
runExecline {
inherit name;

runExecline name {
derivationArgs = {
pathTuples = lib.concatMapStrings
({dest, orig}: toNetstring
Expand All @@ -23,28 +21,26 @@ runExecline {
# bah! coreutils just for cat :(
PATH = lib.makeBinPath [ s6-portable-utils ];
};
} [
"importas" "-ui" "p" "pathTuplesPath"
"importas" "-ui" "out" "out"
"forbacktickx" "-d" "" "destorig" [ "${coreutils}/bin/cat" "$p" ]
"importas" "-ui" "do" "destorig"
"multidefine" "-d" "" "$do" [ "destsuffix" "orig" ]
"define" "dest" ''''${out}/''${destsuffix}''

execline = [
"importas" "-ui" "p" "pathTuplesPath"
"importas" "-ui" "out" "out"
"forbacktickx" "-d" "" "destorig" [ "${coreutils}/bin/cat" "$p" ]
"importas" "-ui" "do" "destorig"
"multidefine" "-d" "" "$do" [ "destsuffix" "orig" ]
"define" "dest" ''''${out}/''${destsuffix}''

# this call happens for every file, not very efficient
"foreground" [
"backtick" "-n" "d" [ "s6-dirname" "$dest" ]
"importas" "-ui" "d" "d"
"s6-mkdir" "-p" "$d"
]
# this call happens for every file, not very efficient
"foreground" [
"backtick" "-n" "d" [ "s6-dirname" "$dest" ]
"importas" "-ui" "d" "d"
"s6-mkdir" "-p" "$d"
]

"ifthenelse" [ "s6-test" "-L" "$orig" ] [
"backtick" "-n" "res" [ "s6-linkname" "-f" "$orig" ]
"importas" "-ui" "res" "res"
"s6-ln" "-fs" "$res" "$dest"
] [
"s6-ln" "-fs" "$orig" "$dest"
]
];
}
"ifthenelse" [ "s6-test" "-L" "$orig" ] [
"backtick" "-n" "res" [ "s6-linkname" "-f" "$orig" ]
"importas" "-ui" "res" "res"
"s6-ln" "-fs" "$res" "$dest"
] [
"s6-ln" "-fs" "$orig" "$dest"
]
]

0 comments on commit 93f5d25

Please sign in to comment.