--- a/trunk/wharfie/lib/actions.py +++ b/trunk/wharfie/lib/actions.py @@ -23,6 +23,9 @@ # ################################################################################ +from lib import makefile as make +from lib import files + def run(name, dep, cmd): makeTarget = { 'comment' : "%s %s" % (cmd[0], cmd[1]), @@ -42,13 +45,44 @@ return makeTarget; def add(name, dep, cmd): + if " " not in cmd[1].lstrip(): + print ("parse error: ADD needs two arguments. (%s)" % cmd[1].lstrip()) + exit(1) src,dst = cmd[1].lstrip().split(" ") + isUrl = src.startswith("http://") or src.startswith("https://") or src.startswith("ftp://") + src = files.input_file(src) + # Overwrite potential implicite make rules for file + if not isUrl: + make.makeTargets.append({'name': src, 'dep': '', 'simplecmd': 'touch $@'}); dep.append(src) myHostCmd = ''' - dest="$(pwd)"; + destdir="$(pwd)"; + src="%s"; + dst="%s"; cd ../; - mkdir -p $(dirname "${dest}/%s"); - cp -R --preserve=mode %s "${dest}/%s"''' % (dst, src, dst) + case "${dst}" in + */) + mkdir -p "${destdir}/${dst}"; + ;; + *) + mkdir -p $(dirname "${destdir}/${dst}"); + ;; + esac; + case "${src}" in + *.tar) + cat ${src} | (cd ${destdir}/${dst}; tar -xf -); + ;; + *.tar.gz) + cat ${src} | (cd ${destdir}/${dst}; tar -xzf -); + ;; + *.tar.bz2) + cat ${src} | (cd ${destdir}/${dst}; tar -xjf -); + ;; + *) + cp -R --preserve=mode ${src} "${destdir}/${dst}"; + ;; + esac; +''' % (src, dst) makeTarget = { 'comment' : "%s %s" % (cmd[0], cmd[1]), @@ -113,3 +147,12 @@ 'temporary': True }; +def to(name, dep, cmd): + makeTarget = { + 'comment' : "%s %s" % (cmd[0], cmd[1]), + 'name': cmd[1].lstrip(), + 'dep': dep, + 'temporary': True + }; + return makeTarget; +