Пример #1
0
#!/usr/bin/env python3

import os.path
import sys
import importlib.machinery

# Workaround so it can be imported in cryselect.py
import json
import win32api
import win32con
from win32com.shell import shell, shellcon
import ctypes
import uuid
import tkinter as tk
from tkinter import ttk
from tkinter import filedialog
import crypath

if __name__ == '__main__':
    path = crypath.get_script_dir()

    sys.path.insert(0, path)
    cryselect = importlib.machinery.SourceFileLoader(
        'cryselect', os.path.join(path, 'cryselect.py')).load_module()
    cryselect.main()
Пример #2
0
def cmd_upgrade(args):
    if not os.path.isfile(args.project_file):
        error_project_not_found(args.project_file)

    try:
        file = open(args.project_file, 'r')
        project = configparser.ConfigParser()
        project.read_string('[project]\n' + file.read())
        file.close()
    except ValueError:
        error_project_json_decode(args.project_file)

    engine_version = project['project'].get('engine_version')
    restore_version = {
        '5.0.0': '5.0.0',
        '5.1.0': '5.1.0',
        '5.1.1': '5.1.0'
    }.get(engine_version)
    if restore_version is None:
        error_upgrade_engine_version(engine_version)

    template_name = None
    if restore_version == '5.0.0':
        template_name = upgrade_identify50(args.project_file)
    elif restore_version == '5.1.0':
        template_name = upgrade_identify51(args.project_file)

    if template_name is None:
        error_upgrade_template_unknown(args.project_file)

    restore_path = os.path.abspath(
        os.path.join(crypath.get_script_dir(), 'upgrade', restore_version, *
                     template_name) + '.zip')
    if not os.path.isfile(restore_path):
        error_upgrade_template_missing(restore_path)

    # ---

    (dirname, basename) = os.path.split(os.path.abspath(args.project_file))
    prevcwd = os.getcwd()
    os.chdir(dirname)

    if not os.path.isdir('Backup'):
        os.mkdir('Backup')
    (fd, zfilename) = tempfile.mkstemp(
        '.zip',
        datetime.date.today().strftime('upgrade_%y%m%d_'),
        os.path.join('Backup', dirname))
    file = os.fdopen(fd, 'wb')
    backup = zipfile.ZipFile(file, 'w', zipfile.ZIP_DEFLATED)
    restore = zipfile.ZipFile(restore_path, 'r')

    # .bat
    for filename in (basename, 'Code_CPP.bat', 'Code_CS.bat', 'Editor.bat',
                     'Game.bat', 'CMakeLists.txt'):
        if os.path.isfile(filename):
            backup.write(filename)

    # bin
    for (dirpath, dirnames, filenames) in os.walk('bin'):
        for filename in filter(
                lambda a: os.path.splitext(a)[1] in ('.exe', '.dll'),
                filenames):
            backup.write(os.path.join(dirpath, filename))

    # Solutions
    for (dirpath, dirnames, filenames) in os.walk('Code'):
        for filename in filter(
                lambda a: os.path.splitext(a)[1] in
            ('.sln', '.vcxproj', '.filters', '.user', '.csproj'), filenames):
            path = os.path.join(dirpath, filename)
            backup.write(path)

    backup_list = backup.namelist()

    # Files to be restored
    for filename in restore.namelist():
        if os.path.isfile(filename) and filename not in backup_list:
            backup.write(filename)

    # ---

    backup.close()
    file.close()

    # Delete files backed up

    z = zipfile.ZipFile(zfilename, 'r')
    for filename in z.namelist():
        os.chmod(filename, stat.S_IWRITE)
        os.remove(filename)
    z.close()

    restore.extractall()
    restore.close()
    os.chdir(prevcwd)
Пример #3
0
 def get_filepath(self):
     dir = os.path.realpath(crypath.get_script_dir())
     return os.path.join(dir, "settings.cfg")