Files
molecule-core/molecule/utils.py
T
Fabio Erculiani bcbbc5aace fix molecule.utils.remove_path_sandbox
paths did not get expanded when using list arguments, so try using
shell = True and pass a string
2009-03-26 15:31:04 +01:00

98 lines
3.0 KiB
Python

#!/usr/bin/python -O
# -*- coding: iso-8859-1 -*-
# Molecule Disc Image builder for Sabayon Linux
# Copyright (C) 2009 Fabio Erculiani
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
from __future__ import with_statement
import os
import sys
import time
import subprocess
import shutil
def get_year():
return time.strftime("%Y")
def valid_exec_check(path):
with open("/dev/null","w") as f:
p = subprocess.Popen([path], stdout = f, stderr = f)
rc = p.wait()
if rc == 127:
raise EnvironmentError("EnvironmentError: %s not found" % (path,))
def is_exec_available(exec_name):
paths = os.getenv("PATH")
if not paths: return False
paths = paths.split(":")
for path in paths:
path = os.path.join(path,exec_name)
if os.path.isfile(path) and os.access(path,os.X_OK):
return True
return False
def exec_cmd(args):
# do not use Popen otherwise it will try to replace
# wildcards automatically ==> rsync no workie
return subprocess.call(' '.join(args), shell = True)
def exec_chroot_cmd(args, chroot, pre_chroot = []):
pid = os.fork()
if pid == 0:
os.chroot(chroot)
os.chdir("/")
myargs = pre_chroot+args
rc = subprocess.call(myargs)
os._exit(rc)
else:
rcpid, rc = os.waitpid(pid,0)
return rc
def empty_dir(dest_dir):
for el in os.listdir(dest_dir):
el = os.path.join(dest_dir,el)
if os.path.isfile(el) or os.path.islink(el):
os.remove(el)
elif os.path.isdir(el):
shutil.rmtree(el,True)
if os.path.isdir(el):
os.rmdir(el)
# using subprocess.call to not care about wildcards
def remove_path(path):
return subprocess.call('rm -rf %s' % (path,), shell = True)
def remove_path_sandbox(path, sandbox_env):
p = subprocess.Popen(' '.join(["sandbox", "rm", "-rf", path]),
stdout = sys.stdout, stderr = sys.stderr,
env = sandbox_env, shell = True
)
return p.wait()
def get_random_number():
return abs(hash(os.urandom(2)))%99999
def md5sum(filepath):
import hashlib
m = hashlib.md5()
readfile = open(filepath)
block = readfile.read(1024)
while block:
m.update(block)
block = readfile.read(1024)
readfile.close()
return m.hexdigest()