| #!/bin/bash |
| # Copyright 2015 The Vanadium Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style |
| # license that can be found in the LICENSE file. |
| |
| # jiri is a shim script that determines the jiri root directory and invokes |
| # $JIRI_ROOT/.jiri_root/bin/jiri with the given arguments. |
| # |
| # If the JIRI_ROOT environment variable is set, that is assumed to be the jiri |
| # root directory. |
| # |
| # Otherwise the script looks for the .jiri_root directory, starting in the |
| # current working directory and walking up the directory chain. The search is |
| # terminated successfully when the .jiri_root directory is found; it fails after |
| # it reaches the root of the file system. |
| # |
| # This script should be invoked from the jiri root directory or one of its |
| # subdirectories, unless the JIRI_ROOT environment variable is set. |
| |
| set -euf -o pipefail |
| |
| # fatal prints an error message and exits. |
| fatal() { |
| echo "ERROR: $@" 1>&2 |
| exit 1 |
| } |
| |
| # Handle "jiri which" without any arguments. This is handy to determine whether |
| # the PATH is set up pointing at this shim script, or a regular binary. If |
| # there are any arguments, we pass the command through to the binary. |
| if [[ $# -eq 1 ]]; then |
| if [[ "$1" == "which" ]]; then |
| echo "# script" |
| type -p $0 |
| exit 0 |
| fi |
| fi |
| |
| # If $JIRI_ROOT is set we always use it, otherwise look for a .jiri_root |
| # directory starting with the current working directory, and walking up. |
| if [[ -z ${JIRI_ROOT+x} ]]; then |
| CWD="$(pwd)" |
| while [[ ! -d "$(pwd)/.jiri_root" ]]; do |
| if [[ "$(pwd)" == "/" ]]; then |
| fatal "could not find .jiri_root directory" |
| fi |
| cd .. |
| done |
| export JIRI_ROOT="$(pwd)" |
| cd "${CWD}" |
| fi |
| |
| # Make sure the jiri binary exists and is executable. |
| if [[ ! -e "${JIRI_ROOT}/.jiri_root/bin/jiri" ]]; then |
| fatal "${JIRI_ROOT}/.jiri_root/bin/jiri does not exist" |
| elif [[ ! -x "${JIRI_ROOT}/.jiri_root/bin/jiri" ]]; then |
| fatal "${JIRI_ROOT}/.jiri_root/bin/jiri is not executable" |
| fi |
| |
| # Add $JIRI_ROOT/.jiri_root/bin to PATH, so that the jiri binary can find the |
| # subcommand binaries. |
| export PATH="${JIRI_ROOT}/.jiri_root/bin:${PATH}" |
| |
| # Execute the jiri binary. |
| exec "${JIRI_ROOT}/.jiri_root/bin/jiri" "$@" |