about summary refs log tree commit diff
path: root/tools
diff options
context:
space:
mode:
authorVincent Ambo <tazjin@google.com>2019-07-02T15·40+0100
committerVincent Ambo <tazjin@google.com>2019-07-02T15·40+0100
commit892493a4788a9843b1b71848e58554e445658d31 (patch)
treef69e71ffabcc63647e9dab2831ae9162faeda38c /tools
parentc31a0b552b98cf297e3b7c90c63968faab0a1f49 (diff)
feat(tools): Add dispatcher script to transparently access tools r/12
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.
Diffstat (limited to 'tools')
-rwxr-xr-xtools/bin/__dispatch.sh31
l---------tools/bin/git-appraise1
2 files changed, 32 insertions, 0 deletions
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