#!/usr/bin/env bash

# A script for updating godep dependencies for the vendored directory /cmd/
# without pulling in etcd itself as a dependency.
#
# update depedency
# 1. edit glide.yaml with version, git SHA
# 2. run ./scripts/updatedep.sh
# 3. it automatically detects new git SHA, and vendors updates to cmd/vendor directory
#
# add depedency
# 1. run ./scripts/updatedep.sh github.com/USER/PROJECT#^1.0.0
#        OR
#        ./scripts/updatedep.sh github.com/USER/PROJECT#9b772b54b3bf0be1eec083c9669766a56332559a
# 2. make sure glide.yaml and glide.lock are updated

if ! [[ "$0" =~ scripts/updatedep.sh ]]; then
	echo "must be run from repository root"
	exit 255
fi

rm -rf vendor
mv cmd/vendor vendor

# TODO: glide doesn't play well with symlink
echo "manually deleting etcd-repo symlink in vendor"
rm -f vendor/github.com/coreos/etcd

GLIDE_ROOT="$GOPATH/src/github.com/Masterminds/glide"
GLIDE_SHA=21ff6d397ccca910873d8eaabab6a941c364cc70
go get -d -u github.com/Masterminds/glide
pushd "${GLIDE_ROOT}"
	git reset --hard ${GLIDE_SHA}
	go install
popd

GLIDE_VC_ROOT="$GOPATH/src/github.com/sgotti/glide-vc"
GLIDE_VC_SHA=d96375d23c85287e80296cdf48f9d21c227fa40a
go get -d -u github.com/sgotti/glide-vc
pushd "${GLIDE_VC_ROOT}"
	git reset --hard ${GLIDE_VC_SHA}
	go install
popd

if [ -n "$1" ]; then
	echo "glide get on $1"
	matches=$(grep "name: $1" glide.lock)
	if [ ! -z "$matches" ]; then
		echo "glide update on $1"
		glide update --strip-vendor "$1"
	else
		echo "glide get on $1"
		glide get --strip-vendor "$1"
	fi
else
	echo "glide update on *"
	glide update --strip-vendor
fi;

echo "removing test files"
glide vc --only-code --no-tests

mv vendor cmd/

echo "recreating symlink to etcd"
ln -s ../../../../ cmd/vendor/github.com/coreos/etcd

echo "done"

