about summary refs log tree commit diff
path: root/nixpkgs/pkgs/common-updater/scripts/list-archive-two-levels-versions
blob: 4263a9de3ca3e1f76a600f9a00343fb8474560dd (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#!/usr/bin/env bash

# lists all available versions listed for a package in a site (http)

archive=""  # archive url
pname=""  # package name
file=""  # file for writing debugging information

while (( $# > 0 )); do
    flag="$1"
    shift 1
    case "$flag" in
        --url=*)
            archive="${flag#*=}"
            ;;
        --pname=*)
            pname="${flag#*=}"
            ;;
        --file=*)
            file="${flag#*=}"
            ;;
        *)
            echo "$0: unknown option ‘${flag}’"
            exit 1
            ;;
    esac
done

# by default set url to the base dir of the first url in src.urls
if [[ -z "$archive" ]]; then
    archive="$(nix-instantiate $systemArg --eval -E \
                   "with import ./. {}; dirOf (dirOf (lib.head $UPDATE_NIX_ATTR_PATH.src.urls))" \
            | tr -d '"')"
fi

if [[ -z "$pname" ]]; then
    pname="$UPDATE_NIX_ATTR_PATH"
fi

# print a debugging message
if [[ -n "$file" ]]; then
    echo "# Listing versions for '$pname' at $archive" >> $file
fi

# list all major-minor versions from archive
tags1=$(curl -sS "$archive/")
tags1=$(echo "$tags1" | sed -rne 's,^<a href="([0-9]+\.[0-9]+)/">.*,\1,p')

# print available versions
for tag in $tags1; do
    tags2=$(curl -sS "$archive/$tag/")
    tags2=$(echo "$tags2" | sed -rne "s,^<a href=\"$pname-([0-9.]+)\\.[^0-9].*\">.*,\\1,p")
    echo "$tags2"
done