summaryrefslogtreecommitdiffstats
path: root/pkgs/build-support/upstream-updater
diff options
context:
space:
mode:
authorMichael Raskin <7c6f434c@mail.ru>2012-11-04 23:52:19 +0400
committerMichael Raskin <7c6f434c@mail.ru>2012-11-04 23:52:19 +0400
commitaf2fd342cd7114b7d5c39a4fd37c1a89c15c6496 (patch)
tree8ffc53e32110bd5abefd32bb3972e3278b18e5cc /pkgs/build-support/upstream-updater
parent6c48c3c230f7ca797dbe3d3793e94e2454416a3d (diff)
Updating SBCL to freshest release 1.1.1.
Replacing SBCL upstream tracking expression with a new version in a new format. Minuses: gave up on defining everything in Nix language (now update expression is a series of actions to do when downloading fresh release, it is actually interpreted by shell), now Nix expression contains meaningful whitespace (the area to regenerate is determined by the line with a specific comment and the closing brace on the otherwise empty line). Plusses: only one extra file which could even be moved out-of-tree if desired, clean semantics for traversing multiple links (it is not found in either Debian uscan or Gentoo euscan), the main expression is in one file and is less different from usual style.
Diffstat (limited to 'pkgs/build-support/upstream-updater')
-rwxr-xr-xpkgs/build-support/upstream-updater/update-walker.sh127
1 files changed, 127 insertions, 0 deletions
diff --git a/pkgs/build-support/upstream-updater/update-walker.sh b/pkgs/build-support/upstream-updater/update-walker.sh
new file mode 100755
index 000000000000..12b12a11e895
--- /dev/null
+++ b/pkgs/build-support/upstream-updater/update-walker.sh
@@ -0,0 +1,127 @@
+#! /bin/sh
+
+own_dir="$(cd "$(dirname "$0")"; pwd)"
+
+CURRENT_URL=
+
+url () {
+ CURRENT_URL="$1"
+}
+
+version_unpack () {
+ sed -re '
+ s/[.]/ /g;
+ s@/@ / @g
+ s/-(rc|pre)/ -1 \1 /g;
+ s/-(gamma)/ -2 \1 /g;
+ s/-(beta)/ -3 \1 /g;
+ s/-(alpha)/ -4 \1 /g;
+ '
+}
+
+version_repack () {
+ sed -re '
+ s/ -[0-9]+ ([a-z]+) /-\1/g;
+ s@ / @/@g
+ s/ /./g;
+ '
+}
+
+version_sort () {
+ version_unpack |
+ sort -t ' ' -k 1n -k 2n -k 3n -k 4n -k 5n -k 6n -k 7n -n | tac |
+ version_repack
+}
+
+position_choice () {
+ head -n "${1:-1}" | tail -n "${2:-1}"
+}
+
+matching_links () {
+ "$own_dir"/urls-from-page.sh "$CURRENT_URL" | grep -E "$1"
+}
+
+link () {
+ CURRENT_URL="$(matching_links "$1" | position_choice "$2" "$3")"
+ echo "Linked by: $*"
+ echo "URL: $CURRENT_URL" >&2
+}
+
+version_link () {
+ CURRENT_URL="$(matching_links "$1" | version_sort | position_choice "$2" "$3")"
+ echo "Linked version by: $*"
+ echo "URL: $CURRENT_URL" >&2
+}
+
+redirect () {
+ CURRENT_URL="$(curl -I -L --max-redirs "${1:-99}" "$CURRENT_URL" |
+ grep -E '^Location: ' | position_choice "${2:-999999}" "$3" |
+ sed -e 's/^Location: //; s/\r//')"
+ echo "Redirected: $*"
+ echo "URL: $CURRENT_URL" >&2
+}
+
+replace () {
+ sed -re "s $1 $2 g"
+}
+
+process () {
+ CURRENT_URL="$(echo "$CURRENT_URL" | replace "$1" "$2")"
+ echo "Processed: $*"
+ echo "URL: $CURRENT_URL" >&2
+}
+
+version () {
+ CURRENT_VERSION="$(echo "$CURRENT_URL" | replace "$1" "$2")"
+ echo "Version: $CURRENT_VERSION" >&2
+}
+
+hash () {
+ CURRENT_HASH="$(nix-prefetch-url "$CURRENT_URL")"
+}
+
+name () {
+ CURRENT_NAME="$1"
+}
+
+retrieve_version () {
+ PACKAGED_VERSION="$(nix-instantiate --eval-only '<nixpkgs>' -A "$CURRENT_NAME".meta.version | xargs)"
+}
+
+target () {
+ CURRENT_TARGET="$1"
+}
+
+update_found () {
+ echo "Compare: $CURRENT_VERSION vs $PACKAGED_VERSION"
+ [ "$CURRENT_VERSION" != "$PACKAGED_VERSION" ]
+}
+
+do_regenerate () {
+ cat "$1" | grep -F '# Generated upstream information' -B 999999;
+ echo " rec {"
+ echo " baseName=\"$CURRENT_NAME\";"
+ echo " version=\"$CURRENT_VERSION\";"
+ echo ' name="${baseName}-${version}";'
+ echo " hash=\"$CURRENT_HASH\";"
+ echo " url=\"$CURRENT_URL\";"
+ cat "$1" | grep -F '# Generated upstream information' -A 999999 | grep -E '^ *[}]; *$' -A 999999;
+}
+
+do_overwrite () {
+ hash
+ do_regenerate "$1" > "$1.new.tmp"
+ mv "$1.new.tmp" "$1"
+}
+
+full_path () {
+ echo "$(cd "$(dirname "$1")"; pwd)/$(basename "$1")"
+}
+
+process_config () {
+ source "$(full_path "$1")"
+ retrieve_version
+ update_found && do_overwrite "$CURRENT_TARGET"
+}
+
+process_config "$1"