summary refs log tree commit diff
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)
downloadnixpkgs-af2fd342cd7114b7d5c39a4fd37c1a89c15c6496.tar
nixpkgs-af2fd342cd7114b7d5c39a4fd37c1a89c15c6496.tar.gz
nixpkgs-af2fd342cd7114b7d5c39a4fd37c1a89c15c6496.tar.bz2
nixpkgs-af2fd342cd7114b7d5c39a4fd37c1a89c15c6496.tar.lz
nixpkgs-af2fd342cd7114b7d5c39a4fd37c1a89c15c6496.tar.xz
nixpkgs-af2fd342cd7114b7d5c39a4fd37c1a89c15c6496.tar.zst
nixpkgs-af2fd342cd7114b7d5c39a4fd37c1a89c15c6496.zip
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 00000000000..12b12a11e89
--- /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"