#! /bin/bash #---------------------------------------------------------------------------- # update-eislist.sh # # Creation : 2008-08-17 starwarsfan # Last Update: $Id$ # # Copyright (c) 2001-2009 the eisfair team, team(at)eisfair(dot)org> # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. #---------------------------------------------------------------------------- # =========================================================================== # Ask for all parameters to work on your eislists updateEislist () { local leaveFunction=false echo "" echo "Which eislist do you want to update?" choice2="Developer eislist" choice3="TestTeam eislist" choice4="Release eislist" PS3="Your choice: " select userInput in "${msgAbortOperation}" "${choice2}" "${choice3}" "${choice4}" do case ${userInput} in "${msgAbortOperation}") leaveFunction=true break ;; "${choice2}") choosenEislist='--development-version' eislist=${developmentPackageBaseFolder} break ;; "${choice3}") choosenEislist='--test-team-version' eislist=${testTeamPackageBaseFolder} break ;; "${choice4}") choosenEislist='--release-version' eislist=${releasePackageBaseFolder} break ;; *) echo "Please choose one of the given numbers! " ;; esac done # ----------------------------------------------------------- # User requested abort of operation in one of the steps above if ${leaveFunction} then return 0 fi echo "" echo "What do you want to do?" choice2="Show packages on eislist" choice3="Search a package" choice4="Add a package" choice5="Remove a package" choice6="Re-Create eislist" PS3="Your choice: " select userInput in "${msgAbortOperation}" "${choice2}" "${choice3}" "${choice4}" "${choice5}" "${choice6}" do case ${userInput} in "${msgAbortOperation}") leaveFunction=true break ;; "${choice2}") choosenAction='--show' break ;; "${choice3}") choosenAction='--search' break ;; "${choice4}") choosenAction='--add' break ;; "${choice5}") choosenAction='--remove' break ;; "${choice6}") choosenAction='--create' break ;; *) echo "Please choose one of the given numbers! " ;; esac done # ----------------------------------------------------------- # User requested abort of operation in one of the steps above if ${leaveFunction} then return 0 fi if ! getPackageDataArrays then if [ "${choosenAction}" != '--add' ] then return fi fi unset choosenPackage case ${choosenAction} in '--show' ) echo "" echo "These are the packages on the choosen eislist:" echo "" echo " Version Folder Package Destination system(s)" PS3="Scroll back with 'Shift + PgUp' " select choosenPackage in "${msgAbortOperation}" "${listEntries[@]}" "${msgAbortOperation}" do break done ;; '--search' ) echo "" echo -n "Please enter the package name to search: " read packageNameToSearch idx=0 foundPackage=false for actualPackage in "${actualPackageName[@]}" do if [ "${actualPackage}" == "${packageNameToSearch}" ] then echo "Found package version ${actualPackageVersion[${idx}]} on folder '${actualPackageFolder[${idx}]}'" foundPackage=true fi idx=$((idx+1)) done if ! ${foundPackage} then echo "The given package does not exist on the choosen eislist" fi ;; '--add' ) echo "" echo "Enter the package with full path but without any extension like the following" echo "example: /data/development/mypackage" read packageWithPath if [ ! -f "${packageWithPath}.tar.gz" ] && [ ! -f "${packageWithPath}.tar.bz2" ] && [ ! -f "${packageWithPath}.tar.lzma" ] && [ ! -f "${packageWithPath}.tar.xz" ] then echo "Neither package '`basename ${packageWithPath}`.tar.gz' nor " echo "'`basename ${packageWithPath}`.tar.bz2' could be found on given path" echo "'`dirname ${packageWithPath}`'!" elif [ ! -f "${packageWithPath}.tar.gz.info" ] && [ ! -f "${packageWithPath}.tar.bz2.info" ] && [ ! -f "${packageWithPath}.tar.lzma.info" ] && [ ! -f "${packageWithPath}.tar.xz.info" ] then echo "Package info file for package '`basename ${packageWithPath}`' not found!" else cp -f ${packageWithPath}* ${eislist}/ ${scriptCreateEislist} ${choosenEislist} `basename ${packageWithPath}` fi ;; '--remove' ) echo "" echo "These are the packages on the choosen eislist:" echo "" echo " Version Folder Package Destination system(s)" selectionLoop=true while ${selectionLoop} do packageNumbersToRemove='' # ----------------------------------------------------- # At first create the list of packages and ask the user # to choose one ore more of them. idx=0 for currentPackageOnEislist in "${msgAbortOperation}" "${listEntries[@]}" "${msgAbortOperation}" do idx=$((idx+1)) echo "${idx}) ${currentPackageOnEislist}" done echo -n "Please choose one ore more of the given numbers separated by space: " # ------------------------------------------------------- # Now read the userinput and check if he just hits return read userInput if [ "${userInput}" == "" ] then echo "" echo "You entered nothing! Please choose out of the following list." echo "" else # ---------------------------------------------------- # The user entered something. Now evaluate this input. # --------------------------------------------------------------- # Assume everything is ok and the while-loop should not run again selectionLoop=false # ----------------------- # Loop over the userinput for currentPartOfUserInput in ${userInput} do # --------------------------------------------------- # At first check if the current userinput is a number expr ${currentPartOfUserInput} + 0 &> /dev/null if [ $? -lt 3 ] && [ -n "${currentPartOfUserInput}" ] then # ------------------------------- # Userinput is a number, so go on if [ ${currentPartOfUserInput} -eq 1 -o ${currentPartOfUserInput} -eq ${idx} ] then # ------------------------------------- # User choose to abort actual operation myecho "Aborting package selection" leaveFunction=true break 2 elif [ ${currentPartOfUserInput} -lt 1 -o ${currentPartOfUserInput} -gt ${idx} ] then echo "" echo "You entered a number which is not in the given range!" echo "" # ------------------ # Restart while-loop selectionLoop=true break else runningNumber=$((currentPartOfUserInput-2)) packageNumbersToRemove="${packageNumbersToRemove} ${runningNumber}" # packageNumbersToRemove="${packageNumbersToRemove} ${currentPartOfUserInput}" fi else # ------------------------------------------ # Userinput is _not_ a number, so once again echo "" echo "You entered something different than one ore more of the given numbers!" echo "" # ------------------ # Restart while-loop selectionLoop=true break fi done fi done # ----------------------------------------------------------- # User requested abort of operation in one of the steps above if ${leaveFunction} then return 0 fi # -------------------------------------------------- # Now loop over the choosen packages and remove them choosenPackageVersion='' choosenPackage='' choosenPackageSystems='' determinedPackageFolder='' packageRemoved=false for currentPackageNumber in ${packageNumbersToRemove} do # ------------------------------------------------------ # Example: "1.5.2 28 climm eisfair-2" choosenPackageVersion=`echo ${listEntries[${currentPackageNumber}]} | tr -s [:space:] | cut -d " " -f 1` determinedPackageFolder=`echo "${listEntries[${currentPackageNumber}]}" | tr -s [:space:] | cut -d " " -f 2` choosenPackage=`echo ${listEntries[${currentPackageNumber}]} | tr -s [:space:] | cut -d " " -f 3` choosenPackageSystems=`echo ${listEntries[${currentPackageNumber}]} | tr -s [:space:] | cut -d " " -f 4-` # echo "You choose package '${listEntries[${currentPackageNumber}]}', which is located on folder '${eislist}/${determinedPackageFolder}'" # echo "You choose package $((currentPackageNumber+1)): '${listEntries[${currentPackageNumber}]}', which is located on folder '${eislist}/${actualPackageFolder[$currentPackageNumber]}'" echo "You choose package '${choosenPackage}' with version '${choosenPackageVersion}' for the system(s) ${choosenPackageSystems}, which is located on folder '${eislist}/${determinedPackageFolder}'" echo -n "Remove this package now? y/n/a [n]: " read userInput case ${userInput} in 'a'|'A'|'abort'|'Abort') return 0 ;; 'y'|'Y'|'yes'|'Yes') echo -n "Removing package from eislist... " rm -fR ${eislist}/${determinedPackageFolder} packageRemoved=true echo "Done" ;; *) echo "Package not removed" ;; esac done # ------------------------------------------------------- # If a package was removed, the eislist must be recreated if ${packageRemoved} then echo "Updating eislist... " ${scriptCreateEislist} ${choosenEislist} echo "Done" fi ;; '--create' ) echo "Create a structured eislist? This means that the main eislist is separated" echo "into one eislist for each section on which a package should be available." echo -n "Your choice! y/n/a [n]: " read userInput case ${userInput} in 'a'|'A'|'abort'|'Abort') return 0 ;; 'y'|'Y'|'yes'|'Yes') ${scriptCreateEislist} ${choosenEislist} --structured ;; *) ${scriptCreateEislist} ${choosenEislist} ;; esac ;; *) echo -n "Unknown action to do! " ;; esac unset actualPackageName unset actualPackageFolder unset actualPackageVersion unset listEntries }