Changeset 702 for AE/installer2/src


Ignore:
Timestamp:
Mar 19, 2013, 11:00:06 AM (12 years ago)
Author:
alloc
Message:

AEI2 0.99u:

  • Fixed a few bugs in apply patches
  • Added some log output to apply patches
Location:
AE/installer2/src/net/oni2/aeinstaller
Files:
2 added
7 edited
1 moved

Legend:

Unmodified
Added
Removed
  • AE/installer2/src/net/oni2/aeinstaller/backend/DotNet.java

    r672 r702  
    88import net.oni2.aeinstaller.backend.Settings.Architecture;
    99import net.oni2.aeinstaller.backend.Settings.Platform;
     10import net.oni2.aeinstaller.backend.appexecution.AppExecution;
     11import net.oni2.aeinstaller.backend.appexecution.AppExecutionResult;
    1012
    1113/**
     
    4850                                cmd.add("which");
    4951                                cmd.add("mono");
    50                                 Vector<String> res = null;
     52                                AppExecutionResult res = null;
    5153                                try {
    5254                                        res = AppExecution.executeAndWait(cmd);
     
    5557                                }
    5658                                if (res != null) {
    57                                         if (res.get(0).startsWith("/")
    58                                                         && res.get(0).endsWith("mono")) {
     59                                        if (res.output.get(0).startsWith("/")
     60                                                        && res.output.get(0).endsWith("mono")) {
    5961                                                return true;
    6062                                        }
  • AE/installer2/src/net/oni2/aeinstaller/backend/Settings.java

    r649 r702  
    1010import java.util.Vector;
    1111
     12import net.oni2.aeinstaller.backend.appexecution.AppExecution;
     13import net.oni2.aeinstaller.backend.appexecution.AppExecutionResult;
     14
    1215import com.thoughtworks.xstream.XStream;
    1316import com.thoughtworks.xstream.io.xml.StaxDriver;
     
    7982                cmd.add("which");
    8083                cmd.add("wine");
    81                 Vector<String> res = null;
     84                AppExecutionResult res = null;
    8285                try {
    8386                        res = AppExecution.executeAndWait(cmd);
     
    8689                }
    8790                if (res != null) {
    88                         if (res.get(0).startsWith("/") && res.get(0).endsWith("wine")) {
    89                                 return res.get(0);
     91                        if (res.output.get(0).startsWith("/") && res.output.get(0).endsWith("wine")) {
     92                                return res.output.get(0);
    9093                        }
    9194                }
     
    133136                                cmd.add("getconf");
    134137                                cmd.add("LONG_BIT");
    135                                 Vector<String> res = null;
     138                                AppExecutionResult res = null;
    136139                                try {
    137140                                        res = AppExecution.executeAndWait(cmd);
     
    140143                                }
    141144                                if (res != null) {
    142                                         if (res.get(0).equals("64"))
     145                                        if (res.output.get(0).equals("64"))
    143146                                                return Architecture.AMD64;
    144147                                }
  • AE/installer2/src/net/oni2/aeinstaller/backend/ToolLauncher.java

    r672 r702  
    55
    66import net.oni2.aeinstaller.backend.Settings.Platform;
     7import net.oni2.aeinstaller.backend.appexecution.AppExecution;
    78import net.oni2.aeinstaller.backend.packages.Package;
    89
  • AE/installer2/src/net/oni2/aeinstaller/backend/appexecution/AppExecution.java

    r697 r702  
    1 package net.oni2.aeinstaller.backend;
     1package net.oni2.aeinstaller.backend.appexecution;
    22
    33import java.io.BufferedReader;
     
    1313 */
    1414public class AppExecution {
    15 
    1615        /**
    1716         * Execute a short running application and wait for termination
     
    1918         * @param cmdLine
    2019         *            List of command and arguments
    21          * @return List of output lines
     20         * @return Error code and list of output lines
    2221         * @throws IOException
    2322         *             Exc
    2423         */
    25         public static Vector<String> executeAndWait(List<String> cmdLine)
     24        public static AppExecutionResult executeAndWait(Vector<String> cmdLine)
    2625                        throws IOException {
    2726                ProcessBuilder pb = new ProcessBuilder(cmdLine);
     
    3938                        lines.add(line);
    4039                }
    41                 return lines;
     40                try {
     41                        proc.waitFor();
     42                } catch (InterruptedException e) {
     43                        // TODO Auto-generated catch block
     44                        e.printStackTrace();
     45                }
     46                return new AppExecutionResult(proc.exitValue(), cmdLine, lines);
    4247        }
    4348
  • AE/installer2/src/net/oni2/aeinstaller/backend/oni/Installer.java

    r700 r702  
    2626import net.oni2.aeinstaller.backend.Settings;
    2727import net.oni2.aeinstaller.backend.Settings.Platform;
     28import net.oni2.aeinstaller.backend.appexecution.AppExecutionResult;
    2829import net.oni2.aeinstaller.backend.packages.EBSLInstallType;
    2930import net.oni2.aeinstaller.backend.packages.Package;
     
    164165                                else {
    165166                                        File targetFile = CaseInsensitiveFile
    166                                                         .getCaseInsensitiveFile(targetFolder,
    167                                                                         f.getName());
     167                                                        .getCaseInsensitiveFile(targetFolder, f.getName());
    168168                                        if (remove) {
    169169                                                if (targetFile.exists())
     
    464464                        List<File> patchFolders, InstallProgressListener listener,
    465465                        PrintWriter log) {
     466                log.println();
     467                log.println("Applying XML patches");
     468                listener.installProgressUpdate(0, 1, "Applying XML patches");
     469
    466470                // TODO: REMOVE
    467471                long startMS = new Date().getTime();
    468                 // TODO: Implement this
     472
    469473                String tmpFolderName = "installrun_temp-"
    470474                                + new SimpleDateFormat("yyyy_MM_dd-HH_mm_ss")
    471475                                                .format(new Date());
    472476                File tmpFolder = new File(Paths.getTempPath(), tmpFolderName);
     477                tmpFolder.mkdir();
    473478
    474479                HashMap<String, Vector<File>> patches = new HashMap<String, Vector<File>>();
     
    488493                        File levelFolder = new File(tmpFolder, level);
    489494                        levelFolder.mkdir();
    490 
    491                         // Get files to be patched from vanilla.dat / packages
     495                       
     496                        log.println("\t\tPatches for " + level);
     497
     498                        Vector<String> exportPatterns = new Vector<String>();
     499                        // Get files to be patched from vanilla.dat
    492500                        for (File patch : patches.get(level)) {
    493501                                String patternWildcard = patch.getName();
     
    495503                                                patternWildcard.indexOf(".oni-patch"));
    496504                                patternWildcard = patternWildcard.replace('-', '*');
     505                                exportPatterns.add(patternWildcard);
     506                        }
     507                        for (File srcFolder : oniLevelFolders.get(level)) {
     508                                if (srcFolder.isFile()) {
     509                                        if (srcFolder.getPath().toLowerCase().contains("vanilla")) {
     510                                                // Extract from .dat
     511                                                AppExecutionResult res = OniSplit.export(levelFolder,
     512                                                                srcFolder, exportPatterns);
     513                                                logAppOutput(res, log);
     514                                        }
     515                                }
     516                        }
     517
     518                        // Get files to be patched from packages
     519                        for (File patch : patches.get(level)) {
     520                                String patternWildcard = patch.getName();
     521                                patternWildcard = patternWildcard.substring(0,
     522                                                patternWildcard.indexOf(".oni-patch"));
     523                                patternWildcard = patternWildcard.replace('-', '*');
     524                                patternWildcard = patternWildcard + ".oni";
     525                                Vector<String> patterns = new Vector<String>();
     526                                patterns.add(patternWildcard);
    497527                                final Pattern patternRegex = Pattern.compile(
    498528                                                patternWildcard.replaceAll("\\*", ".\\*"),
     
    501531                                for (File srcFolder : oniLevelFolders.get(level)) {
    502532                                        if (srcFolder.isFile()) {
    503                                                 // Extract from .dat
    504                                                 OniSplit.export(levelFolder, srcFolder, patternWildcard);
     533                                                if (!srcFolder.getPath().toLowerCase()
     534                                                                .contains("vanilla")) {
     535                                                        // Extract from .dat
     536                                                        AppExecutionResult res = OniSplit.export(
     537                                                                        levelFolder, srcFolder, patterns);
     538                                                        logAppOutput(res, log);
     539                                                }
    505540                                        } else {
    506541                                                // Copy from folder with overwrite
     
    522557                        Vector<File> files = new Vector<File>();
    523558                        files.add(new File(levelFolder, "*.oni"));
    524                         OniSplit.convertOniToXML(levelFolderXML, files);
     559                        AppExecutionResult res = OniSplit.convertOniToXML(levelFolderXML,
     560                                        files);
     561                        logAppOutput(res, log);
    525562
    526563                        // Apply patches in levelFolderXML
     
    529566                                patternWildcard = patternWildcard.substring(0,
    530567                                                patternWildcard.indexOf(".oni-patch"));
     568                                patternWildcard = patternWildcard + ".xml";
    531569                                patternWildcard = patternWildcard.replace('-', '*');
    532                                 final Pattern patternRegex = Pattern.compile(
    533                                                 patternWildcard.replaceAll("\\*", ".\\*"),
    534                                                 Pattern.CASE_INSENSITIVE);
    535 
    536                                 for (File toPatch : FileUtils.listFiles(levelFolderXML,
    537                                                 new RegexFileFilter(patternRegex), null)) {
    538                                         // Apply patch "patch" to "toPatch"
    539                                         XMLTools.patch(patch, toPatch);
    540                                 }
     570
     571                                res = XMLTools.patch(patch, new File(levelFolderXML,
     572                                                patternWildcard));
     573                                logAppOutput(res, log);
    541574                        }
    542575
     
    544577                        files.clear();
    545578                        files.add(new File(levelFolderXML, "*.xml"));
    546                         OniSplit.convertXMLtoOni(levelFolder, files);
     579                        res = OniSplit.convertXMLtoOni(levelFolder, files);
     580                        logAppOutput(res, log);
    547581
    548582                        // Remove XML folder as import will only require .oni's
    549                         try {
    550                                 FileUtils.deleteDirectory(levelFolderXML);
    551                         } catch (IOException e) {
    552                                 e.printStackTrace();
    553                         }
     583//                      try {
     584//                              FileUtils.deleteDirectory(levelFolderXML);
     585//                      } catch (IOException e) {
     586//                              e.printStackTrace();
     587//                      }
    554588
    555589                        oniLevelFolders.get(level).add(levelFolder);
     590                       
     591                        log.println();
    556592                }
    557593
     
    571607                totalSteps++;
    572608
     609                log.println();
    573610                log.println("Importing levels");
    574611                for (String l : oniLevelFolders.keySet()) {
     
    576613                        listener.installProgressUpdate(stepsDone, totalSteps,
    577614                                        "Installing level " + l);
    578                         for (File f : oniLevelFolders.get(l)) {
    579                                 log.println("\t\t\t" + f.getPath());
    580                         }
    581 
    582                         Vector<String> res = OniSplit.packLevel(oniLevelFolders.get(l),
     615
     616                        AppExecutionResult res = OniSplit.packLevel(oniLevelFolders.get(l),
    583617                                        new File(Paths.getEditionGDF(), sanitizeLevelName(l)
    584618                                                        + ".dat"));
    585                         if (res != null && res.size() > 0) {
    586                                 for (String s : res)
    587                                         log.println("\t\t" + s);
    588                         }
     619                        logAppOutput(res, log);
    589620
    590621                        log.println();
     
    604635                                }
    605636                        }
     637                } else {
     638                        log.println("NOT copying intro");
    606639                }
    607640                if (Settings.getInstance().get("copyoutro", true)) {
     
    615648                                }
    616649                        }
     650                } else {
     651                        log.println("NOT copying outro");
    617652                }
    618653        }
     
    704739
    705740                                // Export Vanilla-Level-Dat -> Temp/Level
    706                                 Vector<String> res = OniSplit.export(tempLevelFolder, f);
    707                                 if (res != null && res.size() > 0) {
    708                                         for (String s : res)
    709                                                 log.println("\t\t\t" + s);
    710                                 }
     741                                AppExecutionResult res = OniSplit.export(tempLevelFolder, f);
     742                                logAppOutput(res, log);
    711743
    712744                                log.println("\t\tMoving files");
     
    729761                                folders.add(f);
    730762
    731                                 Vector<String> res = OniSplit.importLevel(folders, new File(
    732                                                 Paths.getVanillaOnisPath(), levelName + ".dat"));
    733                                 if (res != null && res.size() > 0) {
    734                                         for (String s : res)
    735                                                 log.println("\t\t" + s);
    736                                 }
     763                                AppExecutionResult res = OniSplit
     764                                                .importLevel(folders,
     765                                                                new File(Paths.getVanillaOnisPath(), levelName
     766                                                                                + ".dat"));
     767                                logAppOutput(res, log);
    737768
    738769                                log.println();
     
    888919                                && Paths.getVanillaGDF().isDirectory();
    889920        }
     921
     922        private static void logAppOutput(AppExecutionResult result, PrintWriter log) {
     923                if (result != null) {
     924                        log.println("\t\t\tCalled:");
     925                        for (String s : result.cmdLine)
     926                                log.println("\t\t\t\t" + s);
     927                        log.println("\t\t\tReturned: " + result.errorCode);
     928                        for (String s : result.output)
     929                                log.println("\t\t\t\t" + s);
     930                        log.println();
     931                }
     932        }
    890933}
  • AE/installer2/src/net/oni2/aeinstaller/backend/oni/OniSplit.java

    r699 r702  
    55import java.util.Vector;
    66
    7 import net.oni2.aeinstaller.backend.AppExecution;
    87import net.oni2.aeinstaller.backend.CaseInsensitiveFile;
    98import net.oni2.aeinstaller.backend.DotNet;
     
    1110import net.oni2.aeinstaller.backend.Settings;
    1211import net.oni2.aeinstaller.backend.Settings.Platform;
     12import net.oni2.aeinstaller.backend.appexecution.AppExecution;
     13import net.oni2.aeinstaller.backend.appexecution.AppExecutionResult;
    1314
    1415/**
     
    3334         * @return OniSplit output
    3435         */
    35         public static Vector<String> export(File targetFolder, File input) {
     36        public static AppExecutionResult export(File targetFolder, File input) {
    3637                return export(targetFolder, input, null);
    3738        }
     
    4445         * @param input
    4546         *            Dat file
    46          * @param pattern
    47          *            Filename pattern for files to export
    48          * @return OniSplit output
    49          */
    50         public static Vector<String> export(File targetFolder, File input,
    51                         String pattern) {
     47         * @param patterns
     48         *            Filename patterns for files to export
     49         * @return OniSplit output
     50         */
     51        public static AppExecutionResult export(File targetFolder, File input,
     52                        Vector<String> patterns) {
    5253                if (!targetFolder.exists())
    5354                        targetFolder.mkdir();
    5455
    5556                Vector<String> cmdLine = getProgramInvocation();
    56                 if (pattern == null)
     57                if (patterns == null)
    5758                        cmdLine.add("-export");
    58                 else
    59                         cmdLine.add("-export:" + pattern);
     59                else {
     60                        for (String p : patterns)
     61                                cmdLine.add("-export:" + p);
     62                }
    6063                cmdLine.add(targetFolder.getPath());
    6164                cmdLine.add(input.getPath());
    62                 Vector<String> res = null;
     65                AppExecutionResult res = null;
    6366                try {
    6467                        res = AppExecution.executeAndWait(cmdLine);
     
    7881         * @return OniSplit output
    7982         */
    80         public static Vector<String> importLevel(Vector<File> sourceFolders,
     83        public static AppExecutionResult importLevel(Vector<File> sourceFolders,
    8184                        File targetFile) {
    8285                Vector<String> cmdLine = getProgramInvocation();
     
    8588                        cmdLine.add(f.getPath());
    8689                cmdLine.add(targetFile.getPath());
    87                 Vector<String> res = null;
     90                AppExecutionResult res = null;
    8891                try {
    8992                        res = AppExecution.executeAndWait(cmdLine);
     
    105108         * @return OniSplit output
    106109         */
    107         public static Vector<String> packLevel(Vector<File> sourceFoldersFiles,
     110        public static AppExecutionResult packLevel(Vector<File> sourceFoldersFiles,
    108111                        File targetFile) {
    109112                Vector<String> cmdLine = getProgramInvocation();
     
    114117                for (File f : sourceFoldersFiles)
    115118                        cmdLine.add(f.getPath());
    116                 Vector<String> res = null;
     119                AppExecutionResult res = null;
    117120                try {
    118121                        res = AppExecution.executeAndWait(cmdLine);
     
    135138         * @return OniSplit output
    136139         */
    137         public static Vector<String> move(File targetFolder, String input,
     140        public static AppExecutionResult move(File targetFolder, String input,
    138141                        String moveParameter) {
    139142                if (!targetFolder.exists())
     
    145148                cmdLine.add(targetFolder.getPath());
    146149                cmdLine.add(input);
    147                 Vector<String> res = null;
     150                AppExecutionResult res = null;
    148151                try {
    149152                        res = AppExecution.executeAndWait(cmdLine);
     
    163166         * @return OniSplit output
    164167         */
    165         public static Vector<String> convertOniToXML(File targetFolder,
     168        public static AppExecutionResult convertOniToXML(File targetFolder,
    166169                        Vector<File> inputFiles) {
    167170                if (!targetFolder.exists())
     
    174177                        cmdLine.add(f.getPath());
    175178                }
    176                 Vector<String> res = null;
     179                AppExecutionResult res = null;
    177180                try {
    178181                        res = AppExecution.executeAndWait(cmdLine);
     
    192195         * @return OniSplit output
    193196         */
    194         public static Vector<String> convertXMLtoOni(File targetFolder,
     197        public static AppExecutionResult convertXMLtoOni(File targetFolder,
    195198                        Vector<File> inputFiles) {
    196199                if (!targetFolder.exists())
     
    203206                        cmdLine.add(f.getPath());
    204207                }
    205                 Vector<String> res = null;
     208                AppExecutionResult res = null;
    206209                try {
    207210                        res = AppExecution.executeAndWait(cmdLine);
     
    239242
    240243        private static File getProgramFile() {
    241                 File toolsPath = CaseInsensitiveFile.getCaseInsensitiveFile(Paths.getEditionBasePath(), "Tools");
    242                 return CaseInsensitiveFile.getCaseInsensitiveFile(toolsPath, "Onisplit.exe");
     244                File toolsPath = CaseInsensitiveFile.getCaseInsensitiveFile(
     245                                Paths.getEditionBasePath(), "Tools");
     246                return CaseInsensitiveFile.getCaseInsensitiveFile(toolsPath,
     247                                "Onisplit.exe");
    243248        }
    244249}
  • AE/installer2/src/net/oni2/aeinstaller/backend/oni/XMLTools.java

    r699 r702  
    55import java.util.Vector;
    66
    7 import net.oni2.aeinstaller.backend.AppExecution;
    87import net.oni2.aeinstaller.backend.CaseInsensitiveFile;
    98import net.oni2.aeinstaller.backend.DotNet;
    109import net.oni2.aeinstaller.backend.Paths;
     10import net.oni2.aeinstaller.backend.appexecution.AppExecution;
     11import net.oni2.aeinstaller.backend.appexecution.AppExecutionResult;
    1112
    1213/**
     
    2526         * @return XMLTools output
    2627         */
    27         public static Vector<String> patch(File patch, File source) {
     28        public static AppExecutionResult patch(File patch, File source) {
    2829                Vector<String> cmdLine = getProgramInvocation();
    2930                // xmlTools.exe patchfile -filename:PATCH -forceinfiles:TOPATCH
     
    3132                cmdLine.add("-filename:" + patch.getPath());
    3233                cmdLine.add("-forceinfiles:" + source.getPath());
    33                 Vector<String> res = null;
     34                AppExecutionResult res = null;
    3435                try {
    3536                        res = AppExecution.executeAndWait(cmdLine);
  • AE/installer2/src/net/oni2/aeinstaller/gui/MainWin.java

    r701 r702  
    4040
    4141import net.oni2.aeinstaller.AEInstaller2;
    42 import net.oni2.aeinstaller.backend.AppExecution;
    4342import net.oni2.aeinstaller.backend.ImageResizer;
    4443import net.oni2.aeinstaller.backend.Paths;
     
    4746import net.oni2.aeinstaller.backend.Settings.Platform;
    4847import net.oni2.aeinstaller.backend.SizeFormatter;
     48import net.oni2.aeinstaller.backend.appexecution.AppExecution;
    4949import net.oni2.aeinstaller.backend.depot.DepotManager;
    5050import net.oni2.aeinstaller.backend.oni.InstallProgressListener;
Note: See TracChangeset for help on using the changeset viewer.