summary refs log tree commit diff
path: root/maintainers/scripts
diff options
context:
space:
mode:
authorLuca Bruno <lethalman88@gmail.com>2015-09-23 11:46:02 +0200
committerLuca Bruno <lethalman88@gmail.com>2015-09-25 10:48:39 +0200
commit697d61ceabc9813d2ae5ac553dcb4aabf12903d9 (patch)
treeceb7440b48495a4648e745823e09a81969b8d754 /maintainers/scripts
parentd06a172c1c3f820929344ff37cd37ac4c5eab737 (diff)
downloadnixpkgs-697d61ceabc9813d2ae5ac553dcb4aabf12903d9.tar
nixpkgs-697d61ceabc9813d2ae5ac553dcb4aabf12903d9.tar.gz
nixpkgs-697d61ceabc9813d2ae5ac553dcb4aabf12903d9.tar.bz2
nixpkgs-697d61ceabc9813d2ae5ac553dcb4aabf12903d9.tar.lz
nixpkgs-697d61ceabc9813d2ae5ac553dcb4aabf12903d9.tar.xz
nixpkgs-697d61ceabc9813d2ae5ac553dcb4aabf12903d9.tar.zst
nixpkgs-697d61ceabc9813d2ae5ac553dcb4aabf12903d9.zip
maint script gnome.sh: update all packages
Diffstat (limited to 'maintainers/scripts')
-rwxr-xr-xmaintainers/scripts/gnome.sh238
1 files changed, 147 insertions, 91 deletions
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 <show project>|<update project>|<update-all> [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