@@ -24,14 +24,39 @@ declare -A alpineVersion=(
24
24
)
25
25
26
26
packagesBase=' 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
+ }
28
35
fetch_suite_package_list () {
29
36
local suite=" $1 " ; shift
30
- local arch=" ${1:- amd64} "
37
+ local version=" $1 " ; shift
38
+ local arch=" $1 " ; shift
31
39
40
+ # normal (GA) releases end up in the "main" component of upstream's repository
32
41
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 "
34
45
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"]} "
35
60
}
36
61
fetch_suite_arches () {
37
62
local suite=" $1 " ; shift
@@ -48,11 +73,13 @@ for version in "${versions[@]}"; do
48
73
suite=" ${tag%% -slim} "
49
74
majorVersion=" ${version%% .* } "
50
75
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
+ ) "
56
83
if [ -z " $fullVersion " ]; then
57
84
echo >&2 " error: missing postgresql-$version package!"
58
85
exit 1
@@ -61,11 +88,13 @@ for version in "${versions[@]}"; do
61
88
fetch_suite_arches " $suite "
62
89
versionArches=
63
90
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
+ ) "
69
98
if [ " $archVersion " = " $fullVersion " ]; then
70
99
[ -z " $versionArches " ] || versionArches+=' | '
71
100
versionArches+=" $arch "
0 commit comments