github.com/yuanlv/docker@v1.8.1/hack/.vendor-helpers.sh (about)

     1  #!/usr/bin/env bash
     2  
     3  # Downloads dependencies into vendor/ directory
     4  mkdir -p vendor
     5  
     6  rm -rf .gopath
     7  mkdir -p .gopath/src/github.com/docker
     8  ln -sf ../../../.. .gopath/src/github.com/docker/docker
     9  export GOPATH="${PWD}/.gopath:${PWD}/vendor"
    10  
    11  clone() {
    12  	local vcs="$1"
    13  	local pkg="$2"
    14  	local rev="$3"
    15  	local url="$4"
    16  
    17  	: ${url:=https://$pkg}
    18  	local target="vendor/src/$pkg"
    19  
    20  	echo -n "$pkg @ $rev: "
    21  
    22  	if [ -d "$target" ]; then
    23  		echo -n 'rm old, '
    24  		rm -rf "$target"
    25  	fi
    26  
    27  	echo -n 'clone, '
    28  	case "$vcs" in
    29  		git)
    30  			git clone --quiet --no-checkout "$url" "$target"
    31  			( cd "$target" && git reset --quiet --hard "$rev" )
    32  			;;
    33  		hg)
    34  			hg clone --quiet --updaterev "$rev" "$url" "$target"
    35  			;;
    36  	esac
    37  
    38  	echo -n 'rm VCS, '
    39  	( cd "$target" && rm -rf .{git,hg} )
    40  
    41  	echo -n 'rm vendor, '
    42  	( cd "$target" && rm -rf vendor Godeps/_workspace )
    43  
    44  	echo done
    45  }
    46  
    47  # get an ENV from the Dockerfile with support for multiline values
    48  _dockerfile_env() {
    49  	local e="$1"
    50  	awk '
    51  		$1 == "ENV" && $2 == "'"$e"'" {
    52  			sub(/^ENV +([^ ]+) +/, "");
    53  			inEnv = 1;
    54  		}
    55  		inEnv {
    56  			if (sub(/\\$/, "")) {
    57  				printf "%s", $0;
    58  				next;
    59  			}
    60  			print;
    61  			exit;
    62  		}
    63  	' Dockerfile
    64  }
    65  
    66  clean() {
    67  	local packages=(
    68  		github.com/docker/docker/docker # package main
    69  		github.com/docker/docker/dockerinit # package main
    70  		github.com/docker/docker/integration-cli # external tests
    71  	)
    72  
    73  	local dockerPlatforms=( linux/amd64 windows/amd64 $(_dockerfile_env DOCKER_CROSSPLATFORMS) )
    74  	local dockerBuildTags="$(_dockerfile_env DOCKER_BUILDTAGS)"
    75  	local buildTagCombos=(
    76  		''
    77  		'experimental'
    78  		"$dockerBuildTags"
    79  		"daemon $dockerBuildTags"
    80  		"daemon cgo $dockerBuildTags"
    81  		"experimental $dockerBuildTags"
    82  		"experimental daemon $dockerBuildTags"
    83  		"experimental daemon cgo $dockerBuildTags"
    84  	)
    85  
    86  	echo
    87  
    88  	echo -n 'collecting import graph, '
    89  	local IFS=$'\n'
    90  	local imports=( $(
    91  		for platform in "${dockerPlatforms[@]}"; do
    92  			export GOOS="${platform%/*}";
    93  			export GOARCH="${platform##*/}";
    94  			for buildTags in "${buildTagCombos[@]}"; do
    95  				go list -e -tags "$buildTags" -f '{{join .Deps "\n"}}' "${packages[@]}"
    96  			done
    97  		done | grep -vE '^github.com/docker/docker' | sort -u
    98  	) )
    99  	imports=( $(go list -e -f '{{if not .Standard}}{{.ImportPath}}{{end}}' "${imports[@]}") )
   100  	unset IFS
   101  
   102  	echo -n 'pruning unused packages, '
   103  	findArgs=(
   104  		# This directory contains only .c and .h files which are necessary
   105  		-path vendor/src/github.com/mattn/go-sqlite3/code
   106  	)
   107  	for import in "${imports[@]}"; do
   108  		[ "${#findArgs[@]}" -eq 0 ] || findArgs+=( -or )
   109  		findArgs+=( -path "vendor/src/$import" )
   110  	done
   111  	local IFS=$'\n'
   112  	local prune=( $(find vendor -depth -type d -not '(' "${findArgs[@]}" ')') )
   113  	unset IFS
   114  	for dir in "${prune[@]}"; do
   115  		find "$dir" -maxdepth 1 -not -type d -not -name 'LICENSE*' -not -name 'COPYING*' -exec rm -v -f '{}' +
   116  		rmdir "$dir" 2>/dev/null || true
   117  	done
   118  
   119  	echo -n 'pruning unused files, '
   120  	find vendor -type f -name '*_test.go' -exec rm -v '{}' +
   121  
   122  	echo done
   123  }