hack/.vendor-helpers.sh
9e4ee3de
 #!/usr/bin/env bash
 
1ca88b2c
 PROJECT=github.com/docker/docker
 
9e4ee3de
 # Downloads dependencies into vendor/ directory
 mkdir -p vendor
 
 rm -rf .gopath
 mkdir -p .gopath/src/github.com/docker
1ca88b2c
 ln -sf ../../../.. .gopath/src/${PROJECT}
9e4ee3de
 export GOPATH="${PWD}/.gopath:${PWD}/vendor"
 
 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;
 		}
 	' Dockerfile
 }
 
 clean() {
 	local packages=(
1ca88b2c
 		"${PROJECT}/docker" # package main
 		"${PROJECT}/dockerinit" # package main
 		"${PROJECT}/integration-cli" # external tests
9e4ee3de
 	)
663d5046
 	local dockerPlatforms=( linux/amd64 $(_dockerfile_env DOCKER_CROSSPLATFORMS) )
9e4ee3de
 	local dockerBuildTags="$(_dockerfile_env DOCKER_BUILDTAGS)"
 	local buildTagCombos=(
 		''
 		'experimental'
 		"$dockerBuildTags"
 		"daemon $dockerBuildTags"
10bcaca9
 		"daemon cgo $dockerBuildTags"
9e4ee3de
 		"experimental $dockerBuildTags"
 		"experimental daemon $dockerBuildTags"
10bcaca9
 		"experimental 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
8ef7aaf8
 				pkgs=( $(go list -e -tags "$buildTags" -f '{{join .Deps "\n"}}' "${packages[@]}" | grep -E "^${PROJECT}" | grep -vE "^${PROJECT}/vendor" | sort -u) )
 				pkgs+=( ${packages[@]} )
 				testImports=( $(go list -e -tags "$buildTags" -f '{{join .TestImports "\n"}}' "${pkgs[@]}" | sort -u) )
 				printf '%s\n' "${testImports[@]}"
 				go list -e -tags "$buildTags" -f '{{join .Deps "\n"}}' "${packages[@]} ${testImports[@]}"
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
7d193ef1
 		# This directory is needed for compiling the unit tests
 		-o -path vendor/src/github.com/stretchr/objx
10bcaca9
 	)
9e4ee3de
 	for import in "${imports[@]}"; do
 		[ "${#findArgs[@]}" -eq 0 ] || findArgs+=( -or )
 		findArgs+=( -path "vendor/src/$import" )
 	done
 	local IFS=$'\n'
 	local prune=( $(find vendor -depth -type d -not '(' "${findArgs[@]}" ')') )
 	unset IFS
 	for dir in "${prune[@]}"; do
82685367
 		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, '
10bcaca9
 	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"
        find "$target" -name \*.go -exec sed -i -e "s|\"${remove}|\"|g" {} \;
 }