hack/.vendor-helpers.sh
9e4ee3de
 #!/usr/bin/env bash
 
1ca88b2c
 PROJECT=github.com/docker/docker
 
9e4ee3de
 # Downloads dependencies into vendor/ directory
 mkdir -p vendor
 
1c383af6
 if ! go list github.com/docker/docker/docker &> /dev/null; then
 	rm -rf .gopath
 	mkdir -p .gopath/src/github.com/docker
 	ln -sf ../../../.. .gopath/src/${PROJECT}
 	export GOPATH="${PWD}/.gopath:${PWD}/vendor"
 fi
 export GOPATH="$GOPATH:${PWD}/vendor"
 
 find='find'
 if [ "$(go env GOHOSTOS)" = 'windows' ]; then
 	find='/usr/bin/find'
 fi
9e4ee3de
 
 clone() {
 	local vcs="$1"
 	local pkg="$2"
 	local rev="$3"
d820e00a
 	local url="$4"
9e4ee3de
 
d820e00a
 	: ${url:=https://$pkg}
9e4ee3de
 	local target="vendor/src/$pkg"
 
 	echo -n "$pkg @ $rev: "
 
 	if [ -d "$target" ]; then
 		echo -n 'rm old, '
 		rm -rf "$target"
 	fi
 
 	echo -n 'clone, '
 	case "$vcs" in
 		git)
 			git clone --quiet --no-checkout "$url" "$target"
6bf24406
 			( cd "$target" && git checkout --quiet "$rev" && git reset --quiet --hard "$rev" )
9e4ee3de
 			;;
 		hg)
 			hg clone --quiet --updaterev "$rev" "$url" "$target"
 			;;
 	esac
 
 	echo -n 'rm VCS, '
 	( cd "$target" && rm -rf .{git,hg} )
 
 	echo -n 'rm vendor, '
 	( cd "$target" && rm -rf vendor Godeps/_workspace )
 
 	echo done
 }
 
 # get an ENV from the Dockerfile with support for multiline values
 _dockerfile_env() {
 	local e="$1"
 	awk '
 		$1 == "ENV" && $2 == "'"$e"'" {
 			sub(/^ENV +([^ ]+) +/, "");
 			inEnv = 1;
 		}
 		inEnv {
 			if (sub(/\\$/, "")) {
 				printf "%s", $0;
 				next;
 			}
 			print;
 			exit;
 		}
b74fd062
 	' ${DOCKER_FILE:="Dockerfile"}
9e4ee3de
 }
 
 clean() {
 	local packages=(
1ca88b2c
 		"${PROJECT}/docker" # package main
 		"${PROJECT}/dockerinit" # package main
 		"${PROJECT}/integration-cli" # external tests
9e4ee3de
 	)
b74fd062
 	local dockerPlatforms=( ${DOCKER_ENGINE_OSARCH:="linux/amd64"} $(_dockerfile_env DOCKER_CROSSPLATFORMS) )
9e4ee3de
 	local dockerBuildTags="$(_dockerfile_env DOCKER_BUILDTAGS)"
 	local buildTagCombos=(
 		''
 		'experimental'
94ea6af8
 		'pkcs11'
9e4ee3de
 		"$dockerBuildTags"
 		"daemon $dockerBuildTags"
10bcaca9
 		"daemon cgo $dockerBuildTags"
9e4ee3de
 		"experimental $dockerBuildTags"
 		"experimental daemon $dockerBuildTags"
10bcaca9
 		"experimental daemon cgo $dockerBuildTags"
94ea6af8
 		"pkcs11 $dockerBuildTags"
 		"pkcs11 daemon $dockerBuildTags"
 		"pkcs11 daemon cgo $dockerBuildTags"
9e4ee3de
 	)
 
 	echo
 
 	echo -n 'collecting import graph, '
 	local IFS=$'\n'
 	local imports=( $(
 		for platform in "${dockerPlatforms[@]}"; do
 			export GOOS="${platform%/*}";
 			export GOARCH="${platform##*/}";
 			for buildTags in "${buildTagCombos[@]}"; do
a016ec6f
 				go list -e -tags "$buildTags" -f '{{join .Deps "\n"}}' "${packages[@]}"
 				go list -e -tags "$buildTags" -f '{{join .TestImports "\n"}}' "${packages[@]}"
9e4ee3de
 			done
8ef7aaf8
 		done | grep -vE "^${PROJECT}" | sort -u
9e4ee3de
 	) )
 	imports=( $(go list -e -f '{{if not .Standard}}{{.ImportPath}}{{end}}' "${imports[@]}") )
 	unset IFS
 
 	echo -n 'pruning unused packages, '
10bcaca9
 	findArgs=(
 		# This directory contains only .c and .h files which are necessary
 		-path vendor/src/github.com/mattn/go-sqlite3/code
 	)
9e4ee3de
 	for import in "${imports[@]}"; do
 		[ "${#findArgs[@]}" -eq 0 ] || findArgs+=( -or )
 		findArgs+=( -path "vendor/src/$import" )
 	done
 	local IFS=$'\n'
1c383af6
 	local prune=( $($find vendor -depth -type d -not '(' "${findArgs[@]}" ')') )
9e4ee3de
 	unset IFS
 	for dir in "${prune[@]}"; do
1c383af6
 		$find "$dir" -maxdepth 1 -not -type d -not -name 'LICENSE*' -not -name 'COPYING*' -exec rm -v -f '{}' ';'
9e4ee3de
 		rmdir "$dir" 2>/dev/null || true
 	done
 
 	echo -n 'pruning unused files, '
1c383af6
 	$find vendor -type f -name '*_test.go' -exec rm -v '{}' ';'
9e4ee3de
 
 	echo done
 }
7078e7dd
 
 # Fix up hard-coded imports that refer to Godeps paths so they'll work with our vendoring
 fix_rewritten_imports () {
        local pkg="$1"
        local remove="${pkg}/Godeps/_workspace/src/"
        local target="vendor/src/$pkg"
 
        echo "$pkg: fixing rewritten imports"
1c383af6
        $find "$target" -name \*.go -exec sed -i -e "s|\"${remove}|\"|g" {} \;
7078e7dd
 }