#!/bin/sh # mage2mysql # mage functions source /home/tjoke/svn/alx/alx-src/trunk/tinyalxconfig-ng/functions/mysqlfunctions source /usr/lib/mage/mage4.functions.sh source /etc/mage.rc.global source /etc/mage.rc # sql settings SQL_USER=mage SQL_PASS=mage SQL_HOST=localhost SQL_DB=mage create_database() { # create categories table mysqldo "CREATE TABLE IF NOT EXISTS categories ( id int(10) NOT NULL auto_increment, pcat varchar(255) NOT NULL, PRIMARY KEY (id) )" # create packages table mysqldo "CREATE TABLE IF NOT EXISTS packages ( id int(10) NOT NULL auto_increment, pname varchar(255) NOT NULL, pver varchar(255) NOT NULL, pbuild varchar(255) NOT NULL, pcat varchar(255) NOT NULL, state varchar(255) NOT NULL, description varchar(255) default NULL, homepage varchar(255) default NULL, pkgtype varchar(255) default NULL, depend varchar(255) default NULL, sdepend varchar(255) default NULL, provide varchar(255) default NULL, time datetime NOT NULL, flag int(1) NOT NULL default '1', PRIMARY KEY (id) )" } evaluate_categories() { local i local pcat # ${MAGEDIR} is known from mage.rc{,.global} for i in ${MAGEDIR}/* do pcat="${i##*/}" # exclude includes [[ ${pcat} = include ]] && continue id=$(mysqldo "SELECT id FROM categories WHERE pcat='${pcat}'") # only add if not found if [[ -z ${id} ]] then mysqldo "INSERT INTO categories ( pcat ) VALUES ( '${pcat}' )" fi done } evaluate_magefile() { local i local MAGEFILE="$1" local PKGNAME local PCAT local PNAME local PVER local PBUILD local STATE local DESCRIPTION local HOMEPAGE local PKGTYPE local DEPEND local SDEPEND local PROVIDE # read needed variables within the magefile for i in PKGNAME STATE HOMEPAGE PKGTYPE DEPEND SDEPEND PROVIDE do eval "${i}='$(get_value_from_magefile ${i} ${MAGEFILE})'" done # the description may contain some escape characters like ' and " # which break the above loop DESCRIPTION="$(get_value_from_magefile DESCRIPTION ${MAGEFILE})" # get var from the name of the magefile PCAT="$(magename2pcat ${MAGEFILE})" PNAME="$(magename2pname ${MAGEFILE})" PVER="$(magename2pver ${MAGEFILE})" PBUILD="$(magename2pbuild ${MAGEFILE})" # remove >= etc from depend and sdepend DEPEND=$(echo ${DEPEND} | sed 's/[^a-zA-Z0-9]\{2\}\ //g') SDEPEND=$(echo ${SDEPEND} | sed 's/[^a-zA-Z0-9]\{2\}\ //g') # check if there is a pname for the same state local id=$(mysqldo "SELECT id FROM packages WHERE pname='${PNAME}' AND state='${STATE}'") # get categorie id local pcatid=$(mysqldo "SELECT id FROM categories WHERE pcat='${PCAT}'") # get current time local time="$(date +%F\ %T)" # found, then update if [[ ! -z ${id} ]] then mysqldo "UPDATE packages SET pname='${PNAME}', pver='${PVER}', pbuild='${PBUILD}', pcat='${pcatid}', state='${STATE}', description='${DESCRIPTION}', homepage='${HOMEPAGE}', pkgtype='${PKGTYPE}', depend='${DEPEND}', sdepend='${SDEPEND}', provide='${PROVIDE}', time='${time}', flag='1' WHERE id='${id}'" else # else import to database as new mysqldo "INSERT INTO packages ( pname, pver, pbuild, pcat, state, description, homepage, pkgtype, depend, sdepend, provide, time, flag ) VALUES ( '${PNAME}', '${PVER}', '${PBUILD}', '${pcatid}', '${STATE}', '${DESCRIPTION}', '${HOMEPAGE}', '${PKGTYPE}', '${DEPEND}', '${SDEPEND}', '${PROVIDE}', '${time}', '1' )" fi } reset_flags() { # set all flags to zero mysqldo "UPDATE packages SET flag='0'" } prune_old_packages() { # debug # echo "Debug: following ids are requested for deletion:" # mysqldo "SELECT id FROM packages WHERE flag='0'" # delete them mysqldo "DELETE FROM packages WHERE flag='0'" } echo "Processing Categories ..." evaluate_categories echo "Resetting Flags ..." reset_flags # all magefiles ALL_MAGEFILES="$(find ${MAGEDIR} -name \*.mage | sort)" for magefile in ${ALL_MAGEFILES} do echo "Processing Magefile ${magefile}" evaluate_magefile ${magefile} done echo "Pruning outdated Packages ..." prune_old_packages