--- commands.py +++ commands.py @@ -126,8 +126,8 @@ def truncate(text, length): - if len(text) > length: - return text[:length] + '...' + #if len(text) > length: + # return text[:length] + '...' return text @@ -139,6 +139,8 @@ fieldnames = csvreader.fieldnames return set(fieldnames) +def commands_sanity_check(): + print ' Commands patch applied successfully' class Commands(object): """Contains the commands and initialisation for a full mcp run""" @@ -950,6 +952,8 @@ binlk = {CLIENT: self.binclient, SERVER: self.binserver} testlk = {CLIENT: self.testclient, SERVER: self.testserver} + if side == SERVER and not os.path.exists(os.path.join(binlk[side], os.path.normpath(testlk[side] + '.class'))): + return self.checkbins(CLIENT) if not os.path.exists(os.path.join(binlk[side], os.path.normpath(testlk[side] + '.class'))): return False return True @@ -1281,23 +1285,34 @@ pathbinlk = {CLIENT: self.binclient, SERVER: self.binserver} pathsrclk = {CLIENT: self.srcclient, SERVER: self.srcserver} pathlog = {CLIENT: self.clientrecomplog, SERVER: self.serverrecomplog} + + if side == SERVER: #Warn about server because FML recombines it into client + self.logger.info('Server side recompiling might be skipped, this is normal, do not complain to FML/Forge team about server side.') if not os.path.exists(pathbinlk[side]): os.makedirs(pathbinlk[side]) # HINT: We create the list of source directories based on the list of packages # on windows we just pass wildcards, otherwise we pass the full file list - if self.osname == 'win': + if self.osname == 'win' and False == True: #FML: Disable for windows we write to file now all_files = False append_pattern = True else: all_files = True append_pattern = False pkglist = filterdirs(pathsrclk[side], '*.java', append_pattern=append_pattern, all_files=all_files) + from tempfile import NamedTemporaryFile if self.cmdrecompscala: # Compile scala before java as scala scans java files, but not vice-versa pkglistscala = pkglist[:] pkglistscala.extend(filterdirs(pathsrclk[side], '*.scala', append_pattern=append_pattern, all_files=all_files)) - dirs = ' '.join(pkglistscala) + f = NamedTemporaryFile(mode='wb', suffix='.txt', prefix ='scala_src_path_', delete=False) #FML: We write to a temporary file just in case the command is to long + for line in pkglistscala: + if os.sep == '\\': + f.write('"%s"\n' % os.path.abspath(line).replace(os.sep, os.sep + os.sep)) + else: + f.write('"%s"\n' % os.path.abspath(line)) + f.close() + dirs = '@"%s"' % f.name classpath = os.pathsep.join(cplk[side]) forkcmd = self.cmdrecompscala.format(classpath=classpath, sourcepath=pathsrclk[side], outpath=pathbinlk[side], pkgs=dirs) try: @@ -1317,7 +1332,15 @@ self.logger.error('================================') self.logger.error('') raise - dirs = ' '.join(pkglist) + os.unlink(f.name) + f = NamedTemporaryFile(mode='wb', suffix='.txt', prefix ='java_src_path_', delete=False) #FML: We write to a temporary file just in case the command is to long + for line in pkglist: + if os.sep == '\\': + f.write('"%s"\n' % os.path.abspath(line).replace('\\', '\\\\')) + else: + f.write('"%s"\n' % os.path.abspath(line)) + f.close() + dirs = '@"%s"' % f.name classpath = os.pathsep.join(cplk[side]) forkcmd = self.cmdrecomp.format(classpath=classpath, sourcepath=pathsrclk[side], outpath=pathbinlk[side], pkgs=dirs) @@ -1336,9 +1359,10 @@ self.logger.error('==================') self.logger.error('') raise + os.unlink(f.name) def startserver(self, mainclass, extraargs): - classpath = [self.binserver] + self.cpathserver + classpath = [self.binclient, self.srcclient] + self.cpathserver + self.cpathclient classpath = [os.path.join('..', p) for p in classpath] classpath = os.pathsep.join(classpath) os.chdir(self.dirjars) @@ -1703,7 +1727,7 @@ self.runcmd(forkcmd) return True - def gathermd5s(self, side, reobf=False): + def gathermd5s(self, side, reobf=False, skip_fml=False): if not reobf: md5lk = {CLIENT: self.md5client, SERVER: self.md5server} else: @@ -1718,6 +1742,9 @@ class_path = '' else: class_path += '/' + if skip_fml: + if class_path.startswith('cpw/'): + continue for class_file in fnmatch.filter(filelist, '*.class'): class_name = class_path + os.path.splitext(class_file)[0] bin_file = os.path.normpath(os.path.join(path, class_file)) @@ -1890,6 +1917,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]) @@ -1910,6 +1940,9 @@ md5reoblk = {CLIENT: self.md5reobfclient, SERVER: self.md5reobfserver} outpathlk = {CLIENT: self.srcmodclient, SERVER: self.srcmodserver} src = {CLIENT: self.srcclient, SERVER: self.srcserver} + + if side == SERVER: #Noop out server side stuff + return # HINT: We need a table for the old md5 and the new ones md5table = {}