depot/third_party/tvl/nix/writeExecline/default.nix
Default email a291c8690a Project import generated by Copybara.
GitOrigin-RevId: e6e19f3d81a982a62e1bba08f0b4f7fdc21b4ea0
2022-05-19 16:39:52 +02:00

39 lines
1.3 KiB
Nix
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{ pkgs, depot, ... }:
# Write an execline script, represented as nested nix lists.
# Everything is escaped correctly.
# https://skarnet.org/software/execline/
# TODO(Profpatsch) upstream into nixpkgs
name:
{
# "var": substitute readNArgs variables and start $@
# from the (readNArgs+1)th argument
# "var-full": substitute readNArgs variables and start $@ from $0
# "env": dont substitute, set # and 0…n environment vaariables, where n=$#
# "none": dont substitute or set any positional arguments
# "env-no-push": like "env", but bypass the push-phase. Not recommended.
argMode ? "var"
, # Number of arguments to be substituted as variables (passed to "var"/"-s" or "var-full"/"-S"
readNArgs ? 0
,
}:
# Nested list of lists of commands.
# Inner lists are translated to execline blocks.
argList:
let
env =
if argMode == "var" then "s${toString readNArgs}"
else if argMode == "var-full" then "S${toString readNArgs}"
else if argMode == "env" then ""
else if argMode == "none" then "P"
else if argMode == "env-no-push" then "p"
else abort ''"${toString argMode}" is not a valid argMode, use one of "var", "var-full", "env", "none", "env-no-push".'';
in
depot.nix.writeScript name ''
#!${pkgs.execline}/bin/execlineb -W${env}
${depot.nix.escapeExecline argList}
''