maint script gnome.sh: update all packages
This commit is contained in:
parent
d06a172c1c
commit
697d61ceab
|
@ -4,28 +4,24 @@ set -o pipefail
|
||||||
|
|
||||||
GNOME_FTP="ftp.gnome.org/pub/GNOME/sources"
|
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() {
|
usage() {
|
||||||
echo "Usage: $0 show|update project [major.minor]" >&2
|
echo "Usage: $0 gnome_dir <show project>|<update project>|<update-all> [major.minor]" >&2
|
||||||
|
echo "gnome_dir is for example pkgs/desktops/gnome-3/3.18" >&2
|
||||||
exit 0
|
exit 0
|
||||||
}
|
}
|
||||||
|
|
||||||
if [ "$#" -lt 1 ]; then
|
if [ "$#" -lt 2 ]; then
|
||||||
usage
|
usage
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
GNOME_TOP="$1"
|
||||||
|
shift
|
||||||
|
|
||||||
action="$1"
|
action="$1"
|
||||||
project="$2"
|
|
||||||
majorVersion="$3"
|
|
||||||
|
|
||||||
if [ "$action" != "show" ] && [ "$action" != "update" ]; then
|
|
||||||
echo "Unknown action $action" >&2
|
|
||||||
usage
|
|
||||||
fi
|
|
||||||
|
|
||||||
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
|
# 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.
|
# any conversations with sysadmin. Somehow lftp works.
|
||||||
|
@ -39,79 +35,93 @@ else
|
||||||
}
|
}
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -z "$majorVersion" ]; then
|
find_project() {
|
||||||
echo "Looking for available versions..." >&2
|
exec find "$GNOME_TOP" -mindepth 2 -maxdepth 2 -type d $@
|
||||||
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
|
show_project() {
|
||||||
exit 1
|
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
|
fi
|
||||||
|
|
||||||
echo -e "The following versions are available:\n ${available_baseversions[@]}" >&2
|
if echo "$majorVersion" | grep -q "[0-9]\+\.[0-9]\+\.[0-9]\+"; then
|
||||||
echo -en "Choose one of them: " >&2
|
# not a major version
|
||||||
read majorVersion
|
version="$majorVersion"
|
||||||
fi
|
majorVersion=$(echo "$majorVersion" | cut -d '.' -f 1,2)
|
||||||
|
|
||||||
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
|
|
||||||
fi
|
fi
|
||||||
done
|
|
||||||
echo "Chosen ${ext_pref}, hash is ${sha256}" >&2
|
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
|
||||||
|
|
||||||
src="# Autogenerated by maintainers/scripts/gnome.sh update
|
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: {
|
fetchurl: {
|
||||||
name = \"${project}-${version}\";
|
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
|
# find project in nixpkgs tree
|
||||||
GNOME_TOP=$(readlink -e $(dirname "${BASH_SOURCE[0]}")"/../../pkgs/desktops/gnome-3/")
|
projectPath=$(find_project -name "$project" -print)
|
||||||
projectPath=$(find "$GNOME_TOP" -name "$project" -print)
|
|
||||||
if [ -z "$projectPath" ]; then
|
if [ -z "$projectPath" ]; then
|
||||||
echo "Project $project not found under $GNOME_TOP"
|
echo "Project $project not found under $GNOME_TOP"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "Updating $projectPath/src.nix"
|
src=$(show_project "$project" "$majorVersion")
|
||||||
echo -e "$src" > "$projectPath/src.nix"
|
|
||||||
|
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
|
else
|
||||||
echo -e "\n$src"
|
project="$2"
|
||||||
fi
|
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
|
||||||
|
|
Loading…
Reference in New Issue
Block a user