Skip to content

Instantly share code, notes, and snippets.

@tianon
Last active May 11, 2016 14:55
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tianon/92ebbd1793864b9586bc to your computer and use it in GitHub Desktop.
Save tianon/92ebbd1793864b9586bc to your computer and use it in GitHub Desktop.
#!/bin/bash
set -e
# https://gist.github.com/tianon/92ebbd1793864b9586bc
cd "$(dirname "$(readlink -f "$BASH_SOURCE")")"
hackVendor="$(< hack/vendor.sh)"
if [ "$1" ]; then
hackVendor="$(git show "$1":hack/vendor.sh)"
fi
dockerVersion="$(< VERSION)"
if [ "$1" ]; then
dockerVersion="$(git show "$1":VERSION)"
fi
packages=( $(echo "$hackVendor" | awk '$1 == "clone" && $2 == "git" { print ($5 && $5 != "#" ? $5 "|" : "") $3 "=" $4 }') )
#IFS=$'\n'; echo "${packages[*]}"; exit
# github.com/tchap/go-patricia=v2.1.0
# https://github.com/golang/net.git|golang.org/x/net=3cffabab72adf04f8e3b01c5baf775361837b5fe
# github.com/docker/libnetwork=bd3eecc96f3c05a4acef1bedcf74397bc6850d22
declare -A extraPackageMap=(
[golang-code.google-p-gosqlite-dev]='golang-gosqlite-dev'
[golang-github-agl-ed25519-dev]='golang-ed25519-dev'
[golang-github-burntsushi-toml-dev]='golang-toml-dev'
[golang-github-coreos-etcd-dev]='golang-etcd-server-dev'
[golang-github-coreos-go-etcd-dev]='golang-etcd-dev'
[golang-github-godbus-dbus-dev]='golang-dbus-dev'
[golang-github-golang-protobuf-dev]='golang-goprotobuf-dev'
[golang-github-gorilla-context-dev]='golang-context-dev'
[golang-github-kr-pty-dev]='golang-pty-dev'
[golang-github-miekg-dns-dev]='golang-dns-dev'
[golang-github-mistifyio-go-zfs-dev]='golang-go-zfs-dev'
[golang-github-syndtr-gocapability-dev]='golang-gocapability-dev'
[golang-github-tchap-go-patricia-dev]='golang-go-patricia-dev'
[golang-github-ugorji-go-dev]='golang-github-ugorji-go-codec-dev'
[golang-gopkg-fsnotify.v1-dev]='golang-fsnotify-dev'
)
debian_pkg() {
local goPkg="$1"
local domain="${goPkg%%/*}"
domain="${domain%%.*}"
local goPkgPath="${goPkg#*/}"
local package="golang-$domain-${goPkgPath//\//-}-dev"
package="${package,,}"
echo "$package"
}
package_ver() {
local package="$1"
local ver="$2"
local extraPackage="${extraPackageMap[$package]}"
if [ "$extraPackage" ]; then
echo -n "$extraPackage (>= $ver~) | "
fi
echo -n "$package (>= $ver~)"
echo ','
}
echo
case "$dockerVersion" in
1.10.*|1.11.*) echo 'golang-go (>= 2:1.4~) | gccgo (>= 4:5~),' ;;
esac
echo
for packageVer in "${packages[@]}"; do
gitRepo="${packageVer%%=*}"
goPkg="${gitRepo##*|}"
if [ "$goPkg" != "$gitRepo" ]; then
gitRepo="${gitRepo%|*}"
fi
ver="${packageVer#*=}"
package="$(debian_pkg "$goPkg")"
case "$goPkg" in
github.com/docker/libnetwork) continue ;; # pulled into multi-orig tarballs
github.com/go-check/check) continue ;; # only needed for the integration tests
github.com/Azure/go-ansiterm|github.com/Microsoft/hcsshim|github.com/Microsoft/go-winio) continue ;; # windows daemon only! \o/
github.com/syndtr/gocapability)
if [ "$ver" = '66ef2aa7a23ba682594e2b6f74cf40c0692b49fb' ]; then
# lol UTC off-by-one
ver='v0.0~git20150506'
fi
;;
github.com/agl/ed25519)
if [ "$ver" = 'd2b94fd789ea21d12fac1a4443dd3a3f79cda72c' ]; then
# fun times
ver='v0~20140907'
fi
;;
github.com/docker/notary)
case "$ver" in
docker-v1.10*) ver='v0.2.0' ;;
docker-v1.11*) ver='v0.2.0' ;; # TODO does this need to be (>= 0.3.0~rc1~) ?
esac
;;
github.com/docker/go)
ver="${ver%%-*}" # "v1.5.1-1-1-gbaf439e" -> "v1.5.1"
if [ "$ver" = "v1.5.1" ]; then
# facepalm
ver='v0.0~git20151102.0.62e5ec7'
fi
;;
esac
if [[ "$ver" == v* ]] || [[ "$ver" == [0-9].* ]]; then
ver="${ver#v}"
else
gitUrl="$gitRepo"
if [[ "$gitUrl" != *://* ]]; then
gitUrl="https://${gitUrl}.git"
fi
IFS=$'\n'
refs=( $(git ls-remote --heads "${gitUrl}" | cut -d$'\t' -f2) )
unset IFS
git fetch --quiet "${gitUrl}" "${refs[@]}" 2>/dev/null # "warning: no common commits"
commit="$(git log -1 --pretty='%h' "$ver" --)"
unix="$(git log -1 --format='%at' "$commit" --)"
gitTime="$(TZ=UTC date --date="@$unix" +'%Y%m%d')"
ver="0.0~git$gitTime"
fi
package_ver "$package" "$ver"
done
echo
# TODO hg
packages=( $(echo "$hackVendor" | awk '$1 == "clone" && $2 == "hg" { print $3 "=" $4 }') )
for packageVer in "${packages[@]}"; do
hgRepo="${packageVer%%=*}"
goPkg="$hgRepo"
ver="${packageVer#*=}"
package="$(debian_pkg "$goPkg")"
ver='UNKNOWN'
case "$packageVer" in
code.google.com/p/gosqlite=74691fb6f837)
# https://code.google.com/p/gosqlite/source/detail?r=74691fb6f837
ver='0.0~hg20130530'
;;
*)
;;
esac
package_ver "$package" "$ver"
done
echo
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment