--- commands.py +++ commands.py @@ -58,6 +58,8 @@ def reallyrmtree(path): + if os.path.isfile(os.path.join(path, 'asm-all-4.0.jar')): #Check if asm exists, indicating the libs folder, if so, don't delete it + return if not sys.platform.startswith('win'): if os.path.exists(path): shutil.rmtree(path) @@ -582,6 +584,9 @@ self.has_astyle_cfg = False if os.path.isfile(self.astyleconf): self.has_astyle_cfg = True + + #FML Entries + self.srcshared = os.path.normpath(os.path.join(self.dirsrc, 'common')) def creatergcfg(self, reobf=False, keep_lvt=False, keep_generics=False, rg_update=False): """Create the files necessary for RetroGuard""" @@ -779,7 +784,8 @@ testlk = {CLIENT: self.testclient, SERVER: self.testserver} if not os.path.exists(os.path.join(srclk[side], os.path.normpath(testlk[side] + '.java'))): - return False + if not os.path.exists(os.path.join(self.srcshared, os.path.normpath(testlk[side] + '.java'))): + return False return True def checkbins(self, side): @@ -1027,6 +1033,9 @@ pathsrclk = {CLIENT: self.srcclient, SERVER: self.srcserver} pathlog = {CLIENT: self.clientrecomplog, SERVER: self.serverrecomplog} + if side == SERVER: #Disable server because FML recombines it into client + return + if not os.path.exists(pathbinlk[side]): os.makedirs(pathbinlk[side]) @@ -1039,6 +1048,7 @@ all_files = True append_pattern = False pkglist = filterdirs(pathsrclk[side], '*.java', append_pattern=append_pattern, all_files=all_files) + pkglist = pkglist + filterdirs(self.srcshared, '*.java', append_pattern=append_pattern, all_files=all_files) #FML, Add Common folder dirs = ' '.join(pkglist) classpath = os.pathsep.join(cplk[side]) forkcmd = self.cmdrecomp.format(classpath=classpath, sourcepath=pathsrclk[side], outpath=pathbinlk[side], @@ -1060,7 +1070,7 @@ raise def startserver(self): - classpath = [self.binserver] + self.cpathserver + classpath = [self.binserver, self.srcshared] + self.cpathserver classpath = [os.path.join('..', p) for p in classpath] classpath = os.pathsep.join(classpath) os.chdir(self.dirjars) @@ -1068,7 +1078,7 @@ self.runmc(forkcmd) def startclient(self): - classpath = [self.binclient] + self.cpathclient + classpath = [self.binclient, self.srcshared] + self.cpathclient classpath = [os.path.join('..', p) for p in classpath] classpath = os.pathsep.join(classpath) natives = os.path.join('..', self.dirnatives) @@ -1195,20 +1205,20 @@ with open(self.csvmethods, 'rb') as fh: methodsreader = csv.DictReader(fh) for row in methodsreader: - if int(row['side']) == side: + if int(row['side']) == side or int(row['side']) == 2: if row['name'] != row['searge']: names['methods'][row['searge']] = row['name'] with open(self.csvfields, 'rb') as fh: fieldsreader = csv.DictReader(fh) for row in fieldsreader: - if int(row['side']) == side: + if int(row['side']) == side or int(row['side']) == 2: if row['name'] != row['searge']: names['fields'][row['searge']] = row['name'] if self.has_param_csv: with open(self.csvparams, 'rb') as fh: paramsreader = csv.DictReader(fh) for row in paramsreader: - if int(row['side']) == side: + if int(row['side']) == side or int(row['side']) == 2: names['params'][row['param']] = row['name'] regexps = { @@ -1238,6 +1248,11 @@ # HINT: We pathwalk the sources for path, _, filelist in os.walk(pathsrclk[side], followlinks=True): + for cur_file in fnmatch.filter(filelist, '*.java'): + updatefile(os.path.normpath(os.path.join(path, cur_file))) + + # FML, copy of the above, for the common folder + for path, _, filelist in os.walk(self.srcshared, followlinks=True): for cur_file in fnmatch.filter(filelist, '*.java'): updatefile(os.path.normpath(os.path.join(path, cur_file))) return True @@ -1320,12 +1335,14 @@ pathsrclk = {CLIENT: self.srcclient, SERVER: self.srcserver} strip_comments(pathsrclk[side]) + strip_comments(self.srcshared) def process_cleanup(self, side): """Do lots of random cleanups including stripping comments, trailing whitespace and extra blank lines""" pathsrclk = {CLIENT: self.srcclient, SERVER: self.srcserver} src_cleanup(pathsrclk[side], fix_imports=True, fix_unicode=True, fix_charval=True, fix_pi=True, fix_round=False) + src_cleanup(self.srcshared, fix_imports=True, fix_unicode=True, fix_charval=True, fix_pi=True, fix_round=False) def process_javadoc(self, side): """Add CSV descriptions to methods and fields as javadoc""" @@ -1334,6 +1351,21 @@ if not self.has_doc_csv: self.logger.warning('!! javadoc disabled due to no csvs !!') return False + + #FML Recall this function on the common folder + #Potential bug: If this is called without a subsiquent rename call, will cause double comments + if pathsrclk[side] != self.srcshared: + if side == CLIENT: + tmp = self.srcclient + self.srcclient = self.srcshared + self.process_javadoc(side) + self.srcclient = tmp + else: + tmp = self.srcserver + self.srcserver = self.srcshared + self.process_javadoc(side) + self.srcserver = tmp + #HINT: We read the relevant CSVs methodsreader = csv.DictReader(open(self.csvmethods, 'r')) @@ -1342,13 +1374,13 @@ methods = {} for row in methodsreader: #HINT: Only include methods that have a non-empty description - if int(row['side']) == side and row['desc']: + if (int(row['side']) == side or int(row['side']) == 2) and row['desc']: methods[row['searge']] = row['desc'].replace('*/', '* /') fields = {} for row in fieldsreader: #HINT: Only include fields that have a non-empty description - if int(row['side']) == side and row['desc']: + if (int(row['side']) == side or int(row['side']) == 2) and row['desc']: fields[row['searge']] = row['desc'].replace('*/', '* /') regexps = { @@ -1420,6 +1452,7 @@ # HINT: We create the list of source directories based on the list of packages pkglist = filterdirs(pathsrclk[side], '*.java', append_pattern=True) + pkglist = pkglist + filterdirs(self.srcshared, '*.java', append_pattern=True) #FML, Add Common folder dirs = ' '.join(pkglist) forkcmd = self.cmdastyle.format(classes=dirs, conffile=self.astyleconf) self.runcmd(forkcmd) @@ -1526,6 +1559,9 @@ trgclasses.append(key) self.logger.info('> Unchanged class found: %s', key) classes = {} + for key in [ 'cpw/mods/fml/common/asm/SideOnly', 'cpw/mods/fml/common/Side' ]: + self.logger.info('> Forcing FML class: %s', key) + trgclasses.append(key) srg_data = parse_srg(srglk[side]) for row in srg_data['CL']: classes[row['deobf_name']] = row['obf_name'] @@ -1592,6 +1628,9 @@ sys.exit(1) for entry in newfiles: + if 'commands.py' in entry[0]: #FML, Disable updating of Commands.py + print 'Update to runtime/commands.py found, but disbled due to using fml' + continue if entry[3] == 'U': self.logger.info('Retrieving file from server : %s', entry[0]) cur_file = os.path.normpath(entry[0]) @@ -1654,3 +1693,6 @@ except IOError: self.logger.error('* File %s copy failed', in_class) +def commands_sanity_check(): + print 'Commands patch applied successfully' +