From 892493a4788a9843b1b71848e58554e445658d31 Mon Sep 17 00:00:00 2001 From: Vincent Ambo Date: Tue, 2 Jul 2019 16:40:51 +0100 Subject: feat(tools): Add dispatcher script to transparently access tools Initial version of tool provider via Nix. This requires two separate steps for adding a new tool: 1. New symlink in tools/bin to point at the dispatch script. 2. Mapping of tool to Nix package set attribute in dispatch script. --- .envrc | 4 ++++ tools/bin/__dispatch.sh | 31 +++++++++++++++++++++++++++++++ tools/bin/git-appraise | 1 + 3 files changed, 36 insertions(+) create mode 100644 .envrc create mode 100755 tools/bin/__dispatch.sh create mode 120000 tools/bin/git-appraise diff --git a/.envrc b/.envrc new file mode 100644 index 0000000000..76e30237cb --- /dev/null +++ b/.envrc @@ -0,0 +1,4 @@ +# Configure the local PATH to contain tools which are fetched ad-hoc +# from Nix. + +export PATH="${PWD}/tools/bin:${PATH}" diff --git a/tools/bin/__dispatch.sh b/tools/bin/__dispatch.sh new file mode 100755 index 0000000000..7db75bf870 --- /dev/null +++ b/tools/bin/__dispatch.sh @@ -0,0 +1,31 @@ +#!/usr/bin/env bash +# This script dispatches invocations transparently to programs instantiated from +# Nix. +# +# To add a new tool, in +set -ueo pipefail + +readonly REPO_ROOT=$(git rev-parse --show-toplevel) +readonly ARGS="$@" +readonly TARGET_TOOL=$(basename $0) + +function nix_dispatch() { + local attr="${1}" + local result=$(nix-build --no-out-link --attr "${attr}" "${REPO_ROOT}") + + PATH="${result}/bin:$PATH" + if [ -z "${ARGS}" ]; then + exec "${TARGET_TOOL}" + else + exec "${TARGET_TOOL}" "${ARGS}" + fi +} + +case "${TARGET_TOOL}" in + git-appraise) + nix_dispatch "thirdParty.gitAppraise" + ;; + *) + echo "The tool '${TARGET_TOOL}' is currently not installed in this repository." + ;; +esac diff --git a/tools/bin/git-appraise b/tools/bin/git-appraise new file mode 120000 index 0000000000..8390ec9c96 --- /dev/null +++ b/tools/bin/git-appraise @@ -0,0 +1 @@ +__dispatch.sh \ No newline at end of file -- cgit 1.4.1