#!/bin/sh #---------------------------------------------------------------------------- # create-testteam-eislist for testteam-portal # # Creation : 2005-12-18 tg # Last Update: $Id$ # # Copyright (c) 2005-2012 the eisfair team, team(at)eisfair(dot)org # # usage : create-testteam-eislist # # 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. #---------------------------------------------------------------------------- #exec 2> t_team-eislist-trace$$.log #set -x index_header=0 # --------------------------------------------------------------------------- # sub: usage # --------------------------------------------------------------------------- usage() { cat < ${pack_dir}/${1}eis-list.txt < Packagelist of eisfair testteam # Copyright (c) 2001-${pyear} the eisfair team, team(at)eisfair(dot)org> # Welcome to the eisfair test-team package server # ${pack_prefix}/index.txt # # Available packages: EOF } # --------------------------------------------------------------------------- # sub: write eislist footer # --------------------------------------------------------------------------- write_eislist_footer() { # write footer cat >> ${pack_dir}/${1}eis-list.txt < # Last database update: ${pdate} ${ptime} EOF chmod -f 0664 ${pack_dir}/${1}eis-list.txt chgrp -f ${group:-fleis} ${pack_dir}/${1}eis-list.txt } # --------------------------------------------------------------------------- # create eis-list file # --------------------------------------------------------------------------- create_eislist() { _show_menu=${1} if [ -d ${pack_dir} ] then if ${_show_menu} then echo "Creating eis-list in ${pack_dir}" fi else mkdir -p ${pack_dir} chmod -f 0775 ${pack_dir} chgrp -f ${group:-fleis} ${pack_dir} fi # create folder-counter for incrementing dir numbers if [ ! -f ${pack_dir}/folder-counter ] then echo "1" >${pack_dir}/folder-counter chmod -f 0660 ${pack_dir}/folder-counter chgrp -f ${group:-fleis} ${pack_dir}/folder-counter fi # remove all old stuff rm -f ${pack_dir}/*eis-list.txt rm -f ${pack_dir}/index.txt # change dir cd ${pack_dir} # check package_dir_two exists and convert it first if [ -d ${package_dir_two} ] then # check if .info-files exist ls ${package_dir_two}/*.info >/dev/null 2>&1 if [ ${?} -eq 0 ] then for FNAME in ${package_dir_two}/*.info do get_package_folder_number create_package_subfolder FNAME2=`echo ${FNAME} | sed "s#${package_dir_two}/##"` mv ${FNAME} ${folder_number}/${FNAME2} mv ${FNAME%.info} ${folder_number}/${FNAME2%.info} set_package_right done fi rmdir --ignore-fail-on-non-empty ${package_dir_two} fi # check if .info-files exist p_folder=$(ls *.info 2>/dev/null) if [ -n "${p_folder}" ] then for FNAME in ${p_folder} do # check for prefix separator is given case ${FNAME} in *${PREFIX_SEPARATOR}*) get_package_folder_number create_package_subfolder # strip prefix fname_strip=${FNAME#*${PREFIX_SEPARATOR}} # move prefix $packages in folder mv ${FNAME} ${folder_number}/${fname_strip} mv ${FNAME%.info} ${folder_number}/${fname_strip%.info} set_package_right ;; *) get_package_folder_number create_package_subfolder # move $packages in folder mv ${FNAME} ${folder_number}/${FNAME} mv ${FNAME%.info} ${folder_number}/${FNAME%.info} set_package_right ;; esac done fi package_subfolder='' # get subfolder packages list package_subfolder=$(find . -maxdepth 1 -type d -printf '%f\n' | grep '^[0-9]\{0,\}$') pack_folder='' # list package folder pack_folder="updates/update.tar.gz.info updates64/update.tar.gz.info" # folder/*.info for pack_info in ${package_subfolder} do FNAME=$(find ${pack_info} -maxdepth 1 -type f -name '*.info') if [ -n "${FNAME}" ] then parse_info_file "${FNAME}" # if [ "${_pkg_system}" = "eisfair-2" ] # then # case ${FNAME} in # base|update*) # # print list infos with ":" as separator # printf "%-15s:%-60s: %s \n" "#" "${FNAME}" "'${_pkg_short}'" >> ${pack_dir}/XZ23-eis.list # ;; # *) # printf "%-15s:%-60s: %s \n" "#" "${FNAME}" "'${_pkg_short}'" >> ${pack_dir}/XZ23-eis.list # ;; # esac # else # print list infos with ":" as separator # printf "%-15s:%-60s: %s \n" "#" "${FNAME}" "'${_pkg_short}'" >> ${pack_dir}/XZ23-eis.list # fi # # split for multiple systems # for _system_pkg in `echo ${_pkg_system} | sed 's/;/ /g'` # do # echo ${_system_pkg} >>${pack_dir}/XZ23-system.list # # printf "%-15s:%-60s: %s \n" "#" "${FNAME}" "'${_pkg_short}'" >> ${pack_dir}/${_system_pkg}-XZ23-eis.list # done # print index create_index "${FNAME}" fi # for file.info in $pack_info do done # for file.info in $pack_folder do for p_folder in ${pack_folder} do d_folder=$(dirname ${p_folder}) # check if .info-files exist v_folder=$(ls ${d_folder}/*.info) for FNAME in ${v_folder} do case ${FNAME} in *${PREFIX_SEPARATOR}*) # strip prefix fname_strip=${FNAME#*${PREFIX_SEPARATOR}} # move prefix $packages in folder mv ${FNAME} ${d_folder}/${fname_strip} mv ${FNAME%.info} ${d_folder}/${fname_strip%.info} set_package_right ${d_folder} ;; esac done if [ -n "${p_folder}" ] then # first extract the 'short' statement to sort the outprint for FNAME in ${p_folder} do parse_info_file "${FNAME}" # if [ "${_pkg_system}" = "eisfair-2" ] # then # case ${FNAME} in # base|update*) # # print list infos with ":" as separator # printf "%-15s:%-60s: %s \n" "#" "${FNAME}" "'${_pkg_short}'" >> ${pack_dir}/XZ23-eis.list # ;; # *) # printf "%-15s:%-60s: %s \n" "#" "${FNAME}" "'${_pkg_short}'" >> ${pack_dir}/XZ23-eis.list # ;; # esac # else # change Version from update always # print list infos with ":" as separator # printf "%-15s:%-60s: %s \n" "#" "${FNAME}" "'${_pkg_short}'" >> ${pack_dir}/XZ23-eis.list # fi # # split for multiple systems # for _system_pkg in `echo ${_pkg_system} | sed 's/;/ /g'` # do # echo ${_system_pkg} >>${pack_dir}/XZ23-system.list # # printf "%-15s:%-60s: %s \n" "#" "${FNAME}" "'${_pkg_short}'" >> ${pack_dir}/${_system_pkg}-XZ23-eis.list # done # print index create_index "${FNAME}" done fi done # # sort list infos # LANG=C sort -k 1.80 ${pack_dir}/XZ23-eis.list >> ${pack_dir}/XZ23-eis$$.list # # # set 'base' on top from list # grep "updates/update" ${pack_dir}/XZ23-eis$$.list >${pack_dir}/XZ23-eis$$-2.list # grep -v "updates/update" ${pack_dir}/XZ23-eis$$.list >> ${pack_dir}/XZ23-eis$$-2.list # # # write header # write_eislist_header # # # set IFS to ":" as separator # _OLD_IFS=${IFS} # IFS=: # # # print eis-list.txt # while read info line short # do # printf "%-15s %s \n" "${info}" "${line}" >> ${pack_dir}/eis-list.txt # done < ${pack_dir}/XZ23-eis$$-2.list # # # restor IFS # IFS=${_OLD_IFS} # #write footer # write_eislist_footer # # stuff to create separate eislists for eisfair systems # _pack_system=`LANG=C sort -u ${pack_dir}/XZ23-system.list` # # for _pkg_list in ${_pack_system} # do # LANG=C sort -k 1.80 ${pack_dir}/${_pkg_list}-XZ23-eis.list >> ${pack_dir}/${_pkg_list}-XZ23-eis$$.list # # # set 'base' on top from list # grep "updates/update" ${pack_dir}/${_pkg_list}-XZ23-eis$$.list >${pack_dir}/${_pkg_list}-XZ23-eis$$-2.list # grep -v "updates/update" ${pack_dir}/${_pkg_list}-XZ23-eis$$.list >> ${pack_dir}/${_pkg_list}-XZ23-eis$$-2.list # # write_eislist_header "${_pkg_list}-" # # # set IFS to ":" as separator # _OLD_IFS=${IFS} # IFS=: # # # print eis-list.txt # while read info line short # do # printf "%-15s %s \n" "${info}" "${line}" >> ${pack_dir}/${_pkg_list}-eis-list.txt # done < ${pack_dir}/${_pkg_list}-XZ23-eis$$-2.list # # # restore IFS # IFS=${_OLD_IFS} # write_eislist_footer "${_pkg_list}-" # done # remove tmp files rm -f ${pack_dir}/*XZ23-* # cat from Pack-Eis index.txt is deprecated # # get index from pack-eis # wget -q http://www.pack-eis.de/index.txt -O ${pack_dir}/index.pack-eis.txt # # # set separator lines in index.txt # cat >> ${pack_dir}/index.txt <> ${pack_dir}/index.txt # rm -f ${pack_dir}/index.pack-eis.txt chmod -f 0664 ${pack_dir}/index.txt chgrp -f ${group:-fleis} ${pack_dir}/index.txt if [ "${_show_menu}" = "true" ] then select_eislist_action fi } # --------------------------------------------------------------------------- # create index.txt file # --------------------------------------------------------------------------- create_index() { FNAME=${1} # check for index header if [ ${index_header} -eq 0 ] then # write index header cat > ${pack_dir}/index.txt <> ${pack_dir}/index.txt } # --------------------------------------------------------------------------- # sub: folder delete # --------------------------------------------------------------------------- folder_delete() { case ${delete_folder} in '') select_eislist_action ;; 0) exit 127 ;; *) if is_numeric ${delete_folder} && [ ${delete_folder} -le ${max_list} ] then folder_to_delete="`echo "${sort_list}" | sed -n "${delete_folder}p" | cut -d' ' -f5`" rm -rf ${folder_to_delete} index_header=0 create_eislist "false" else second_question read delete_folder folder_delete fi ;; esac } # --------------------------------------------------------------------------- # sub: list packages # --------------------------------------------------------------------------- list_package() { action_to_do="${1}" sort_list='' if [ ! -d ${pack_dir} ] then echo "No package dir available" anykey select_eislist_action fi # change dir cd ${pack_dir} package_subfolder='' # get subfolder packages list package_subfolder=$(find . -maxdepth 1 -type d -printf '%f\n' | grep '^[0-9]\{0,\}$') for _pkg_info in ${package_subfolder} do FNAME=$(find ${_pkg_info} -maxdepth 1 -type f -name '*.info') if [ -n "${FNAME}" ] then parse_info_file "${FNAME}" echo "${_pkg_name}" "${_pkg_version}" "${_pkg_date}" "${_pkg_system}" "${_pkg_info}" >> ${pack_dir}/XZ23-eis.list fi done # sort list infos sort_list=`LANG=C sort ${pack_dir}/XZ23-eis.list` clrhome text_color --info echo "Available packages:" text_color --std echo idx=1 # print list echo "${sort_list}" | while read line do set -- ${line} _list_pkg="${1}" _list_version="${2}" _list_date="${3}" _list_system="${4}" printf "%6s %-28s %-20s %-10s %-8s \n" "${idx}." "${_list_pkg}" "${_list_version}" "${_list_date}" "${_list_system}" idx=$((${idx} + 1)) done # remove tmp files rm -f ${pack_dir}/XZ23-* max_list=$(echo "${sort_list}" | wc -l) first_question read delete_folder folder_delete list_package "${action_to_do}" } # --------------------------------------------------------------------------- # main # --------------------------------------------------------------------------- # set defaults index_file="https://web.nettworks.org/eisfair/tarballs_tteam/index.txt" pack_prefix="https://web.nettworks.org/eisfair/tarballs_tteam" pack_dir="/project/www/tarballs_tteam" #base_version=$(ls ${package_dir}/updates/update-*.tar* | # grep -v ".info" | # tail -n2 | # head -n1 | # sed 's#.*-##; s#\.tar.*$##') # for old compatible folder settings package_dir_two="eisfair2" quiet='false' # read parameters while [ ${#} -ne 0 ] do case ${1} in -q|--quiet) # set quiet quiet="true" shift ;; *) usage exit 127 ;; esac done # get current directory call_dir=$(pwd) # get start directory start_dir=$(dirname $0)/.. cd $start_dir start_dir=$(pwd) # overwrite the default value with entry from _testteam.pack_dir if [ -f ${start_dir}/_ADMIN/_testteam.pack_dir ] then . ${start_dir}/_ADMIN/_testteam.pack_dir fi # include eislerlib . $start_dir/_ADMIN/eislerlib . $start_dir/_ADMIN/prefix-separator if "${quiet:-false}" then create_eislist "false" else select_eislist_action fi exit 0 #------------------------------------------------------------------------ # end #------------------------------------------------------------------------