Update python files to add support for specifying MCP directory and FML downloading MCP on the fly.

This commit is contained in:
LexManos 2012-12-03 18:15:38 -08:00
parent d124a56844
commit 51159de108
11 changed files with 141 additions and 61 deletions

1
.gitignore vendored
View File

@ -3,3 +3,4 @@
/*.pyc
/forge-*/
/patches-old/
/mcp/

View File

@ -1,2 +1,2 @@
@echo off
..\runtime\bin\python\python_mcp build.py %*
fml\python\python_fml build.py %*

View File

@ -1,4 +1,5 @@
import os, os.path, sys
from optparse import OptionParser
forge_dir = os.path.dirname(os.path.abspath(__file__))
mcp_dir = os.path.abspath('..')
@ -6,14 +7,27 @@ mcp_dir = os.path.abspath('..')
from forge import build_forge_dev
def main():
build_num = 0
if len(sys.argv) > 1:
parser = OptionParser()
parser.add_option('-m', '--mcp-dir', action='store', dest='mcp_dir', help='MCP Path', default=None)
parser.add_option('-b', '--build', action='store', dest='build', help='Build number', default=None)
options, _ = parser.parse_args()
build_num = 0
if not options.build is None:
try:
build_num = int(sys.argv[1])
build_num = int(options.build)
except:
pass
fml_dir = os.path.join(forge_dir, 'fml')
mcp_dir = os.path.join(forge_dir, 'mcp')
if not options.mcp_dir is None:
mcp_dir = os.path.abspath(options.mcp_dir)
elif os.path.isfile(os.path.join('..', 'runtime', 'commands.py')):
mcp_dir = os.path.abspath('..')
sys.exit(build_forge_dev(mcp_dir, forge_dir, fml_dir, build_num))
if __name__ == '__main__':

View File

@ -6,9 +6,6 @@ import csv, shutil
import pprint
forge_dir = os.path.dirname(os.path.abspath(__file__))
mcp_dir = os.path.abspath('..')
src_dir = os.path.join(mcp_dir, 'src')
sys.path.append(mcp_dir)
def reset_logger():
log = logging.getLogger()
@ -124,10 +121,10 @@ def build_forge_dev(mcp_dir, forge_dir, fml_dir, build_num=0):
recompile(None, True, False)
reset_logger()
os.chdir(forge_dir)
except SystemExit, e:
print 'Recompile Exception: %d ' % e.code
error_level = e.code
if not e.code == 0:
print 'Recompile Exception: %d ' % e.code
error_level = e.code
print '=================================== Build Finished %d =================================' % error_level
return error_level

View File

@ -1,2 +1,2 @@
@echo off
..\runtime\bin\python\python_mcp release.py %*
fml\python\python_fml release.py %*

View File

@ -1,19 +1,12 @@
import os, os.path, sys
import shutil, fnmatch
import logging, zipfile, re
from optparse import OptionParser
forge_dir = os.path.dirname(os.path.abspath(__file__))
mcp_dir = os.path.abspath('..')
src_dir = os.path.join(mcp_dir, 'src')
sys.path.append(mcp_dir)
from runtime.reobfuscate import reobfuscate
from forge import reset_logger, load_version, zip_folder, zip_create, inject_version, build_forge_dev
from changelog import make_changelog
reobf_dir = os.path.join(mcp_dir, 'reobf')
client_dir = os.path.join(reobf_dir, 'minecraft')
zip = None
zip_name = None
zip_base = None
@ -24,21 +17,36 @@ def main():
global version_str
global version_mc
parser = OptionParser()
parser.add_option('-m', '--mcp-dir', action='store', dest='mcp_dir', help='MCP Path', default=None)
parser.add_option('-b', '--build', action='store', dest='build', help='Build number', default=None)
options, _ = parser.parse_args()
build_num = 0
if len(sys.argv) > 1:
if not options.build is None:
try:
build_num = int(sys.argv[1])
build_num = int(options.build)
except:
pass
mcp_dir = os.path.join(forge_dir, 'mcp')
if not options.mcp_dir is None:
mcp_dir = os.path.abspath(options.mcp_dir)
elif os.path.isfile(os.path.join('..', 'runtime', 'commands.py')):
mcp_dir = os.path.abspath('..')
ret = 0
fml_dir = os.path.join(forge_dir, 'fml')
build_forge_dev(mcp_dir, forge_dir, fml_dir, build_num)
if ret != 0:
sys.exit(ret)
print '=================================== Release Start ================================='
error_level = 0
try:
sys.path.append(mcp_dir)
from runtime.reobfuscate import reobfuscate
os.chdir(mcp_dir)
reset_logger()
reobfuscate(None, False, True, True, True, False)
@ -48,13 +56,20 @@ def main():
print 'Reobfusicate Exception: %d ' % e.code
error_level = e.code
extract_fml_obfed()
extract_paulscode()
src_dir = os.path.join(mcp_dir, 'src')
reobf_dir = os.path.join(mcp_dir, 'reobf')
client_dir = os.path.join(reobf_dir, 'minecraft')
extract_fml_obfed(mcp_dir, reobf_dir, client_dir)
extract_paulscode(mcp_dir, client_dir)
version = load_version(build_num)
version_forge = '%d.%d.%d.%d' % (version['major'], version['minor'], version['revision'], version['build'])
version_mc = load_mc_version(forge_dir)
branch = get_branch_name()
version_str = '%s-%s' % (version_mc, version_forge)
if not branch == "":
version_str = '%s-%s' % (version_str, branch)
out_folder = os.path.join(forge_dir, 'forge-%s' % version_str)
if os.path.isdir(out_folder):
@ -102,15 +117,8 @@ def main():
zip_add('common', 'common')
zip_add('patches', 'patches')
zip_add('fml', 'fml')
zip_add('install/install.cmd')
zip_add('install/install.sh')
zip_add('install/README-MinecraftForge.txt')
zip_add('install/install.py')
zip_add('install', '')
zip_add('forge.py')
zip_add('install/MinecraftForge-Credits.txt')
zip_add('install/MinecraftForge-License.txt')
zip_add('install/Paulscode IBXM Library License.txt')
zip_add('install/Paulscode SoundSystem CodecIBXM License.txt')
zip_add(version_file)
zip_add(changelog_file, 'MinecraftForge-Changelog.txt')
zip_end()
@ -169,7 +177,7 @@ def load_mc_version(forge_dir):
print 'Could not load fmlversion.properties, build failed'
sys.exit(1)
def extract_fml_obfed():
def extract_fml_obfed(mcp_dir, reobf_dir, client_dir):
fml_file = os.path.join(forge_dir, 'fml', 'difflist.txt')
if not os.path.isfile(fml_file):
print 'Could not find Forge ModLoader\'s DiffList, looking for it at: %s' % fml_file
@ -192,7 +200,7 @@ def extract_fml_obfed():
client.close()
def extract_paulscode():
def extract_paulscode(mcp_dir, client_dir):
client = zipfile.ZipFile(os.path.join(mcp_dir, 'temp', 'client_reobf.jar'))
print 'Extracting Reobfed Paulscode for mac users -.-'
@ -204,6 +212,22 @@ def extract_paulscode():
client.extract(i.filename, client_dir)
client.close()
def get_branch_name():
from subprocess import Popen, PIPE, STDOUT
branch = ''
if os.getenv("GIT_BRANCH") is None:
try:
process = Popen(["git", "rev-parse", "--abbrev-ref", "HEAD"], stdout=PIPE, stderr=STDOUT, bufsize=-1)
branch, _ = process.communicate()
branch = branch.rstrip('\r\n')
except OSError:
print "Git not found"
else:
branch = os.getenv("GIT_BRANCH").rpartition('/')[2]
branch = branch.replace('master', '')
print 'Detected Branch as \'%s\'' % branch
return branch
if __name__ == '__main__':
main()

View File

@ -1,2 +1,21 @@
@echo off
..\runtime\bin\python\python_mcp setup.py %*
@SET PATH=%PATH%;.\GnuWin32\
if exist "fml" rmdir /S /Q fml
for %%f in (fml-*.zip) do (
if exist "fml" (
echo Multiple FML zips detected, aborting: %%~nf
exit /b 1
)
echo Extracting %%~nf
unzip -q %%~nf.zip
)
if not exist "fml" (
echo Could not find a valid FML FML jar, aborting
exit /b 1
)
fml\python\python_fml setup.py --no-extract %*

View File

@ -1,17 +1,30 @@
import os, os.path, sys
import urllib, zipfile
import os, os.path, sys, zipfile
import shutil, glob, fnmatch
import subprocess, logging
from optparse import OptionParser
forge_dir = os.path.dirname(os.path.abspath(__file__))
mcp_dir = os.path.abspath('..')
src_dir = os.path.join(mcp_dir, 'src')
from forge import apply_forge_patches
def main():
print '=================================== Setup Start ================================='
setup_fml()
parser = OptionParser()
parser.add_option('-m', '--mcp-dir', action='store', dest='mcp_dir', help='Path to download/extract MCP to', default=None)
parser.add_option('-n', '--no-extract', action='store_true', dest='no_extract', help='Do not attempt to extract FML zip files', default=False)
options, _ = parser.parse_args()
fml_dir = os.path.join(forge_dir, 'fml')
mcp_dir = os.path.join(forge_dir, 'mcp')
if not options.mcp_dir is None:
mcp_dir = os.path.abspath(options.mcp_dir)
elif os.path.isfile(os.path.join('..', 'runtime', 'commands.py')):
mcp_dir = os.path.abspath('..')
src_dir = os.path.join(mcp_dir, 'src')
setup_fml(mcp_dir, fml_dir, options.no_extract)
base_dir = os.path.join(mcp_dir, 'src_base')
work_dir = os.path.join(mcp_dir, 'src_work')
@ -30,26 +43,25 @@ def main():
print '=================================== Setup Finished ================================='
def setup_fml():
def setup_fml(mcp_dir, fml_dir, dont_extract=False):
print 'Setting up Forge ModLoader'
fml = glob.glob(os.path.join(forge_dir, 'fml-src-*.zip'))
if not len(fml) == 1:
if len(fml) == 0:
print 'Missing FML source zip, should be named fml-src-*.zip inside your forge folder, obtain it from the repo'
else:
print 'To many FML source zips found, we should only have one. Check the Forge Git for the latest FML version supported'
sys.exit(1)
if not dont_extract:
fml = glob.glob(os.path.join(forge_dir, 'fml-src-*.zip'))
if not len(fml) == 1:
if len(fml) == 0:
print 'Missing FML source zip, should be named fml-src-*.zip inside your forge folder, obtain it from the repo'
else:
print 'To many FML source zips found, we should only have one. Check the Forge Git for the latest FML version supported'
sys.exit(1)
fml_dir = os.path.join(forge_dir, 'fml')
if os.path.isdir(fml_dir):
shutil.rmtree(fml_dir)
if os.path.isdir(fml_dir):
shutil.rmtree(fml_dir)
print 'Extracting: %s' % os.path.basename(fml[0])
print 'Extracting: %s' % os.path.basename(fml[0])
zf = zipfile.ZipFile(fml[0])
zf.extractall(forge_dir)
zf.close()
zf = zipfile.ZipFile(fml[0])
zf.extractall(forge_dir)
zf.close()
sys.path.append(fml_dir)
from install import fml_main

View File

@ -1,2 +1,2 @@
@echo off
..\runtime\bin\python\python_mcp update_patches.py .. .
fml\python\python_fml update_patches.py %*

View File

@ -4,6 +4,7 @@ import fnmatch
import shlex
import difflib
import time
from optparse import OptionParser
def cmdsplit(args):
if os.sep == '\\':
@ -27,8 +28,19 @@ def cleanDirs(path):
def main():
print("Creating patches")
mcp = os.path.normpath(sys.argv[1])
forge_dir = os.path.normpath(sys.argv[2])
parser = OptionParser()
parser.add_option('-m', '--mcp-dir', action='store', dest='mcp_dir', help='Path to MCP', default=None)
options, _ = parser.parse_args()
forge_dir = os.path.dirname(os.path.abspath(__file__))
mcp = os.path.join(forge_dir, 'mcp')
if not options.mcp_dir is None:
mcp = os.path.abspath(options.mcp_dir)
elif os.path.isfile(os.path.join('..', 'runtime', 'commands.py')):
mcp = os.path.abspath('..')
patchd = os.path.normpath(os.path.join(forge_dir, 'patches'))
base = os.path.normpath(os.path.join(mcp, 'src_base'))
work = os.path.normpath(os.path.join(mcp, 'src_work'))

View File

@ -1 +1,2 @@
python update_patches.py .. .
#!/bin/bash
python update_patches.py "$@"