]> git.pld-linux.org Git - projects/pld-builder.new.git/blobdiff - PLD_Builder/chroot.py
Typo.
[projects/pld-builder.new.git] / PLD_Builder / chroot.py
index 52fefc01295ea8a4b05ef7337a5d0d1c38831130..f099d018ebe5dff07ab8834f55b2d9b5e8a40e02 100644 (file)
@@ -2,41 +2,82 @@
 
 import os
 import re
+import random
+
+try:
+    from hashlib import md5 as md5
+except ImportError:
+    from md5 import md5
+
 from config import config
 
 def quote(cmd):
     return re.sub("([\"\\\\$`])", r"\\\1", cmd)
-    
-def command(cmd, user = None):
+
+def command(cmd, user = None, nostdin=""):
     if user == None:
         user = config.builder_user
-    return "%s sudo chroot %s su - %s -c \"export LC_ALL=C; %s\"" \
-            % (config.sudo_chroot_wrapper, config.chroot, user, quote(cmd))
-    
+    if nostdin:
+        nostdin = "exec < /dev/null; "
+    return "%s sudo chroot %s su - %s -c \"export LC_ALL=C; %s %s\"" \
+            % (config.sudo_chroot_wrapper, config.chroot, user, nostdin, quote(cmd))
+
 def command_sh(cmd):
-    return "%s sudo chroot %s /bin/sh -c \"export LC_ALL=C; %s\"" \
+    return "%s sudo chroot %s /bin/sh -c \"export LC_ALL=C; exec < /dev/null; %s\"" \
             % (config.sudo_chroot_wrapper, config.chroot, quote(cmd))
 
 def popen(cmd, user = "builder", mode = "r"):
     f = os.popen(command(cmd, user), mode)
     return f
-    
-def run(cmd, user = "builder", logfile = None, logstdout = False):
-    c = command(cmd, user)
+
+def run(cmd, user = "builder", logfile = None, logstdout = None):
+    c = command(cmd, user, nostdin=True)
     if logfile != None:
-        if logstdout:
-            c = "%s 2>&1 | tee %s" % (c, logfile)
+        if logstdout != None:
+            c = "%s 2>&1 | /usr/bin/tee -a %s" % (c, logfile)
         else:
             c = "%s >> %s 2>&1" % (c, logfile)
-    lines = ""
     f = os.popen(c)
-    for l in f:
-        lines += l
+    if logstdout != None:
+        for l in f:
+            logstdout.write(l)
     r = f.close()
     if r == None:
-        if logstdout:
-            return lines
-        else:
-            return True
+        return 0
+    else:
+        return r
+
+def cp(file, outfile, user="builder", rm=False):
+    m = md5()
+    m.update(str(random.sample(xrange(100000), 500)))
+    digest = m.hexdigest()
+
+    marker_start = "--- FILE BEGIN DIGEST %s ---" % digest
+    marker_end = "--- FILE END DIGEST %s ---" % digest
+
+    f = open(outfile, 'wb')
+    cmd = "echo \"%s\"; cat %s; echo \"%s\"" % (marker_start, file, marker_end)
+    if rm:
+        cmd += "; rm %s" % file
+    c = command(cmd, user)
+    p = os.popen(c)
+    # get file contents
+    marker = False
+    for l in p:
+        if not marker and l.strip() == marker_start:
+            marker = True
+            continue
+        me = l.find(marker_end)
+        if me != -1:
+            l = l[:me]
+            f.write(l)
+            marker = False
+            break
+        if marker:
+            f.write(l)
+    rp = p.close()
+    rf = f.close()
+    if rp == None:
+        return 0
     else:
-        return False
+        return rp
This page took 0.067414 seconds and 4 git commands to generate.