summary refs log tree commit diff
path: root/maintainers/scripts/gnome-latest.sh
blob: 9290b6deaff0ec821209ce8daa24730f9d126b32 (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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#!/bin/sh

GNOME_FTP="ftp.gnome.org/pub/GNOME/sources"

project=$1

if [ "$project" == "--help" ]; then
  echo "Usage: $0 project [major.minor]"
  exit 0
fi

baseVersion=$2

if [ -z "$project" ]; then
  echo "No project specified, exiting"
  exit 1
fi

# curl -l ftp://... doesn't work from my office in HSE, and I don't want to have
# any conversations with sysadmin. Somehow lftp works.
if [ "$FTP_CLIENT" = "lftp" ]; then
  ls_ftp() {
    lftp -c "open $1; cls"
  }
else
  ls_ftp() {
    curl -l "$1"/
  }
fi

if [ -z "$baseVersion" ]; then
  echo "Looking for available versions..." >&2
  available_baseversions=( `ls_ftp ftp://${GNOME_FTP}/${project} | grep '[0-9]\.[0-9]' | sort -t. -k1,1n -k 2,2n` )
  echo -e "The following versions are available:\n ${available_baseversions[@]}" >&2
  echo -en "Choose one of them: " >&2
  read baseVersion
fi

FTPDIR="${GNOME_FTP}/${project}/${baseVersion}"

#version=`curl -l ${FTPDIR}/ 2>/dev/null | grep LATEST-IS | sed -e s/LATEST-IS-//`
# gnome's LATEST-IS is broken. Do not trust it.

files=$(ls_ftp "${FTPDIR}")
declare -A versions

for f in $files; do
  case $f in
    (LATEST-IS-*|*.news|*.changes|*.sha256sum|*.diff*):
      ;;
    ($project-*.*.9*.tar.*):
      tmp=${f#$project-}
      tmp=${tmp%.tar*}
      echo "Ignored unstable version ${tmp}" >&2
      ;;
    ($project-*.tar.*):
      tmp=${f#$project-}
      tmp=${tmp%.tar*}
      versions[${tmp}]=1
      ;;
    (*):
      echo "UNKNOWN FILE $f"
      ;;
  esac
done
echo "Found versions ${!versions[@]}" >&2
version=`echo ${!versions[@]} | sed -e 's/ /\n/g' | sort -t. -k1,1n -k 2,2n -k 3,3n | tail -n1`
echo "Latest version is: ${version}" >&2

name=${project}-${version}
echo "Fetching .sha256 file" >&2
curl -O http://${FTPDIR}/${name}.sha256sum

extensions=( "xz" "bz2" "gz" )
echo "Choosing archive extension (known are ${extensions[@]})..." >&2
for ext in ${extensions[@]}; do
  if grep "\\.tar\\.${ext}$" ${name}.sha256sum >& /dev/null; then
    ext_pref=$ext
    sha256=$(grep "\\.tar\\.${ext}$" ${name}.sha256sum | cut -f1 -d\ )
    break
  fi
done
sha256=`nix-hash --to-base32 --type sha256 $sha256`
echo "Chosen ${ext_pref}, hash is ${sha256}" >&2

cat <<EOF
  name = "${project}-${version}";

  src = fetchurl {
    url = mirror://gnome/sources/${project}/${baseVersion}/${project}-${version}.tar.${ext_pref};
    sha256 = "${sha256}";
  };
EOF

rm -v ${name}.sha256sum >&2