128 lines
4.3 KiB
Python
Executable File
128 lines
4.3 KiB
Python
Executable File
#!/usr/bin/env python
|
|
|
|
from optparse import OptionParser
|
|
import os.path
|
|
import shutil
|
|
import tempfile
|
|
import sys
|
|
import tarfile
|
|
import datetime
|
|
import random
|
|
import string
|
|
|
|
class FileStub():
|
|
def write(self, *args):
|
|
pass
|
|
|
|
def flush(self, *args):
|
|
pass
|
|
|
|
def id_generator(size=6, chars=string.ascii_uppercase + string.digits):
|
|
return ''.join(random.choice(chars) for x in range(size))
|
|
|
|
if __name__ == "__main__":
|
|
oldstd = sys.stdout
|
|
parser = OptionParser()
|
|
parser.add_option("-s", "--skeleton", dest="skeleton", help="Location of skeleton directory")
|
|
parser.add_option("-b", "--base", dest="base", help="location of the base directory")
|
|
parser.add_option("-d", "--destination", dest="destination", help="where to copy our archive")
|
|
parser.add_option("-t", "--static", dest="static", help="directory containing static files")
|
|
parser.add_option("-q", "--quiet", dest="silent", action="store_true")
|
|
options, args = parser.parse_args()
|
|
|
|
if options.skeleton is None or options.base is None or options.destination is None:
|
|
print "Need --skeleton argument as well as --base and --destination argument"
|
|
parser.print_help()
|
|
sys.exit()
|
|
|
|
if options.silent:
|
|
sys.stdout = FileStub()
|
|
|
|
randomId = id_generator()
|
|
infoDict = {}
|
|
skeleton = os.path.expanduser(options.skeleton)
|
|
info = execfile(os.path.join(skeleton, "info.py"), infoDict)
|
|
now = datetime.datetime.now()
|
|
now = "%04d%02d%02d" % (now.year, now.month, now.day)
|
|
dirName = "nighty-build-%s-%s" % (now, randomId)
|
|
dst = os.path.join(os.getcwd(), dirName)
|
|
tmpFile = os.path.join(os.getcwd(), "nighty-build-%s-%s-%s.tar.bz2" % (now, infoDict["os"], randomId))
|
|
config = os.path.join(skeleton, "config.py")
|
|
destination = os.path.expanduser(options.destination)
|
|
|
|
i = 0
|
|
gitData = (".git", ".gitignore", ".gitmodules")
|
|
def loginfo(path, names):
|
|
global i
|
|
i += 1
|
|
if i % 10 == 0:
|
|
sys.stdout.write(".")
|
|
sys.stdout.flush()
|
|
return gitData
|
|
|
|
try:
|
|
print "copying skeleton to ", dst
|
|
i = 0
|
|
shutil.copytree(skeleton, dst, ignore=loginfo)
|
|
print ""
|
|
|
|
base = os.path.join(dst, infoDict["base"])
|
|
print "copying base to ", base
|
|
|
|
i = 0
|
|
for stuff in os.listdir(os.path.expanduser(options.base)):
|
|
currSource = os.path.join(os.path.expanduser(options.base), stuff)
|
|
currDest = os.path.join(base, stuff)
|
|
if stuff in gitData:
|
|
continue
|
|
elif os.path.isdir(currSource):
|
|
shutil.copytree(currSource, currDest, ignore=loginfo)
|
|
else:
|
|
shutil.copy2(currSource, currDest)
|
|
|
|
print ""
|
|
if os.path.exists(config):
|
|
print "adding skeleton config file"
|
|
shutil.copy2(config, base)
|
|
|
|
|
|
if options.static is not None and os.path.exists(os.path.expanduser(options.static)):
|
|
print "copying static data to ", os.path.join(base, "staticdata")
|
|
static = os.path.expanduser(options.static)
|
|
shutil.copytree(static, os.path.join(base, "staticdata"), ignore=loginfo)
|
|
|
|
print "removing development data"
|
|
paths = []
|
|
paths.append(os.path.join(base, "eos", "tests"))
|
|
paths.append(os.path.join(base, "eos", "utils", "scripts"))
|
|
for path in paths:
|
|
if os.path.exists(path):
|
|
print path
|
|
shutil.rmtree(path)
|
|
|
|
|
|
print "copying done, making archive: ", tmpFile
|
|
archive = tarfile.open(tmpFile, "w:bz2")
|
|
print "making archive"
|
|
archive.add(dst, arcname=infoDict["arcname"])
|
|
print "closing"
|
|
archive.close()
|
|
print "copying archive to ", destination
|
|
shutil.move(tmpFile, destination)
|
|
except:
|
|
print "encountered an error"
|
|
raise
|
|
finally:
|
|
print "deleting tmp files"
|
|
try:
|
|
shutil.rmtree(dst)
|
|
os.unlink(tmpFile)
|
|
except:
|
|
pass
|
|
|
|
sys.stdout = oldstd
|
|
if os.path.isdir(destination):
|
|
print os.path.join(destination, os.path.split(tmpFile)[1])
|
|
else:
|
|
print destination
|