view LightTools/release.py @ 55:61b522f462e5

Merge VirtualMachine Mk2
author koryspansel
date Fri, 30 Sep 2011 18:39:58 -0700
parents 48705dc6e568
children
line wrap: on
line source

#
# release
#

from os.path import join, isdir, isfile, dirname, basename, normpath

import tempfile
import os
import sys
import shutil
import zipfile
import datetime

def relative_walk(path):
    for root, folders, files in os.walk(path):
        for filename in files:
            yield join(root, filename)[len(path)+1:]

def release_project(root, location, project, target=None, build='Build'):
    if target:
        executable = join(root, project, 'bin', target, project + '.exe')

    else:
        executable = join(root, project, 'bin', 'release', project + '.exe')
        if not isfile(executable):
            executable = join(root, project, 'bin', 'debug', project + '.exe')
        
    if not isfile(executable):
        raise Exception('Error: Could not locate executable')

    data = join(root, 'data')
    extern = join(root, 'extern')

    if not isdir(data):
        raise Exception('Error: Could not locate data folder')
        
    if isdir(build):
        shutil.rmtree(build, True)

    os.makedirs(build)

    shutil.copyfile(executable, join(build, basename(executable)))
        
    for filename in relative_walk(data):
        filepath = join(build, 'Data', filename)

        if not isdir(dirname(filepath)):
            os.makedirs(dirname(filepath))

        shutil.copyfile(join(data, filename), filepath)
        
    for filename in relative_walk(extern):
        filepath = join(build, filename)
        
        if not isdir(dirname(filepath)):
            os.makedirs(dirname(filepath))
            
        shutil.copyfile(join(extern, filename), filepath)
        
    if not isdir(location):
        os.makedirs(location)
        
    with zipfile.ZipFile(join(location, project + datetime.datetime.now().strftime('%Y%m%d%I%M%p') + '.zip'), 'w') as handle:
        for filename in relative_walk(build):
            handle.write(join(build, filename), filename)

if __name__ == '__main__':
    root = normpath(join(dirname(sys.argv[0]), '..'))
    
    release_project(root, '..\Release', 'LightClone')