From 43c1daf1ebf20ada172b2f77c0dccc4cb884d9d9 Mon Sep 17 00:00:00 2001 From: Roman Shevchenko Date: Tue, 9 Jun 2020 21:29:28 +0200 Subject: [PATCH] [updater] catching all exceptions (IDEA-226297) GitOrigin-RevId: bc2bcd4a650c1dfbd025b288fc0478c8c5d2bdc1 --- updater/src/com/intellij/updater/Runner.java | 79 +++++++++++--------- 1 file changed, 42 insertions(+), 37 deletions(-) diff --git a/updater/src/com/intellij/updater/Runner.java b/updater/src/com/intellij/updater/Runner.java index 600532b5c9c7..dbf5348a0f5e 100644 --- a/updater/src/com/intellij/updater/Runner.java +++ b/updater/src/com/intellij/updater/Runner.java @@ -12,10 +12,7 @@ import java.io.*; import java.net.URI; import java.net.URISyntaxException; import java.net.URL; -import java.nio.file.Files; -import java.nio.file.InvalidPathException; -import java.nio.file.Path; -import java.nio.file.Paths; +import java.nio.file.*; import java.util.*; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; @@ -38,6 +35,42 @@ public class Runner { } public static void main(String[] args) { + initLogger(); + try { + _main(args); + } + catch (Throwable t) { + logger().error("internal error", t); + System.exit(2); + } + } + + private static void initLogger() { + String logDirectory = Utils.findDirectory(1_000_000L); + logPath = new File(logDirectory, "idea_updater.log").getAbsolutePath(); + + FileAppender update = new FileAppender(); + update.setFile(logPath); + update.setLayout(new PatternLayout("%d{dd/MM HH:mm:ss} %-5p %C{1}.%M - %m%n")); + update.setThreshold(Level.ALL); + update.setAppend(true); + update.activateOptions(); + + FileAppender updateError = new FileAppender(); + updateError.setFile(new File(logDirectory, ERROR_LOG_FILE_NAME).getAbsolutePath()); + updateError.setLayout(new PatternLayout("%d{dd/MM HH:mm:ss} %-5p %C{1}.%M - %m%n")); + updateError.setThreshold(Level.ERROR); + updateError.setAppend(false); + updateError.activateOptions(); + + logger = Logger.getLogger("com.intellij.updater"); + logger.addAppender(updateError); + logger.addAppender(update); + logger.setLevel(Level.ALL); + logger.info("--- Updater started ---"); + } + + private static void _main(String[] args) { String jarFile = getArgument(args, "jar"); if (jarFile == null) { jarFile = resolveJarFile(); @@ -51,7 +84,6 @@ public class Runner { String patchFile = args[5]; checkCaseSensitivity(newFolder); - initLogger(); boolean binary = hasArgument(args, "zip_as_binary"); boolean strict = hasArgument(args, "strict"); @@ -94,17 +126,17 @@ public class Runner { else if (args.length >= 2 && ("install".equals(args[0]) || "apply".equals(args[0])) || args.length >= 3 && ("batch-install".equals(args[0]))) { String destPath = args[1]; - checkCaseSensitivity(destPath); - Path destDirectory = null; + Path destDirectory = Paths.get(destPath); try { - destDirectory = Paths.get(destPath).toRealPath(); + destDirectory = destDirectory.toRealPath(); } catch (InvalidPathException | IOException e) { logger().error(e); } - initLogger(); + checkCaseSensitivity(destDirectory.toString()); + logger().info("args: " + Arrays.toString(args)); logger().info("destination: " + destPath + " (" + destDirectory + "), case-sensitive: " + ourCaseSensitiveFs); @@ -121,7 +153,7 @@ public class Runner { boolean backup = !hasArgument(args, "no-backup"); boolean success; - if (destDirectory == null || !Files.isDirectory(destDirectory)) { + if (!Files.isDirectory(destDirectory, LinkOption.NOFOLLOW_LINKS)) { ui.showError("Invalid target directory: " + destPath); success = false; } @@ -172,33 +204,6 @@ public class Runner { return map; } - private static void initLogger() { - if (logger == null) { - String logDirectory = Utils.findDirectory(1_000_000L); - logPath = new File(logDirectory, "idea_updater.log").getAbsolutePath(); - - FileAppender update = new FileAppender(); - update.setFile(logPath); - update.setLayout(new PatternLayout("%d{dd/MM HH:mm:ss} %-5p %C{1}.%M - %m%n")); - update.setThreshold(Level.ALL); - update.setAppend(true); - update.activateOptions(); - - FileAppender updateError = new FileAppender(); - updateError.setFile(new File(logDirectory, ERROR_LOG_FILE_NAME).getAbsolutePath()); - updateError.setLayout(new PatternLayout("%d{dd/MM HH:mm:ss} %-5p %C{1}.%M - %m%n")); - updateError.setThreshold(Level.ERROR); - updateError.setAppend(false); - updateError.activateOptions(); - - logger = Logger.getLogger("com.intellij.updater"); - logger.addAppender(updateError); - logger.addAppender(update); - logger.setLevel(Level.ALL); - logger.info("--- Updater started ---"); - } - } - public static List extractArguments(String[] args, String paramName) { List result = new ArrayList<>(); String prefix = paramName + '=';