17
17
version : hash : rustVersion : pgrxVersion :
18
18
let
19
19
cargo = rust-bin . stable . ${ rustVersion } . default ;
20
- #previousVersions = lib.filter (v: v != version) versions; # FIXME
21
20
mkPgrxExtension = callPackages ../../cargo-pgrx/mkPgrxExtension.nix {
22
21
inherit rustVersion pgrxVersion ;
23
22
} ;
@@ -129,20 +128,12 @@ let
129
128
doCheck = false ;
130
129
131
130
postInstall = ''
132
- create_control_files() {
133
- sed -e "/^default_version =/d" \
134
- -e "s|^module_pathname = .*|module_pathname = '\$libdir/${ pname } '|" \
135
- $out/share/postgresql/extension/${ pname } .control > $out/share/postgresql/extension/${ pname } --${ version } .control
136
- rm $out/share/postgresql/extension/${ pname } .control
137
-
138
- if [[ "${ version } " == "${ latestVersion } " ]]; then
139
- {
140
- echo "default_version = '${ latestVersion } '"
141
- cat $out/share/postgresql/extension/${ pname } --${ latestVersion } .control
142
- } > $out/share/postgresql/extension/${ pname } .control
143
- ln -sfn ${ pname } -${ latestVersion } ${ postgresql . dlSuffix } $out/lib/${ pname } ${ postgresql . dlSuffix }
144
- fi
145
- }
131
+ create_control_files() {
132
+ sed -e "/^default_version =/d" \
133
+ -e "s|^module_pathname = .*|module_pathname = '\$libdir/${ pname } -${ version } '|" \
134
+ $out/share/postgresql/extension/${ pname } .control > $out/share/postgresql/extension/${ pname } --${ version } .control
135
+ rm $out/share/postgresql/extension/${ pname } .control
136
+ }
146
137
147
138
create_control_files
148
139
'' ;
165
156
} ;
166
157
}
167
158
) ;
159
+ previouslyPackagedVersions = [
160
+ "0.5.0"
161
+ "0.4.6"
162
+ "0.4.5"
163
+ "0.4.4"
164
+ "0.4.3"
165
+ "0.4.2"
166
+ "0.4.1"
167
+ "0.4.0"
168
+ "0.3.1"
169
+ "0.3.0"
170
+ "0.2.0"
171
+ "0.1.19"
172
+ "0.1.18"
173
+ "0.1.17"
174
+ "0.1.16"
175
+ "0.1.15"
176
+ "0.1.14"
177
+ "0.1.12"
178
+ "0.1.11"
179
+ "0.1.10"
180
+ "0.1.9"
181
+ "0.1.8"
182
+ "0.1.7"
183
+ "0.1.6"
184
+ "0.1.5"
185
+ "0.1.4"
186
+ "0.1.1"
187
+ "0.1.0"
188
+ ] ;
189
+ numberOfPreviouslyPackagedVersions = builtins . length previouslyPackagedVersions ;
168
190
allVersions = ( builtins . fromJSON ( builtins . readFile ../versions.json ) ) . wrappers ;
169
191
supportedVersions = lib . filterAttrs (
170
192
_ : value : builtins . elem ( lib . versions . major postgresql . version ) value . postgresql
@@ -184,29 +206,48 @@ buildEnv {
184
206
"/share/postgresql/extension"
185
207
] ;
186
208
postBuild = ''
187
- # checks
188
- (set -x
189
- test "$(ls -A $out/lib/${ pname } *${ postgresql . dlSuffix } | wc -l)" = "${
190
- toString ( numberOfVersions + 1 )
191
- } "
192
- )
193
-
194
- create_sql_files() {
195
- PREVIOUS_VERSION=""
196
- while IFS= read -r i; do
197
- FILENAME=$(basename "$i")
198
- DIRNAME=$(dirname "$i")
199
- VERSION="$(grep -oE '[0-9]+\.[0-9]+\.[0-9]+' <<< $FILENAME)"
200
- if [[ "$PREVIOUS_VERSION" != "" ]]; then
201
- echo "Processing $i"
202
- MIGRATION_FILENAME="$DIRNAME/'' ${FILENAME/$VERSION/$PREVIOUS_VERSION--$VERSION}"
203
- cp "$i" "$MIGRATION_FILENAME"
204
- fi
205
- PREVIOUS_VERSION="$VERSION"
206
- done < <(find $out -name '*.sql' | sort -V)
209
+ create_control_files() {
210
+ # Create main control file pointing to latest version
211
+ {
212
+ echo "default_version = '${ latestVersion } '"
213
+ cat $out/share/postgresql/extension/${ pname } --${ latestVersion } .control
214
+ } > $out/share/postgresql/extension/${ pname } .control
215
+ }
216
+
217
+ create_lib_files() {
218
+ # Create main library symlink to latest version
219
+ ln -sfn ${ pname } -${ latestVersion } ${ postgresql . dlSuffix } $out/lib/${ pname } ${ postgresql . dlSuffix }
220
+
221
+ # Create symlinks for all previously packaged versions to main library
222
+ for v in ${ lib . concatStringsSep " " previouslyPackagedVersions } ; do
223
+ ln -sfn $out/lib/${ pname } ${ postgresql . dlSuffix } $out/lib/${ pname } -$v${ postgresql . dlSuffix }
224
+ done
207
225
}
208
226
209
- create_sql_files
227
+ create_migration_sql_files() {
228
+ # Create migration SQL files from previous versions to newer versions
229
+ for prev_version in ${ lib . concatStringsSep " " previouslyPackagedVersions } ; do
230
+ for curr_version in ${ lib . concatStringsSep " " versions } ; do
231
+ if [[ "$(printf '%s\n%s' "$prev_version" "$curr_version" | sort -V | head -n1)" == "$prev_version" ]] && [[ "$prev_version" != "$curr_version" ]]; then
232
+ main_sql_file="$out/share/postgresql/extension/wrappers--$curr_version.sql"
233
+ if [ -f "$main_sql_file" ]; then
234
+ new_file="$out/share/postgresql/extension/wrappers--$prev_version--$curr_version.sql"
235
+ cp "$main_sql_file" "$new_file"
236
+ sed -i 's|$libdir/wrappers-[0-9.]*|$libdir/wrappers|g' "$new_file"
237
+ fi
238
+ fi
239
+ done
240
+ done
241
+ }
242
+
243
+ create_control_files
244
+ create_lib_files
245
+ create_migration_sql_files
246
+
247
+ # checks
248
+ (test "$(ls -A $out/lib/${ pname } *${ postgresql . dlSuffix } | wc -l)" = "${
249
+ toString ( numberOfVersions + numberOfPreviouslyPackagedVersions + 1 )
250
+ } ")
210
251
'' ;
211
252
passthru = {
212
253
inherit versions numberOfVersions ;
0 commit comments