+++ /dev/null
-# vi: encoding=utf-8 ts=8 sts=4 sw=4 et
-
-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, nostdin=""):
- if user == None:
- user = config.builder_user
- 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; 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 = None):
- c = command(cmd, user, nostdin=True)
- if logfile != None:
- if logstdout != None:
- c = "%s 2>&1 | /usr/bin/tee -a %s" % (c, logfile)
- else:
- c = "%s >> %s 2>&1" % (c, logfile)
- f = os.popen(c)
- if logstdout != None:
- for l in f:
- logstdout.write(l)
- r = f.close()
- if r == None:
- 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 rp