This is an automated email from the git hooks/post-receive script. pini pushed a commit to tag upstream/1.1.0_beta1 in repository sikuli.
commit fce599bc4033ca69da7dd997a447e9456603548f Author: Raimund Hocke <[email protected]> Date: Fri Feb 28 19:05:42 2014 +0100 many fixes/additions to make setup robust and convenient --- .../src/main/java/org/sikuli/basics/RunSetup.java | 272 ++++++++++++--------- 1 file changed, 154 insertions(+), 118 deletions(-) diff --git a/Basics/src/main/java/org/sikuli/basics/RunSetup.java b/Basics/src/main/java/org/sikuli/basics/RunSetup.java index 57c0cef..9770091 100644 --- a/Basics/src/main/java/org/sikuli/basics/RunSetup.java +++ b/Basics/src/main/java/org/sikuli/basics/RunSetup.java @@ -21,6 +21,8 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Date; import java.util.List; +import java.util.logging.Level; +import java.util.logging.Logger; import java.util.regex.Pattern; import java.util.zip.ZipEntry; import javax.swing.JFrame; @@ -34,6 +36,7 @@ public class RunSetup { private static boolean isUpdateSetup = false; private static boolean runningfromJar = true; private static boolean noSetup = false; + private static boolean backUpExists = false; private static String workDir; private static String uhome; private static String logfile; @@ -41,7 +44,8 @@ public class RunSetup { private static String majorversion = Settings.getVersionShortBasic(); private static String updateVersion; private static String downloadBaseDirBase = "https://launchpad.net/raiman/sikulix2013+/"; - private static String downloadBaseDir = downloadBaseDirBase + majorversion + ".0/+download/"; + private static String downloadBaseDirWeb = downloadBaseDirBase + majorversion + ".0"; + private static String downloadBaseDir = downloadBaseDirWeb + "/+download/"; private static String downloadSetup; private static String downloadIDE = version + "-1.jar"; private static String downloadJava = version + "-2.jar"; @@ -83,7 +87,7 @@ public class RunSetup { private static long start; private static boolean runningSetup = false; private static boolean generallyDoUpdate = false; - public static String timestampBuilt = "2014-02-22-15"; + public static String timestampBuilt = "2014-02-28-18"; //<editor-fold defaultstate="collapsed" desc="new logging concept"> private static void log(int level, String message, Object... args) { @@ -110,7 +114,7 @@ public class RunSetup { } //</editor-fold> - public static void main(String[] args) { + public static void main(String[] args) throws IOException { mem = "main"; PreferencesUser prefs = PreferencesUser.getInstance(); @@ -190,7 +194,7 @@ public class RunSetup { } if (jf != null) { Debug.error("no suitable jar found"); - System.exit(1); + System.exit(0); } Settings.ActionLogs = false; Settings.InfoLogs = false; @@ -202,7 +206,7 @@ public class RunSetup { runningJar = FileManager.getJarName(); if (runningJar.isEmpty()) { popError("error accessing jar - terminating"); - System.exit(1); + System.exit(0); } if (runningJar.startsWith("sikulixupdate")) { runningUpdate = true; @@ -234,14 +238,14 @@ public class RunSetup { if (todo.equals("unpack") || todo.equals("pack")) { if (options.size() < 1) { log1(-1, todo + ": invalid options! need a jar"); - System.exit(1); + System.exit(0); } jarName = options.get(0); options.remove(0); if (jarName.endsWith(".jar")) { if (options.size() < 1) { log1(-1, todo + ": invalid options! need a folder"); - System.exit(1); + System.exit(0); } folder = options.get(0); options.remove(0); @@ -277,7 +281,7 @@ public class RunSetup { FileManager.xcopy(jarName, jarBack, ""); } catch (IOException ex) { log(-1, "could not create backUp - terminating"); - System.exit(-1); + System.exit(0); } log1(3, "requested to pack %s \nfrom %s\nbackup to: %s", jarName, folder, jarBack); FileManager.packJar(folder, jarName, ""); @@ -291,7 +295,7 @@ public class RunSetup { // build jar arg0 if (options.size() < 2) { log1(-1, "buildJar: invalid options!"); - System.exit(1); + System.exit(0); } jarName = options.get(0); options.remove(0); @@ -303,7 +307,7 @@ public class RunSetup { continue; } else { log1(-1, "makejar: invalid option: " + todo); - System.exit(1); + System.exit(0); } } System.exit(0); @@ -423,24 +427,23 @@ public class RunSetup { } } } else { - workDir = (new File(uhome, "SikuliX/Setup")).getAbsolutePath(); + workDir = (new File(uhome, "SikuliX")).getAbsolutePath(); (new File(workDir)).mkdirs(); logfile = (new File(workDir, localLogfile)).getAbsolutePath(); Debug.setLogFile(logfile); popInfo("\n... not running from sikuli-setup.jar - using as download folder\n" + workDir); } - log0(lvl, "running from: " + runningJar); + log1(lvl, "Setup in: %s using: %s", workDir, (runningJar.contains("classes") ? "IDE" : runningJar)); log1(lvl, "SikuliX Setup Build: %s %s", Settings.getVersionShort(), RunSetup.timestampBuilt); - log1(lvl, "user home: %s", uhome); - File localJarIDE = new File(workDir, localIDE); File localJarJava = new File(workDir, localJava); File localMacFolder = new File(workDir, folderMacApp); //TODO Windows 8 HKLM/SOFTWARE/JavaSoft add Prefs ???? //</editor-fold> + //<editor-fold defaultstate="collapsed" desc="checking update/beta"> if (!runningUpdate && !isUpdateSetup) { String uVersion = ""; @@ -448,8 +451,7 @@ public class RunSetup { + "\nClick YES, if you want to install ..." + "\ncurrent stuff will be saved to BackUp." + "\n... Click NO to skip ..."; - if (localJarIDE.exists() //|| localJarScript.exists() - || localJarJava.exists() || localMacFolder.exists()) { + if (localJarIDE.exists() || localJarJava.exists() || localMacFolder.exists()) { int avail = -1; boolean someUpdate = false; String ask1 = "You have " + Settings.getVersion() @@ -517,7 +519,7 @@ public class RunSetup { popInfo("Now you can run the update process:\n" + "DoubleClick " + "sikuli-update-" + uVersion + ".jar" + "\nin folder " + workDir + "\n\nPlease click OK before proceeding!"); - System.exit(0); + terminate(""); } else { popError("downloadable update: " + uVersion + "\nexpected update: " + updateVersion + "\n do not match --- terminating --- pls. report"); @@ -689,10 +691,10 @@ public class RunSetup { } File fPrefs = new File(workDir, "SikuliPrefs.txt"); - fPrefs.deleteOnExit(); prefs.exportPrefs(fPrefs.getAbsolutePath()); - try { - BufferedReader pInp = new BufferedReader(new FileReader(fPrefs)); + BufferedReader pInp = null; + try { + pInp = new BufferedReader(new FileReader(fPrefs)); String line; while (null != (line = pInp.readLine())) { if (!line.contains("entry")) { @@ -702,7 +704,7 @@ public class RunSetup { } pInp.close(); } catch (Exception ex) { - } + } FileManager.deleteFileOrFolder(fPrefs.getAbsolutePath()); //</editor-fold> @@ -744,7 +746,7 @@ public class RunSetup { popError("You only selected Option 3 or 4 !\n" + "This is currently not supported.\n" + "Please start allover again with valid options.\n"); - System.exit(0); + terminate(""); } msg = "The following file(s) will be downloaded to\n" + workDir + "\n"; @@ -757,10 +759,6 @@ public class RunSetup { getIDE = true; msg += "Pack 1: " + localIDE + "\n"; } -// if (new File(workDir, localScript).exists()) { -// getScript = true; -// msg += "Pack 2: " + localScript + "\n"; -// } if (new File(workDir, localJava).exists()) { getJava = true; msg += "Pack 2: " + localJava + "\n"; @@ -781,20 +779,26 @@ public class RunSetup { } } + String downloadedFiles = ""; if (!isUpdateSetup) { if (getIDE || getJava || getRServer) { + if (!proxyMsg.isEmpty()) { msg += proxyMsg + "\n"; } if (getIDE) { + downloadedFiles += downloadIDE + " - "; msg += "\n--- Package 1 ---\n" + downloadIDE + " (IDE/Scripting)"; if (getJython) { + downloadedFiles += downloadJython + " - "; msg += "\n - with Jython"; } if (getJRuby) { + downloadedFiles += downloadJRuby + " - "; msg += "\n - with JRuby"; } if (Settings.isMac()) { + downloadedFiles += downloadMacApp + " - "; msg += "\n" + downloadMacApp + " (Mac-App)"; } } @@ -802,6 +806,7 @@ public class RunSetup { if (getIDE) { msg += "\n"; } + downloadedFiles += downloadJava + " - "; msg += "\n--- Package 2 ---\n" + downloadJava + " (Java API)"; } if (getTess || getRServer) { @@ -810,9 +815,11 @@ public class RunSetup { } msg += "\n--- Additions ---"; if (getTess) { + downloadedFiles += downloadTess + " - "; msg += "\n" + downloadTess + " (Tesseract)"; } if (getRServer) { + downloadedFiles += downloadRServer + " - "; msg += "\n" + downloadRServer + " (RemoteServer)"; } } @@ -823,11 +830,11 @@ public class RunSetup { msg += "\n\nOnly click NO, if you want to terminate setup now!\n" + "Click YES even if you want to use local copies in Downloads!"; if (!popAsk(msg)) { - System.exit(0); + terminate(""); } } else { - popError("Nothing selected! Sikuli not useable!\nYou might try again ;-)"); - System.exit(1); + popError("Nothing selected! You might try again ;-)"); + terminate(""); } // downloading @@ -835,16 +842,19 @@ public class RunSetup { String targetJar; boolean downloadOK = true; boolean dlOK = true; + File fDLDir = new File(workDir, "Downloads"); + fDLDir.mkdirs(); + String dlDir = fDLDir.getAbsolutePath(); if (getIDE) { localJar = new File(workDir, localIDE).getAbsolutePath(); if (!test) { - dlOK = download(downloadBaseDir, workDir, downloadIDE, localJar, "IDE/Scripting"); + dlOK = download(downloadBaseDir, dlDir, downloadIDE, localJar, "IDE/Scripting"); } downloadOK &= dlOK; if (Settings.isMac()) { targetJar = new File(workDir, localMacApp).getAbsolutePath(); if (!test) { - dlOK = download(downloadBaseDir, workDir, downloadMacApp, targetJar, "MacApp"); + dlOK = download(downloadBaseDir, dlDir, downloadMacApp, targetJar, "MacApp"); } if (dlOK) { FileManager.deleteFileOrFolder((new File(workDir, folderMacApp)).getAbsolutePath()); @@ -857,46 +867,51 @@ public class RunSetup { if (getJython) { targetJar = new File(workDir, localJython).getAbsolutePath(); if (!test) { - downloadOK = download(downloadBaseDir, workDir, downloadJython, targetJar, "Jython"); + downloadOK = download(downloadBaseDir, dlDir, downloadJython, targetJar, "Jython"); } downloadOK &= dlOK; } if (getJRuby) { targetJar = new File(workDir, localJRuby).getAbsolutePath(); if (!test) { - downloadOK = download(downloadBaseDir, workDir, downloadJRuby, targetJar, "JRuby"); + downloadOK = download(downloadBaseDir, dlDir, downloadJRuby, targetJar, "JRuby"); } downloadOK &= dlOK; } if (getJava) { targetJar = new File(workDir, localJava).getAbsolutePath(); if (!test) { - downloadOK = download(downloadBaseDir, workDir, downloadJava, targetJar, "JavaAPI"); + downloadOK = download(downloadBaseDir, dlDir, downloadJava, targetJar, "JavaAPI"); } downloadOK &= dlOK; } if (getTess) { targetJar = new File(workDir, localTess).getAbsolutePath(); if (!test) { - downloadOK = download(downloadBaseDir, workDir, downloadTess, targetJar, "Tesseract"); + downloadOK = download(downloadBaseDir, dlDir, downloadTess, targetJar, "Tesseract"); } downloadOK &= dlOK; } if (getRServer) { targetJar = new File(workDir, localRServer).getAbsolutePath(); if (!test) { - downloadOK = download(downloadBaseDir, workDir, downloadRServer, targetJar, "RemoteServer"); + downloadOK = download(downloadBaseDir, dlDir, downloadRServer, targetJar, "RemoteServer"); } downloadOK &= dlOK; } log1(lvl, "Download ended"); + log1(lvl, "Downloads for selected options:\n" + downloadedFiles); + log1(lvl, "Download page: " + downloadBaseDirWeb); if (!test && !downloadOK) { popError("Some of the downloads did not complete successfully.\n" + "Check the logfile for possible error causes.\n\n" + "If you think, setup's inline download is blocked somehow on,\n" - + "your system, you might download the appropriate raw packages manually and \n" - + "unzip them into a folder Downloads in the setup folder and run setup again.\n" - + "Be aware: The raw packages are not useable without being processed by setup!\n\n" + + "your system, you might download the appropriate raw packages manually\n" + + "into the folder Downloads in the setup folder and run setup again.\n\n" + + "download page: " + downloadBaseDirWeb + "\n" + + "files to download (information is in the setup log file too)\n" + + downloadedFiles + + "\n\nBe aware: The raw packages are not useable without being processed by setup!\n\n" + "For other reasons, you might simply try to run setup again."); terminate("download not completed successfully"); } @@ -905,7 +920,7 @@ public class RunSetup { //<editor-fold defaultstate="collapsed" desc="option setup: add native stuff"> restore(); //to get back the stuff that was not changed if (test && !popAsk("add native stuff --- proceed?")) { - System.exit(1); + System.exit(0); } if (!getIDE && !getJava) { @@ -981,11 +996,10 @@ public class RunSetup { return true; } }); - success &= (new File(localJar)).delete(); - success &= (new File(workDir, localTemp)).renameTo(new File(localJar)); + success &= handleTempAfter(localTemp, localJar); } - if (getJython && getJRuby) { + if (success && getJython && getJRuby) { log1(lvl, "recreating JRuby (exclude Jython empty stuff)"); localJar = (new File(workDir, localJRuby)).getAbsolutePath(); targetJar = (new File(workDir, localTemp)).getAbsolutePath(); @@ -1000,38 +1014,37 @@ public class RunSetup { return true; } }); - success &= (new File(localJar)).delete(); - success &= (new File(workDir, localTemp)).renameTo(new File(localJar)); - - log1(lvl, "recreating Jython (exclude JRuby empty stuff)"); - localJar = (new File(workDir, localJython)).getAbsolutePath(); - targetJar = (new File(workDir, localTemp)).getAbsolutePath(); - success &= FileManager.buildJar(targetJar, - new String[]{localJar}, null, null, new FileManager.JarFileFilter() { - @Override - public boolean accept(ZipEntry entry) { - if (entry.getName().contains("JRubyIDESupport") - || entry.getName().contains("JRubyScriptRunner")) { - return false; - } - return true; - } - }); - success &= (new File(localJar)).delete(); - success &= (new File(workDir, localTemp)).renameTo(new File(localJar)); - } - - if (getJava) { + success &= handleTempAfter(localTemp, localJar); + + if (success) { + log1(lvl, "recreating Jython (exclude JRuby empty stuff)"); + localJar = (new File(workDir, localJython)).getAbsolutePath(); + targetJar = (new File(workDir, localTemp)).getAbsolutePath(); + success &= FileManager.buildJar(targetJar, + new String[]{localJar}, null, null, new FileManager.JarFileFilter() { + @Override + public boolean accept(ZipEntry entry) { + if (entry.getName().contains("JRubyIDESupport") + || entry.getName().contains("JRubyScriptRunner")) { + return false; + } + return true; + } + }); + success &= handleTempAfter(localTemp, localJar); + } + } + + if (success && getJava) { log1(lvl, "adding needed stuff to sikulixapi.jar"); localJar = (new File(workDir, localJava)).getAbsolutePath(); jarsList[0] = localJar; targetJar = (new File(workDir, localTemp)).getAbsolutePath(); success &= FileManager.buildJar(targetJar, jarsList, null, null, libsFilter); - success &= (new File(localJar)).delete(); - success &= (new File(workDir, localTemp)).renameTo(new File(localJar)); + success &= handleTempAfter(localTemp, localJar); } - if (getIDE) { + if (success && getIDE) { log1(lvl, "adding needed stuff to sikulix.jar"); localJar = (new File(workDir, localIDE)).getAbsolutePath(); jarsList[0] = localJar; @@ -1043,8 +1056,7 @@ public class RunSetup { } targetJar = (new File(workDir, localTemp)).getAbsolutePath(); success &= FileManager.buildJar(targetJar, jarsList, null, null, libsFilter); - success &= (new File(localJar)).delete(); - success &= (new File(workDir, localTemp)).renameTo(new File(localJar)); + success &= handleTempAfter(localTemp, localJar); } if (getJython) { @@ -1239,7 +1251,34 @@ public class RunSetup { System.exit(0); } - public static boolean isRunningUpdate() { + private static boolean handleTempAfter(String temp, String target) { + boolean success = true; + FileManager.deleteFileOrFolder(target); + success &= !new File(target).exists(); + if (success) { + success &= (new File(workDir, temp)).renameTo(new File(target)); + if (!success) { + log1(-1, "rename temp to " + target + " --- trying copy"); + try { + FileManager.xcopy(new File(workDir, temp).getAbsolutePath(), target ,null); + success = new File(target).exists(); + if (success) { + FileManager.deleteFileOrFolder(new File(workDir, temp).getAbsolutePath()); + success = !new File(workDir, temp).exists(); + } + } catch (IOException ex) { + success &= false; + } + if (!success) { + log1(-1, "did not work"); + terminate(""); + } + } + } + return success; + } + + public static boolean isRunningUpdate() { return runningUpdate; } @@ -1270,6 +1309,9 @@ public class RunSetup { } protected static void restore() { + if (!backUpExists) { + return; + } String backup = new File(workDir, "Backup").getAbsolutePath(); if (new File(backup, localIDE).exists() && !new File(workDir, localIDE).exists()) { log1(lvl, "restoring from backup " + localIDE); @@ -1296,8 +1338,10 @@ public class RunSetup { if (new File(backup, folder).exists() && !new File(workDir, folder).exists()) { log1(lvl, "restoring from backup " + "folder " + folder); new File(backup, folder).renameTo(new File(workDir, folder)); - } - } + } + FileManager.deleteFileOrFolder(new File(workDir, "Backup").getAbsolutePath()); + FileManager.deleteFileOrFolder(new File(workDir, "SikuliPrefs.txt").getAbsolutePath()); + } private static void reset(int type) { log1(3, "requested to reset: " + workDir); @@ -1338,16 +1382,6 @@ public class RunSetup { return false; } else if (entry.getName().equals(localSetup)) { return false; - } else if (isUpdate && entry.getName().equals(localIDE)) { - return false; -// } else if (isUpdate && entry.getName().equals(localScript)) { -// return false; - } else if (isUpdate && entry.getName().equals(localJava)) { - return false; - } else if (isUpdate && entry.getName().equals(localTess)) { - return false; - } else if (isUpdate && entry.getName().equals(localRServer)) { - return false; } else if (workDir.equals(entry.getAbsolutePath())) { return false; } else if ("BackUp".equals(entry.getName())) { @@ -1356,14 +1390,13 @@ public class RunSetup { return false; } else if (entry.getName().contains("SetupLog")) { return false; - } else if (entry.getName().startsWith(localUpdate)) { - return false; - } + } return true; } }); closeSplash(splash); log1(3, "completed!"); + backUpExists = true; } public static void helpOption(int option) { @@ -1500,34 +1533,33 @@ public class RunSetup { } private static boolean download(String sDir, String tDir, String item, String jar, String itemName) { - File downloaded = new File(workDir, "Downloads/" + item); + boolean shouldDownload = true; + File downloaded = new File(tDir, item); if (downloaded.exists()) { - if (popAsk("In your Setup/Downloads folder you already have: " + itemName + "\n" - + downloaded.getAbsolutePath() - + "\nClick YES, if you want to use this for setup processing\n\n" - + "... or click NO, to download a fresh copy")) { - try { - FileManager.xcopy(downloaded.getAbsolutePath(), jar, null); - } catch (IOException ex) { - terminate("Unable to copy from local Downloads: " - + downloaded.getAbsolutePath() + "\n" + ex.getMessage()); - } - log(lvl, "Copied form local Download: " + item); - return true; - } - } - JFrame progress = new MultiFrame("download"); - String fname = FileManager.downloadURL(sDir + item, tDir, progress); - progress.dispose(); - if (null == fname) { - log1(-1, "Fatal error 001: not able to download: %s", item); - return false; - } - if (!(new File(tDir, item)).renameTo(new File(jar))) { - log1(-1, "rename to %s did not work", jar); - return false; - } - return true; + if (popAsk("In your Setup/Downloads folder you already have: " + itemName + "\n" + + downloaded.getAbsolutePath() + + "\nClick YES, if you want to use this for setup processing\n\n" + + "... or click NO, to download a fresh copy")) { + shouldDownload = false; + } + } + if (shouldDownload) { + JFrame progress = new MultiFrame("download"); + String fname = FileManager.downloadURL(sDir + item, tDir, progress); + progress.dispose(); + if (null == fname) { + log1(-1, "Fatal error 001: not able to download: %s", item); + return false; + } + } + try { + FileManager.xcopy(downloaded.getAbsolutePath(), jar, null); + } catch (IOException ex) { + terminate("Unable to copy from local Downloads: " + + downloaded.getAbsolutePath() + "\n" + ex.getMessage()); + } + log(lvl, "Copied form local Download: " + item); + return true; } private static void userTerminated(String msg) { @@ -1539,10 +1571,14 @@ public class RunSetup { } private static void terminate(String msg) { - log1(-1, msg); - log1(-1, "... terminated abnormally :-("); - popError("Something serious happened! Sikuli not useable!\n" - + "Check the error log at " + logfile); - System.exit(1); + if (msg.isEmpty()) { + restore(); + } else { + log1(-1, msg); + log1(-1, "... terminated abnormally :-("); + popError("Something serious happened! Sikuli not useable!\n" + + "Check the error log at " + logfile); + } + System.exit(0); } } -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-java/sikuli.git _______________________________________________ pkg-java-commits mailing list [email protected] http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-java-commits

