Diff of /trunk/wharfie/lib/actions.py [r17] .. [r18]  Maximize  Restore

Switch to side-by-side view

--- 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;
+