diff options
author | Profpatsch <mail@profpatsch.de> | 2021-08-07T17·37+0200 |
---|---|---|
committer | Profpatsch <mail@profpatsch.de> | 2021-11-13T00·57+0000 |
commit | 2835e5ec7e4e5363c946215684da328d2072f46c (patch) | |
tree | 3210685ef3e9225999d76e2243fb5b74f27603b8 | |
parent | 4e2879282dcb1822298b7159210e62b53e0ea75e (diff) |
docs(users/Profpatsch/lib): move split-stdin to lib & document r/3045
Change-Id: I39e81ed766cb209ded5309ea962a59a6f1c811c9 Reviewed-on: https://cl.tvl.fyi/c/depot/+/3285 Tested-by: BuildkiteCI Reviewed-by: Profpatsch <mail@profpatsch.de>
-rw-r--r-- | users/Profpatsch/blog/default.nix | 6 | ||||
-rw-r--r-- | users/Profpatsch/lib.nix | 25 |
2 files changed, 24 insertions, 7 deletions
diff --git a/users/Profpatsch/blog/default.nix b/users/Profpatsch/blog/default.nix index ca1fbfbfb4e4..1558344b1b7c 100644 --- a/users/Profpatsch/blog/default.nix +++ b/users/Profpatsch/blog/default.nix @@ -162,11 +162,6 @@ let '' ]; - split-stdin = depot.nix.writeExecline "split-stdin" { argMode = "env"; } [ - "pipeline" [ "runblock" "1" bins.bash "-c" ''${bins.tee} >("$@")'' "bash-split-stdin" ] - "runblock" "-r" "1" - ]; - capture-stdin = depot.nix.writers.rustSimple { name = "capture-stdin"; dependencies = [ depot.users.Profpatsch.execline.exec-helpers ]; @@ -231,7 +226,6 @@ in depot.nix.utils.drvTargets { inherit router notes-server - split-stdin index router-lookup ; diff --git a/users/Profpatsch/lib.nix b/users/Profpatsch/lib.nix index 5d5fb01294cb..e3d59b7d8beb 100644 --- a/users/Profpatsch/lib.nix +++ b/users/Profpatsch/lib.nix @@ -1,9 +1,11 @@ { depot, pkgs, ... }: let - bins = depot.nix.getBins pkgs.coreutils [ "printf" "echo" "cat" "printenv" ] + bins = depot.nix.getBins pkgs.coreutils [ "printf" "echo" "cat" "printenv" "tee" ] + // depot.nix.getBins pkgs.bash [ "bash" ] // depot.nix.getBins pkgs.fdtools [ "multitee" ] ; + # Print `msg` and and argv to stderr, then execute into argv debugExec = msg: depot.nix.writeExecline "debug-exec" {} [ "if" [ "fdmove" "-c" "1" "2" @@ -13,10 +15,12 @@ let "$@" ]; + # Print stdin to stderr and stdout eprint-stdin = depot.nix.writeExecline "eprint-stdin" {} [ "pipeline" [ bins.multitee "0-1,2" ] "$@" ]; + # Assume the input on stdin is netencode, pretty print it to stderr and forward it to stdout eprint-stdin-netencode = depot.nix.writeExecline "eprint-stdin-netencode" {} [ "pipeline" [ # move stdout to 3 @@ -30,6 +34,7 @@ let "$@" ]; + # print the given environment variable in $1 to stderr, then execute into the rest of argv eprintenv = depot.nix.writeExecline "eprintenv" { readNArgs = 1; } [ "ifelse" [ "fdmove" "-c" "1" "2" bins.printenv "$1" ] [ "$@" ] @@ -37,6 +42,23 @@ let "$@" ]; + # Split stdin into two commands, given by a block and the rest of argv + # + # Example (execline): + # + # pipeline [ echo foo ] + # split-stdin [ fdmove 1 2 foreground [ cat ] echo "bar" ] cat + # + # stdout: foo\n + # stderr: foo\nbar\n + split-stdin = depot.nix.writeExecline "split-stdin" { argMode = "env"; } [ + "pipeline" [ + # this is horrible yes but the quickest way I knew how to implement it + "runblock" "1" bins.bash "-c" ''${bins.tee} >("$@")'' "bash-split-stdin" + ] + "runblock" "-r" "1" + ]; + # remove everything but a few selected environment variables runInEmptyEnv = keepVars: let @@ -53,6 +75,7 @@ in { eprint-stdin eprint-stdin-netencode eprintenv + split-stdin runInEmptyEnv ; } |