def download_mcp(mcp_dir, fml_dir, version=None): if os.path.isfile(os.path.join(mcp_dir, 'runtime', 'commands.py')): print 'MCP Detected already, not downloading' return True if os.path.isdir(mcp_dir): print 'Old MCP Directory exists, but MCP was not detected, please delete MCP directory at \'%s\'' % mcp_dir sys.exit(1) versions_file = os.path.join(fml_dir, 'mc_versions.cfg') if not os.path.isfile(versions_file): print 'Could not find mc_versions.cfg in FML directory.' sys.exit(1) config = ConfigParser.ConfigParser() config.read(versions_file) default = config_get_section(config, 'default') if version is None: version = default['current_ver'] if not config.has_section(version): print 'Error: Invalid minecraft version, could not find \'%s\' in mc_versions.cfg' % version sys.exit(1) mc_info = config_get_section(config, version) mcp_zip = os.path.join(fml_dir, 'mcp%s.zip' % mc_info['mcp_ver']) if not download_file(mc_info['mcp_url'], mcp_zip, mc_info['mcp_md5']): sys.exit(1) if not os.path.isdir(mcp_dir): _mkdir(mcp_dir) print 'Extracting MCP to \'%s\'' % mcp_dir zf = ZipFile(mcp_zip) #OS X's python 2.6.1 extractall has a bug in zipfile that makes it unzip directories as regular files. for path in zf.namelist(): if not path.endswith('/'): zf.extract(path, mcp_dir) zf.close() eclipse_dir = os.path.join(mcp_dir, 'eclipse') if os.path.isdir(eclipse_dir): shutil.rmtree(eclipse_dir) if os.name != 'nt': for path, _, filelist in os.walk(mcp_dir): for cur_file in fnmatch.filter(filelist, '*.sh'): file_name = os.path.join(path, cur_file) process = subprocess.Popen(cmdsplit('chmod +x "%s"' % file_name), stdout=subprocess.PIPE, stderr=subprocess.STDOUT, bufsize=-1) output, _ = process.communicate() process = subprocess.Popen(cmdsplit('chmod +x "%s/runtime/bin/astyle-osx"' % mcp_dir), stdout=subprocess.PIPE, stderr=subprocess.STDOUT, bufsize=-1) output, _ = process.communicate() return True
def apply_patches(mcp_dir, patch_dir, target_dir, find=None, rep=None): sys.path.append(mcp_dir) from runtime.commands import cmdsplit temp = os.path.abspath('temp.patch') cmd = cmdsplit('patch -p2 -i "%s" ' % temp) if os.name == 'nt': applydiff = os.path.abspath(os.path.join(mcp_dir, 'runtime', 'bin', 'applydiff.exe')) cmd = cmdsplit('"%s" -uf -p2 -i "%s"' % (applydiff, temp)) for path, _, filelist in os.walk(patch_dir, followlinks=True): for cur_file in fnmatch.filter(filelist, '*.patch'): patch_file = os.path.normpath(os.path.join(patch_dir, path[len(patch_dir)+1:], cur_file)) target_file = os.path.join(target_dir, fix_patch(patch_file, temp, find, rep)) process = subprocess.Popen(cmd, cwd=target_dir, bufsize=-1) process.communicate() if os.path.isfile(temp): os.remove(temp)
def apply_patches(patch_dir, target_dir): temp = os.path.abspath('temp.patch') cmd = cmdsplit('patch -p2 -i "%s" ' % temp) display = True if os.name == 'nt': applydiff = os.path.abspath(os.path.join(mcp_dir, 'runtime', 'bin', 'applydiff.exe')) cmd = cmdsplit('"%s" -uf -p2 -i "%s"' % (applydiff, temp)) display = False for path, _, filelist in os.walk(patch_dir, followlinks=True): for cur_file in fnmatch.filter(filelist, '*.patch'): patch_file = os.path.normpath(os.path.join(patch_dir, path[len(patch_dir)+1:], cur_file)) if display: print 'patching file %s' % os.path.join(path[len(patch_dir)+1:], cur_file) normaliselines(patch_file, temp) process = subprocess.Popen(cmd, cwd=target_dir, bufsize=-1) process.communicate() if os.path.isfile(temp): os.remove(temp)
def runcmd(commands, command, echo=True): forklist = cmdsplit(command) process = subprocess.Popen(forklist, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, bufsize=-1) output, _ = process.communicate() if echo: for line in output.splitlines(): commands.logger.info(line) if process.returncode: if not echo: for line in output.splitlines(): commands.logger.info(line) return False return True
def apply_patches(patch_dir, target_dir): temp = os.path.abspath('temp.patch') cmd = cmdsplit('patch -p2 -i "%s" ' % temp) display = True if os.name == 'nt': applydiff = os.path.abspath( os.path.join(mcp_dir, 'runtime', 'bin', 'applydiff.exe')) cmd = cmdsplit('"%s" -uf -p2 -i "%s"' % (applydiff, temp)) display = False for path, _, filelist in os.walk(patch_dir, followlinks=True): for cur_file in fnmatch.filter(filelist, '*.patch'): patch_file = os.path.normpath( os.path.join(patch_dir, path[len(patch_dir) + 1:], cur_file)) if display: print 'patching file %s' % os.path.join( path[len(patch_dir) + 1:], cur_file) normaliselines(patch_file, temp) process = subprocess.Popen(cmd, cwd=target_dir, bufsize=-1) process.communicate() if os.path.isfile(temp): os.remove(temp)
def run_command(command): command = commands.cmdsplit(command) process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, bufsize=-1) stdout, _ = process.communicate() return stdout