#!/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/.jiri_root/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
mkdir -p $(dirname $1)
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/cmd/jiri
GOPATH="${tmp_dir}" go build -o "${bin_dir}/jiri" v.io/jiri/cmd/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
