#!/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.

# bootstrap_jiri initializes a root directory for jiri.  The following
# directories and files will be created:
#   <root_dir>                         - root directory (picked by user)
#   <root_dir>/.jiri_root              - root metadata directory
#   <root_dir>/.jiri_root/bin/jiri     - jiri binary
#   <root_dir>/.jiri_root/scripts/jiri - jiri script
#
# The jiri sources are downloaded and built into a temp directory, which is
# always deleted when this script finishes.  The <root_dir> is deleted on any
# failure.

set -euf -o pipefail

# fatal prints an error message, followed by the usage string, and then exits.
fatal() {
  usage='

Usage:
   bootstrap_jiri <root_dir>

A typical bootstrap workflow looks like this:

$ curl -s https://raw.githubusercontent.com/vanadium/go.jiri/master/scripts/bootstrap_jiri | bash -s myroot
$ export PATH=myroot/scripts:$PATH
$ cd myroot
$ jiri import public https://vanadium.googlesource.com/manifest
$ jiri update'
  echo "ERROR: $@${usage}" 1>&2
  exit 1
}

# toabs converts the possibly relative argument into an absolute path.  Run in a
# subshell to avoid changing the caller's working directory.
toabs() (
  cd $(dirname $1)
  echo ${PWD}/$(basename $1)
)

# Check the <root_dir> argument is supplied and doesn't already exist.
if [[ $# -ne 1 ]]; then
  fatal "need <root_dir> argument"
fi
root_dir=$(toabs $1)
if [[ -e ${root_dir} ]]; then
  fatal "${root_dir} already exists"
fi
# Check that go is on the PATH.
if ! go version >& /dev/null ; then
  fatal 'ERROR: "go" tool not found, see https://golang.org/doc/install'
fi

trap "rm -rf ${root_dir}" INT TERM EXIT

# Make the output directories.
tmp_dir="${root_dir}/.jiri_root/tmp"
bin_dir="${root_dir}/.jiri_root/bin"
scripts_dir="${root_dir}/.jiri_root/scripts"
mkdir -p "${tmp_dir}" "${bin_dir}" "${scripts_dir}"

# Go get the jiri source files, build the jiri binary, and copy the jiri shim
# script from the sources.
GOPATH="${tmp_dir}" go get -d v.io/jiri
GOPATH="${tmp_dir}" go build -o "${bin_dir}/jiri" v.io/jiri
cp "${tmp_dir}/src/v.io/jiri/scripts/jiri" "${scripts_dir}/jiri"

# Clean up the tmp_dir.
rm -rf "${tmp_dir}"

echo "Please add ${scripts_dir} to your PATH."
trap - EXIT
