#!/bin/bash # export default C locale export LC_ALL=C MY_REPOS=( "branches/R11-stable" "trunk" ) MY_ARCHES=( "x86_64" "i686" ) MY_DISTRO_PKG_BASE="/var/www/htdocs/magellan/R11" MY_DISTRO_HTTP_PKG_BASE="http://magellan-linux.de/magellan/R11" MY_SSHLOGIN_BASE="tjoke@magellan-linux.de" MY_MAGE_FEATURES=( "pkgdistrotag" ) MY_MAGE_FEATURES_i686=( "srcpkgbuild" ) # decide wether to use http method or not USE_HTTP=0 if [[ $1 = --http ]] then USE_HTTP=1 shift fi MY_SVN_BASE="$1" if [[ -z ${MY_SVN_BASE} ]] then MY_SVN_BASE="$(mktemp -d -t tree-cleanup.XXXXXXXXXX)" #MY_SVN_BASE="/tmp/tree-cleanup.Y7otVmppgA" fi MY_SVN_OPTS="" MY_SVN_ROOT="svn://cvs.magellan-linux.de" export PKGLIST=() export SRCPKGLIST=() # load_arch_values ARCH load_arch_values() { local arch="$1" MAGE_FEATURES=( ${MY_MAGE_FEATURES[*]} ) MAGE_FEATURES+=( $(eval echo \${MY_MAGE_FEATURES_${arch}[*]}) ) export MAGE_FEATURES export ARCH="${arch}" export CHOST="${arch}-pc-linux-gnu" export PACKAGES_SERVER_PATH="packages/${arch}" export PKGDIR="${MY_DISTRO_PKG_BASE}/packages/${arch}/" export HTTP_PKGDIR="${MY_DISTRO_HTTP_PKG_BASE}/packages/${arch}/" export SRCPKGDIR="${MY_DISTRO_PKG_BASE}/packages/src/" export HTTP_SRCPKGDIR="${MY_DISTRO_HTTP_PKG_BASE}/packages/src/" } # generate_pkg_file_list REPO generate_pkg_file_list() { local repo="$1" local smage local arch local _findlist export SMAGESCRIPTSDIR="${repo}" # speed up things - include distribution file here source ${SMAGESCRIPTSDIR}/distribution _findlist=$(find ${repo} -name \*.${SMAGESUFFIX} | sort -u) for arch in ${MY_ARCHES[*]} do load_arch_values ${arch} load_mage_features for smage in ${_findlist} do echo "Processing ${smage}" #smagesource ${smage} &> /dev/null || die # speed up things FVERBOSE=off source "${smage}" &> /dev/null || die # honor split-packages if [[ -n ${SPLIT_PACKAGES} ]] then local split_pkg_base="${PNAME}" split_save_variables for subpackage in ${SPLIT_PACKAGES} do export PNAME="${subpackage}" split_info_${subpackage} # fix PCATEGORIE -> PCAT if [[ ! -z ${PCATEGORIE} ]] then PCAT="${PCATEGORIE}" unset PCATEGORIE fi # echo "DEBUG: split_package()" # echo "DEBUG: PNAME='${PNAME}'" # echo "DEBUG: PVER='${PVER}'" # echo "DEBUG: PBUILD='${PBUILD}'" # echo "DEBUG: SMAGESCRIPTSDIR='${SMAGESCRIPTSDIR}'" # echo "DEBUG: DISTROTAG='${DISTROTAG}'" # echo "DEBUG: print_distrotag()='$(print_distrotag)'" # echo "DEBUG: ARCH='${ARCH}'" # echo "DEBUG: CHOST='${CHOST}'" # echo "DEBUG: PACKAGES_SERVER_PATH='${PACKAGES_SERVER_PATH}'" # echo "DEBUG: PKGDIR='${PKGDIR}'" # echo "DEBUG: SRCPKGDIR='${SRCPKGDIR}'" # echo "DEBUG: ${PNAME}${target}-${PVER}-${ARCH}$(print_distrotag)-${PBUILD}.${PKGSUFFIX}" PKGLIST+=( ${PNAME}${target}-${PVER}-${ARCH}$(print_distrotag)-${PBUILD}.${PKGSUFFIX} ) # restore smage environment split_restore_variables done # unset all saved smage variables split_unset_variables else # echo "DEBUG: PNAME='${PNAME}'" # echo "DEBUG: PVER='${PVER}'" # echo "DEBUG: PBUILD='${PBUILD}'" # echo "DEBUG: SMAGESCRIPTSDIR='${SMAGESCRIPTSDIR}'" # echo "DEBUG: DISTROTAG='${DISTROTAG}'" # echo "DEBUG: print_distrotag()='$(print_distrotag)'" # echo "DEBUG: ARCH='${ARCH}'" # echo "DEBUG: CHOST='${CHOST}'" # echo "DEBUG: PACKAGES_SERVER_PATH='${PACKAGES_SERVER_PATH}'" # echo "DEBUG: PKGDIR='${PKGDIR}'" # echo "DEBUG: SRCPKGDIR='${SRCPKGDIR}'" # echo "DEBUG: ${PNAME}${target}-${PVER}-${ARCH}$(print_distrotag)-${PBUILD}.${PKGSUFFIX}" PKGLIST+=( ${PNAME}${target}-${PVER}-${ARCH}$(print_distrotag)-${PBUILD}.${PKGSUFFIX} ) fi if mqueryfeature "srcpkgbuild" then # echo "DEBUG: ${PNAME}${target}-${PVER}-${PBUILD}.${SRCPKGSUFFIX}" SRCPKGLIST+=( ${PNAME}${target}-${PVER}-${PBUILD}.${SRCPKGSUFFIX} ) fi done done } # check_pkglist VARIABLE PKGFILE check_pkglist() { local i local var="$1" local pkg="$2" for i in $(eval echo "\${${var}[*]}") do if [[ ${i} = ${pkg} ]] then # delete found entry from variable eval $(echo "${var}=(\${${var}[*]//${i}})") return 0 fi done return 1 } # checkout svn sources for mage and smage repos export SVNROOT="${MY_SVN_ROOT}" [[ ! -d ${MY_SVN_BASE} ]] && install -d ${MY_SVN_BASE} for module in magellan-source/trunk/mage ${MY_REPOS[*]} do case ${module} in magellan-source/*) repo="${module}"; codir=mage-src ;; *) repo="smage/${module}"; codir="smage/${module}" ;; esac if [ ! -d ${MY_SVN_BASE}/${module}/.svn ] then ( cd ${MY_SVN_BASE}; svn checkout ${MY_SVN_OPTS} ${SVNROOT}/${repo} ${codir} ) else ( cd ${MY_SVN_BASE}; svn update ${MY_SVN_OPTS} ${SVNROOT}/${repo} ${codir} ) fi # exclude deprecated if [ -d ${MY_SVN_BASE}/${codir}/deprecated ] then echo "deleting ${MY_SVN_BASE}/${codir}/deprecated" rm -r ${MY_SVN_BASE}/${codir}/deprecated fi done # include functions from fresh mage checkout source ${MY_SVN_BASE}/mage-src/usr/lib/mage/mage.rc.global.in export MLIBDIR="${MY_SVN_BASE}/mage-src/usr/lib/mage" source ${MLIBDIR}/mage4.functions.sh source ${MLIBDIR}/smage2.functions.sh for repo in ${MY_REPOS[*]} do generate_pkg_file_list "${MY_SVN_BASE}/smage/${repo}" done #echo #echo "DEBUG:" #for i in $(echo ${PKGLIST[*]} | sort | uniq) #do # echo "${i}" #done #for i in $(echo "${SRCPKGLIST[*]}" | sort | uniq) #do # echo "${i}" #done #echo # initialize lists if [[ ${USE_HTTP} = 1 ]] then :> ${MY_SVN_BASE}/pkglist :> ${MY_SVN_BASE}/srcpkglist fi # make a copy of the lists CP_PKGLIST=( ${PKGLIST[*]} ) CP_SRCPKGLIST=( ${SRCPKGLIST[*]} ) # and save them for resume echo "${CP_PKGLIST[*]}" > ${MY_SVN_BASE}/saved_pkglist echo "${CP_SRCPKGLIST[*]}" > ${MY_SVN_BASE}/saved_srcpkglist for arch in ${MY_ARCHES[*]} do load_arch_values "${arch}" load_mage_features # make arch copy of the arrays eval $(echo "PKGLIST_${arch}=( ${PKGLIST[*]} )") eval $(echo "SRCPKGLIST_${arch}=( ${SRCPKGLIST[*]} )") if [ ! -d ${PKGDIR}/_deprecated ] then install -d ${PKGDIR}/_deprecated || die "install ${PKGDIR}/${arch}/_deprecated" fi if [[ ${USE_HTTP} = 1 ]] then _filelist=$(lynx -dump -listonly ${HTTP_PKGDIR} | grep ".${PKGSUFFIX}" | sed "s:.*${PACKAGES_SERVER_PATH}/\(.*.${PKGSUFFIX}\):\1:") else _filelist=$(find ${PKGDIR} -name \*.${PKGSUFFIX} -printf '%f\n' | sort) fi if [[ ${USE_HTTP} = 1 ]] then echo "install -d ${PKGDIR}/_deprecated" >> ${MY_SVN_BASE}/pkglist fi for file in ${_filelist} do if check_pkglist PKGLIST "${file}" then echo -e "${COLGREEN}[k] - ${file}${COLDEFAULT}" else echo -e "${COLRED}[d] - ${file}${COLDEFAULT}" if [[ ${USE_HTTP} = 1 ]] then echo "mv -v ${PKGDIR}/${file} ${PKGDIR}/_deprecated/ " >> ${MY_SVN_BASE}/pkglist else mv ${PKGDIR}/${file} ${PKGDIR}/_deprecated/ || die "move ${PKGDIR}/${file} -> _deprecated" fi fi done if mqueryfeature "srcpkgbuild" then if [[ ${USE_HTTP} = 1 ]] then _filelist=$(lynx -dump -listonly ${HTTP_SRCPKGDIR} | grep ".${SRCPKGSUFFIX}" | sed "s:.*packages/src/\(.*.${SRCPKGSUFFIX}\):\1:") else _filelist=$(find ${SRCPKGDIR} -name \*.${SRCPKGSUFFIX} -printf '%f\n' | sort) fi if [[ ${USE_HTTP} = 1 ]] then echo "install -d ${SRCPKGDIR}/_deprecated" >> ${MY_SVN_BASE}/srcpkglist fi for file in ${_filelist} do if check_pkglist SRCPKGLIST "${file}" then echo -e "${COLGREEN}[k] - ${file}${COLDEFAULT}" else echo -e "${COLRED}[d] - ${file}${COLDEFAULT}" if [[ ${USE_HTTP} = 1 ]] then echo "mv -v ${SRCPKGDIR}/${file} ${SRCPKGDIR}/_deprecated/" >> ${MY_SVN_BASE}/srcpkglist else mv ${SRCPKGDIR}/${file} ${SRCPKGDIR}/_deprecated/ || die "move ${SRCPKGDIR}/${file} -> _deprecated" fi fi done fi done if [[ ${USE_HTTP} = 777 ]] then for list in pkglist srcpkglist do if [[ -f ${MY_SVN_BASE}/${list} ]] then scp ${MY_SVN_BASE}/${list} ${MY_SSHLOGIN_BASE}:~ ssh ${MY_SSHLOGIN_BASE} bash ~/${list} fi done fi