#!/bin/sh
# Copied from https://raw.githubusercontent.com/docker-library/golang/master/1.9-rc/stretch/go-wrapper
# Copied into Docker images.

set -e

usage() {
	base="$(basename "$0")"
	cat <<EOUSAGE

usage: $base command [args]

This script assumes that is is run from the root of your Go package (for
example, "/go/src/app" if your GOPATH is set to "/go").

In Go 1.4, a feature was introduced to supply the canonical "import path" for a
given package in a comment attached to a package statement
(https://golang.org/s/go14customimport).

This script allows us to take a generic directory of Go source files such as
"/go/src/app" and determine that the canonical "import path" of where that code
expects to live and reference itself is "github.com/jsmith/my-cool-app".  It
will then ensure that "/go/src/github.com/jsmith/my-cool-app" is a symlink to
"/go/src/app", which allows us to build and run it under the proper package
name.

For compatibility with versions of Go older than 1.4, the "import path" may also
be placed in a file named ".godir".

Available Commands:

  $base download
  $base download -u
    (equivalent to "go get -d [args] [godir]")

  $base install
  $base install -race
    (equivalent to "go install [args] [godir]")

  $base run
  $base run -app -specific -arguments
    (assumes "GOPATH/bin" is in "PATH")

EOUSAGE
}

# make sure there is a subcommand specified
if [ "$#" -eq 0 ]; then
	usage >&2
	exit 1
fi
# "shift" so that "$@" becomes the remaining arguments and can be passed along to other "go" subcommands easily
cmd="$1"
shift

goDir="$(go list -e -f '{{.ImportComment}}' 2>/dev/null || true)"

if [ -z "$goDir" -a -s .godir ]; then
	goDir="$(cat .godir)"
fi

dir="$(pwd -P)"
if [ "$goDir" ]; then
	goPath="${GOPATH%%:*}" # this just grabs the first path listed in GOPATH, if there are multiple (which is the detection logic "go get" itself uses, too)
	goDirPath="$goPath/src/$goDir"
	mkdir -p "$(dirname "$goDirPath")"
	if [ ! -e "$goDirPath" ]; then
		ln -sfv "$dir" "$goDirPath"
	elif [ ! -L "$goDirPath" ]; then
		echo >&2 "error: $goDirPath already exists but is unexpectedly not a symlink!"
		exit 1
	fi
	goBin="$goPath/bin/$(basename "$goDir")"
else
	goBin="$(basename "$dir")" # likely "app"
fi

case "$cmd" in
	download)
		set -- go get -v -d "$@"
		if [ "$goDir" ]; then set -- "$@" "$goDir"; fi
		set -x; exec "$@"
		;;
		
	install)
		set -- go install -v "$@"
		if [ "$goDir" ]; then set -- "$@" "$goDir"; fi
		set -x; exec "$@"
		;;
		
	run)
		set -x; exec "$goBin" "$@"
		;;
		
	*)
		echo >&2 'error: unknown command:' "$cmd"
		usage >&2
		exit 1
		;;
esac
