#!/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)" fi MY_SVN_OPTS="" MY_SVN_ROOT="svn://cvs.magellan-linux.de" DBFILE="${MY_SVN_BASE}/pkgdb" sql() { local sqlcmd="$*" [[ -z ${sqlcmd} ]] && die "no sqlcmd given." sqlite3 -nullvalue 'NULL' -list -separator '|' ${DBFILE} << EOF || die "error running '$@'" ${sqlcmd}; EOF } # 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 local subpackage export SMAGESCRIPTSDIR="${repo}" _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 # 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}'" sql "insert or ignore into pkgs(pname, pver, pbuild, arch, distrotag, filename ) values( '${PNAME}', '${PVER}', '${PBUILD}', '${ARCH}', '$(print_distrotag)', '${PNAME}${target}-${PVER}-${ARCH}$(print_distrotag)-${PBUILD}.${PKGSUFFIX}')" # restore smage environment split_restore_variables done # unset all saved smage variables split_unset_variables unset split_pkg_base else sql "insert or ignore into pkgs(pname, pver, pbuild, arch, distrotag, filename ) values( '${PNAME}', '${PVER}', '${PBUILD}', '${ARCH}', '$(print_distrotag)', '${PNAME}${target}-${PVER}-${ARCH}$(print_distrotag)-${PBUILD}.${PKGSUFFIX}')" fi if mqueryfeature "srcpkgbuild" then sql "insert or ignore into srcpkgs(pname, pver, pbuild, filename ) values( '${PNAME}', '${PVER}', '${PBUILD}', '${PNAME}${target}-${PVER}-${PBUILD}.${SRCPKGSUFFIX}')" fi unset PNAME unset PVER unset PBUILD unset SPLIT_PACKAGES done done } # check_pkglist TABLE PKGFILE check_pkglist() { local table="$1" local pkg="$2" if [[ -z $(sql "select filename from ${table} where filename='${pkg}'") ]] then return 1 fi return 0 } # 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 sql "create table IF NOT EXISTS pkgs(id integer primary key, pname text, pver text, pbuild text, arch text, distrotag text, filename text unique)" sql "create table IF NOT EXISTS srcpkgs(id integer primary key, pname text, pver text, pbuild text, filename text unique)" for repo in ${MY_REPOS[*]} do generate_pkg_file_list "${MY_SVN_BASE}/smage/${repo}" done sql "select filename from pkgs" sql "select filename from srcpkgs" # initialize lists if [[ ${USE_HTTP} = 1 ]] then :> ${MY_SVN_BASE}/pkglist :> ${MY_SVN_BASE}/srcpkglist fi for arch in ${MY_ARCHES[*]} do load_arch_values "${arch}" load_mage_features 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 else if [ ! -d ${PKGDIR}/_deprecated ] then install -d ${PKGDIR}/_deprecated || die "install ${PKGDIR}/${arch}/_deprecated" fi fi for file in ${_filelist} do if check_pkglist pkgs "${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 else if [ ! -d ${SRCPKGDIR}/_deprecated ] then install -d ${SRCPKGDIR}/_deprecated || die "install ${SRCPKGDIR}/_deprecated" fi fi for file in ${_filelist} do if check_pkglist srcpkgs "${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} = 1 ]] 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