From 697d61ceabc9813d2ae5ac553dcb4aabf12903d9 Mon Sep 17 00:00:00 2001 From: Luca Bruno Date: Wed, 23 Sep 2015 11:46:02 +0200 Subject: maint script gnome.sh: update all packages --- maintainers/scripts/gnome.sh | 238 ++++++++++++++++++++++++++----------------- 1 file changed, 147 insertions(+), 91 deletions(-) (limited to 'maintainers/scripts') diff --git a/maintainers/scripts/gnome.sh b/maintainers/scripts/gnome.sh index cd2c5777403..9398331d0d6 100755 --- a/maintainers/scripts/gnome.sh +++ b/maintainers/scripts/gnome.sh @@ -4,28 +4,24 @@ set -o pipefail GNOME_FTP="ftp.gnome.org/pub/GNOME/sources" +# projects that don't follow the GNOME major versioning, or that we don't want to +# programmatically update +NO_GNOME_MAJOR="gtkhtml gdm" + usage() { - echo "Usage: $0 show|update project [major.minor]" >&2 + echo "Usage: $0 gnome_dir || [major.minor]" >&2 + echo "gnome_dir is for example pkgs/desktops/gnome-3/3.18" >&2 exit 0 } -if [ "$#" -lt 1 ]; then +if [ "$#" -lt 2 ]; then usage fi -action="$1" -project="$2" -majorVersion="$3" - -if [ "$action" != "show" ] && [ "$action" != "update" ]; then - echo "Unknown action $action" >&2 - usage -fi +GNOME_TOP="$1" +shift -if [ -z "$project" ]; then - echo "No project specified, exiting" - exit 1 -fi +action="$1" # 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. @@ -39,79 +35,93 @@ else } fi -if [ -z "$majorVersion" ]; 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` ) - if [ "$?" -ne "0" ]; then - echo "Project $project not found" >&2 - exit 1 +find_project() { + exec find "$GNOME_TOP" -mindepth 2 -maxdepth 2 -type d $@ +} + +show_project() { + local project="$1" + local majorVersion="$2" + local version="" + + if [ -z "$majorVersion" ]; then + echo "Looking for available versions..." >&2 + local available_baseversions=( `ls_ftp ftp://${GNOME_FTP}/${project} | grep '[0-9]\.[0-9]' | sort -t. -k1,1n -k 2,2n` ) + if [ "$?" -ne "0" ]; then + echo "Project $project not found" >&2 + return 1 + fi + + echo -e "The following versions are available:\n ${available_baseversions[@]}" >&2 + echo -en "Choose one of them: " >&2 + read majorVersion fi - echo -e "The following versions are available:\n ${available_baseversions[@]}" >&2 - echo -en "Choose one of them: " >&2 - read majorVersion -fi - -if echo "$majorVersion" | grep -q "[0-9]\+\.[0-9]\+\.[0-9]\+"; then - # not a major version - version="$majorVersion" - majorVersion=$(echo "$majorVersion" | cut -d '.' -f 1,2) -fi - -FTPDIR="${GNOME_FTP}/${project}/${majorVersion}" - -#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. - -if [ -z "$version" ]; then - 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 -fi - -name=${project}-${version} -echo "Fetching .sha256 file" >&2 -sha256out=$(curl -s -f http://${FTPDIR}/${name}.sha256sum) - -if [ "$?" -ne "0" ]; then - echo "Version not found" >&2 - exit 1 -fi - -extensions=( "xz" "bz2" "gz" ) -echo "Choosing archive extension (known are ${extensions[@]})..." >&2 -for ext in ${extensions[@]}; do - if echo -e "$sha256out" | grep -q "\\.tar\\.${ext}$"; then - ext_pref=$ext - sha256=$(echo -e "$sha256out" | grep "\\.tar\\.${ext}$" | cut -f1 -d\ ) - break + if echo "$majorVersion" | grep -q "[0-9]\+\.[0-9]\+\.[0-9]\+"; then + # not a major version + version="$majorVersion" + majorVersion=$(echo "$majorVersion" | cut -d '.' -f 1,2) fi -done -echo "Chosen ${ext_pref}, hash is ${sha256}" >&2 - -src="# Autogenerated by maintainers/scripts/gnome.sh update + + local FTPDIR="${GNOME_FTP}/${project}/${majorVersion}" + + #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. + + if [ -z "$version" ]; then + local 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" >&2 + ;; + 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` + if [ -z "$version" ]; then + echo "No version available for major $majorVersion" >&2 + return 1 + fi + + echo "Latest version is: ${version}" >&2 + fi + + local name=${project}-${version} + echo "Fetching .sha256 file" >&2 + local sha256out=$(curl -s -f http://${FTPDIR}/${name}.sha256sum) + + if [ "$?" -ne "0" ]; then + echo "Version not found" >&2 + return 1 + fi + + extensions=( "xz" "bz2" "gz" ) + echo "Choosing archive extension (known are ${extensions[@]})..." >&2 + for ext in ${extensions[@]}; do + if echo -e "$sha256out" | grep -q "\\.tar\\.${ext}$"; then + ext_pref=$ext + sha256=$(echo -e "$sha256out" | grep "\\.tar\\.${ext}$" | cut -f1 -d\ ) + break + fi + done + echo "Chosen ${ext_pref}, hash is ${sha256}" >&2 + + echo "# Autogenerated by maintainers/scripts/gnome.sh update fetchurl: { name = \"${project}-${version}\"; @@ -122,17 +132,63 @@ fetchurl: { }; }" -if [ "$action" == "update" ]; then + return 0 +} + +update_project() { + local project="$1" + local majorVersion="$2" + # find project in nixpkgs tree - GNOME_TOP=$(readlink -e $(dirname "${BASH_SOURCE[0]}")"/../../pkgs/desktops/gnome-3/") - projectPath=$(find "$GNOME_TOP" -name "$project" -print) + projectPath=$(find_project -name "$project" -print) if [ -z "$projectPath" ]; then echo "Project $project not found under $GNOME_TOP" exit 1 fi - echo "Updating $projectPath/src.nix" - echo -e "$src" > "$projectPath/src.nix" + src=$(show_project "$project" "$majorVersion") + + if [ "$?" -eq "0" ]; then + echo "Updating $projectPath/src.nix" >&2 + echo -e "$src" > "$projectPath/src.nix" + fi + + return 0 +} + +if [ "$action" == "update-all" ]; then + majorVersion="$2" + if [ -z "$majorVersion" ]; then + echo "No major version specified" >&2 + usage + fi + + # find projects + projects=$(find_project -exec basename '{}' \;) + for project in $projects; do + if echo "$NO_GNOME_MAJOR"|grep -q $project; then + echo "Skipping $project" + else + echo "= Updating $project to $majorVersion" >&2 + update_project $project $majorVersion + echo >&2 + fi + done else - echo -e "\n$src" -fi \ No newline at end of file + project="$2" + majorVersion="$3" + + if [ -z "$project" ]; then + echo "No project specified, exiting" >&2 + usage + fi + + if [ "$action" == "show" ]; then + show_project $project $majorVersion + elif [ "$action" == "update" ]; then + update_project $project $majorVersion + else + echo "Unknown action $action" >&2 + usage + fi +fi -- cgit 1.4.1