From fb0c5137465276200f3c9c0c57020c3616ee6640 Mon Sep 17 00:00:00 2001 From: "yongsung1.kim" Date: Sun, 3 Nov 2013 17:35:27 +0900 Subject: [PATCH] INST: InstallManager get added options and can be executed itself for upgrading. There are 2 options added such as -distribution, -repository. When package server has a installmanager package which is higher version than current installmanager version, it will be executed itself. InstallManager could not be executed on Windows7 64bit. But now we fixed it. Signed-off-by: yongsung1.kim Change-Id: I5c284fedda80a1e1491ddfe0e2f97df70eb588da --- .../tizen/installmanager/core/InstallManager.java | 5 ++ .../core/InstallManagerConstants.java | 1 + .../lib/win/WindowsSDKPackageFormat.java | 5 +- .../installmanager/ui/page/ViewController.java | 99 ++++++++++++++++++---- os_stubs/windows/InstallManager-64.nsi | 3 +- os_stubs/windows/InstallManager.nsi | 5 +- 6 files changed, 97 insertions(+), 21 deletions(-) diff --git a/InstallManager_java/src/org/tizen/installmanager/core/InstallManager.java b/InstallManager_java/src/org/tizen/installmanager/core/InstallManager.java index 09f925a..6cbf6b0 100644 --- a/InstallManager_java/src/org/tizen/installmanager/core/InstallManager.java +++ b/InstallManager_java/src/org/tizen/installmanager/core/InstallManager.java @@ -118,6 +118,11 @@ public class InstallManager { mConfig.getConfigFile().setRepository(Options.repository); mConfig.saveConfig(); } + + if (Options.distribution != null && !Options.distribution.isEmpty()) { + mConfig.getConfigFile().setDistribution(Options.distribution); + mConfig.saveConfig(); + } if (mConfig.getConfigFile() == null) { Log.log("Loading config file failed"); diff --git a/InstallManager_java/src/org/tizen/installmanager/core/InstallManagerConstants.java b/InstallManager_java/src/org/tizen/installmanager/core/InstallManagerConstants.java index 49cf1f8..ef49aeb 100644 --- a/InstallManager_java/src/org/tizen/installmanager/core/InstallManagerConstants.java +++ b/InstallManager_java/src/org/tizen/installmanager/core/InstallManagerConstants.java @@ -8,6 +8,7 @@ public class InstallManagerConstants { final static public String INSTALLMANAGER_PACKAGE_NAME = "install-manager"; final static public String INSTALLMANAGER_JAR_FILE_NAME = "InstallManager.jar"; final static public String INSTALLMANAGER_BINARY_PREFIX = "inst-manager"; + final static public String INSTALLMANAGERV2_JAR_FILE_NAME ="InstallManagerV2.jar"; final static public String INSTALLMANAGER_EXECUTALBE_FILE_NAME_FOR_LINUX = INSTALLMANAGER_BINARY_PREFIX + ".bin"; final static public String INSTALLMANAGER_EXECUTALBE_FILE_NAME_FOR_WINDOWS = INSTALLMANAGER_BINARY_PREFIX + ".exe"; final static public String INSTALLMANAGER_EXECUTALBE_DIR_NAME_FOR_MAC = INSTALLMANAGER_BINARY_PREFIX + ".app"; diff --git a/InstallManager_java/src/org/tizen/installmanager/lib/win/WindowsSDKPackageFormat.java b/InstallManager_java/src/org/tizen/installmanager/lib/win/WindowsSDKPackageFormat.java index 8dedc42..8efb885 100644 --- a/InstallManager_java/src/org/tizen/installmanager/lib/win/WindowsSDKPackageFormat.java +++ b/InstallManager_java/src/org/tizen/installmanager/lib/win/WindowsSDKPackageFormat.java @@ -36,6 +36,7 @@ import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; import org.tizen.installmanager.core.IMFatalException; +import org.tizen.installmanager.lib.ErrorController; import org.tizen.installmanager.lib.IIMProgressMonitor; import org.tizen.installmanager.lib.Log; import org.tizen.installmanager.lib.SDKPackageFormat; @@ -166,11 +167,11 @@ public class WindowsSDKPackageFormat extends SDKPackageFormat{ if (zipEntry != null) { Log.err("Fail to unpack " + zipEntry.getName()); } - + return ERROR; } catch (Throwable e) { Log.ExceptionLog(e); - throw new IMFatalException(e.getMessage()); + return ERROR; } finally { try { if (zipOutput != null) { diff --git a/InstallManager_java/src/org/tizen/installmanager/ui/page/ViewController.java b/InstallManager_java/src/org/tizen/installmanager/ui/page/ViewController.java index 00b6c79..efe6afb 100644 --- a/InstallManager_java/src/org/tizen/installmanager/ui/page/ViewController.java +++ b/InstallManager_java/src/org/tizen/installmanager/ui/page/ViewController.java @@ -49,6 +49,7 @@ import org.tizen.installmanager.lib.Downloader; import org.tizen.installmanager.lib.ErrorController; import org.tizen.installmanager.lib.IIMProgressMonitor; import org.tizen.installmanager.lib.Log; +import org.tizen.installmanager.lib.Platform; import org.tizen.installmanager.lib.Registry; import org.tizen.installmanager.lib.ErrorController.ErrorCode; import org.tizen.installmanager.lib.SDKPackageFormat; @@ -786,7 +787,7 @@ public class ViewController { public boolean updateInstallManager() { Package pkg = packageManager.getPackageByName(InstallManagerConstants.INSTALLMANAGER_PACKAGE_NAME); - + if (pkg == null) { return false; } @@ -809,9 +810,11 @@ public class ViewController { } if (extractIMPackage(imPackage)) { + Log.log("Success to extract updatable InstallManager."); runNewInstallManager(); return true; } else { + Log.err("Fail to extract updatable InstallManager. Cannot execute it."); return false; } } @@ -823,6 +826,13 @@ public class ViewController { String packagePath = pkg.getFileName(); String installManagerTempPath = PathUtil.get(PathUtil.getTempDir(), PathUtil.getFileName(packagePath)); + File tempInstaller = new File(installManagerTempPath); + + if (tempInstaller.exists()) { + if (!PathUtil.remove(installManagerTempPath)) { + Log.err("Cannot remove installmanager. => " + tempInstaller); + } + } try { long size = downloader.download(pkg.getURL(), installManagerTempPath, null); @@ -869,7 +879,7 @@ public class ViewController { } private boolean isIMBinary(String fileName) { - if (fileName.equals(InstallManagerConstants.INSTALLMANAGER_BINARY_NAME)){ + if (fileName.equals(InstallManagerConstants.INSTALLMANAGERV2_JAR_FILE_NAME)){ return true; } else { return false; @@ -877,21 +887,78 @@ public class ViewController { } private void runNewInstallManager() { - File tempDirFile = new File(PathUtil.get(PathUtil.getTempDir(), "data", "install-manager")); - - for (File childFile : tempDirFile.listFiles()) { - if (isIMBinary(childFile.getName())) { - try { - String cmd = ShellUtil.addInterpreter(childFile.getAbsolutePath()); - ProcessBuilder pb = new ProcessBuilder(ShellUtil.stringToken(cmd)); - pb.directory(tempDirFile); - pb.start(); - - System.exit(0); - } catch (IOException e) { - Log.ExceptionLog(e); - return; + File tempIMJarFile = new File(PathUtil.get( + PathUtil.getTempDir(), "data", "install-manager", + InstallManagerConstants.INSTALLMANAGERV2_JAR_FILE_NAME)); + + if (tempIMJarFile.exists()) { + try { + ArrayList commands = new ArrayList(); + + String javaHome = System.getProperty("java.home"); + File java = null; + if (Platform.isLinux() || Platform.isMacOS()) { + java = new File(PathUtil.get(javaHome, "bin", "java")); + } else if (Platform.isWindows()) { + java = new File(PathUtil.get(javaHome, "bin", "java.exe")); + } + + String forceBitOption = "-d" + System.getProperty("sun.arch.data.model"); + + String jarPath = PathUtil.get(tempIMJarFile.getAbsolutePath()); + if (java.exists()) { + commands.add(java.getAbsolutePath()); + } else { + commands.add("java"); + } + + if (Platform.isMacOS()) { + commands.add("-XstartOnFirstThread"); } + + commands.add(forceBitOption); + commands.add("-jar"); + commands.add(jarPath); + + if (Options.executablePath != null) { + commands.add("-path"); + commands.add(Options.executablePath); + } + + String repo = Config.getInstance().getConfigFile().getRepository(); + if (repo != null & !repo.isEmpty()) { + commands.add("-repository"); + commands.add(repo); + } + + String dist = Config.getInstance().getConfigFile().getDistribution(); + if (repo != null & !repo.isEmpty()) { + commands.add("-distribution"); + commands.add(dist); + } + + String proxyHost = Config.getInstance().getConfigFile().getProxyHost(); + int proxyPort = Config.getInstance().getConfigFile().getProxyPort(); + if (proxyHost != null & !proxyHost.isEmpty()) { + if (proxyPort > 0) { + commands.add("-proxy"); + commands.add(proxyHost + ":" + proxyPort); + } + } + + Config.getInstance().getConfigFile().setInstallManagerVersion(packageManager.getPackageByName("install-manager").getVersion().toString()); + Config.getInstance().getConfigFile().saveConfig(PathUtil.get(tempIMJarFile.getParent(), "installmanager.conf")); + + Log.log("Updatable commands => " + commands); + + ProcessBuilder pb = new ProcessBuilder(commands); + pb.directory(tempIMJarFile.getParentFile()); + pb.start(); + + System.exit(0); + } catch (IOException e) { + Log.ExceptionLog(e); + return; } } } diff --git a/os_stubs/windows/InstallManager-64.nsi b/os_stubs/windows/InstallManager-64.nsi index 6a7ea80..c41c187 100644 --- a/os_stubs/windows/InstallManager-64.nsi +++ b/os_stubs/windows/InstallManager-64.nsi @@ -207,7 +207,8 @@ done: ${EndIf} ${If} $R0 == "" - Exec "javaw -jar $INSTDIR\InstallManager.jar $2" + ExecDos::Exec /NOUNLOAD /ASYNC /DISABLEFSR "java -jar $INSTDIR\InstallManager.jar $2" + pop $4 ${Else} StrCpy $3 "$2 $R0" System::Call 'kernel32::GetStdHandle(i -11)i.r0' ;try to get stdout diff --git a/os_stubs/windows/InstallManager.nsi b/os_stubs/windows/InstallManager.nsi index 4027edf..e416de1 100644 --- a/os_stubs/windows/InstallManager.nsi +++ b/os_stubs/windows/InstallManager.nsi @@ -182,7 +182,7 @@ done: Pop $1 ${If} $1 == "" ; if not java version 1.7, it will check java version using java home. ## Execute java.exe in java home - nsExec::ExecToStack '"$5" /C ""$4\bin\java.exe" "-version""' + nsExec::ExecToStack '"$3" /C ""$5\bin\java.exe" "-version""' Pop $0 Pop $6 @@ -204,7 +204,8 @@ done: ${EndIf} ${If} $R0 == "" - Exec "javaw -jar $INSTDIR\InstallManager.jar $2" + ExecDos::Exec /NOUNLOAD /ASYNC "java.exe -jar $INSTDIR\InstallManager.jar $2" + Pop $4 ${Else} StrCpy $3 "$2 $R0" System::Call 'kernel32::GetStdHandle(i -11)i.r0' ;try to get stdout -- 2.7.4