@@ -24,14 +24,39 @@ declare -A alpineVersion=(
2424)
2525
2626packagesBase=' http://apt.postgresql.org/pub/repos/apt/dists/'
27- declare -A suitePackageList=() suiteArches=()
27+ declare -A suitePackageList=() suiteVersionPackageList=() suiteArches=()
28+ _raw_package_list () {
29+ local suite=" $1 " ; shift
30+ local component=" $1 " ; shift
31+ local arch=" $1 " ; shift
32+
33+ curl -fsSL " $packagesBase /$suite -pgdg/$component /binary-$arch /Packages.bz2" | bunzip2
34+ }
2835fetch_suite_package_list () {
2936 local suite=" $1 " ; shift
30- local arch=" ${1:- amd64} "
37+ local version=" $1 " ; shift
38+ local arch=" $1 " ; shift
3139
40+ # normal (GA) releases end up in the "main" component of upstream's repository
3241 if [ -z " ${suitePackageList["$suite-$arch"]: +isset} " ]; then
33- suitePackageList[" $suite -$arch " ]=" $( curl -fsSL " $packagesBase /$suite -pgdg/main/binary-$arch /Packages.bz2" | bunzip2) "
42+ local suiteArchPackageList
43+ suiteArchPackageList=" $( _raw_package_list " $suite " ' main' " $arch " ) "
44+ suitePackageList[" $suite -$arch " ]=" $suiteArchPackageList "
3445 fi
46+
47+ # ... but pre-release versions (betas, etc) end up in the "PG_MAJOR" component (so we need to check both)
48+ if [ -z " ${suiteVersionPackageList["$suite-$version-$arch"]: +isset} " ]; then
49+ local versionPackageList
50+ versionPackageList=" $( _raw_package_list " $suite " " $version " " $arch " ) "
51+ suiteVersionPackageList[" $suite -$version -$arch " ]=" $versionPackageList "
52+ fi
53+ }
54+ awk_package_list () {
55+ local suite=" $1 " ; shift
56+ local version=" $1 " ; shift
57+ local arch=" $1 " ; shift
58+
59+ awk -F ' : ' -v version=" $version " " $@ " <<< " ${suitePackageList[" $suite -$arch " ]}" $' \n ' " ${suiteVersionPackageList["$suite-$version-$arch"]} "
3560}
3661fetch_suite_arches () {
3762 local suite=" $1 " ; shift
@@ -48,11 +73,13 @@ for version in "${versions[@]}"; do
4873 suite=" ${tag%% -slim} "
4974 majorVersion=" ${version%% .* } "
5075
51- fetch_suite_package_list " $suite " ' amd64'
52- fullVersion=" $( awk <<< " ${suitePackageList[" $suite -amd64" ]}" -F ' : ' -v version=" $version " '
53- $1 == "Package" { pkg = $2 }
54- $1 == "Version" && pkg == "postgresql-" version { print $2; exit }
55- ' ) "
76+ fetch_suite_package_list " $suite " " $version " ' amd64'
77+ fullVersion=" $(
78+ awk_package_list " $suite " " $version " ' amd64' '
79+ $1 == "Package" { pkg = $2 }
80+ $1 == "Version" && pkg == "postgresql-" version { print $2; exit }
81+ '
82+ ) "
5683 if [ -z " $fullVersion " ]; then
5784 echo >&2 " error: missing postgresql-$version package!"
5885 exit 1
@@ -61,11 +88,13 @@ for version in "${versions[@]}"; do
6188 fetch_suite_arches " $suite "
6289 versionArches=
6390 for arch in ${suiteArches["$suite"]} ; do
64- fetch_suite_package_list " $suite " " $arch "
65- archVersion=" $( awk <<< " ${suitePackageList[" $suite -$arch " ]}" -F ' : ' -v version=" $version " '
66- $1 == "Package" { pkg = $2 }
67- $1 == "Version" && pkg == "postgresql-" version { print $2; exit }
68- ' ) "
91+ fetch_suite_package_list " $suite " " $version " " $arch "
92+ archVersion=" $(
93+ awk_package_list " $suite " " $version " " $arch " '
94+ $1 == "Package" { pkg = $2 }
95+ $1 == "Version" && pkg == "postgresql-" version { print $2; exit }
96+ '
97+ ) "
6998 if [ " $archVersion " = " $fullVersion " ]; then
7099 [ -z " $versionArches " ] || versionArches+=' | '
71100 versionArches+=" $arch "
0 commit comments