diff --git a/apps/routerconsole/java/src/net/i2p/router/update/PluginUpdateChecker.java b/apps/routerconsole/java/src/net/i2p/router/update/PluginUpdateChecker.java index a9625feb9..4c2da620f 100644 --- a/apps/routerconsole/java/src/net/i2p/router/update/PluginUpdateChecker.java +++ b/apps/routerconsole/java/src/net/i2p/router/update/PluginUpdateChecker.java @@ -30,14 +30,12 @@ import net.i2p.util.VersionComparator; * @since 0.7.12 */ class PluginUpdateChecker extends UpdateRunner { - private final ByteArrayOutputStream _baos; private final String _appName; private final String _oldVersion; public PluginUpdateChecker(RouterContext ctx, ConsoleUpdateManager mgr, List uris, String appName, String oldVersion ) { - super(ctx, mgr, uris); - _baos = new ByteArrayOutputStream(TrustedUpdate.HEADER_BYTES); + super(ctx, mgr, uris, oldVersion); if (!uris.isEmpty()) _currentURI = uris.get(0); _appName = appName; @@ -85,7 +83,10 @@ class PluginUpdateChecker extends UpdateRunner { } @Override - public void transferComplete(long alreadyTransferred, long bytesTransferred, long bytesRemaining, String url, String outputFile, boolean notModified) { + public void transferComplete(long alreadyTransferred, long bytesTransferred, long bytesRemaining, + String url, String outputFile, boolean notModified) { + super.transferComplete(alreadyTransferred, bytesTransferred, bytesRemaining, + url, outputFile, notModified); // super sets _newVersion if newer boolean newer = _newVersion != null; if (newer) { diff --git a/apps/routerconsole/java/src/net/i2p/router/update/PluginUpdateRunner.java b/apps/routerconsole/java/src/net/i2p/router/update/PluginUpdateRunner.java index 1f3f7fde4..6439903da 100644 --- a/apps/routerconsole/java/src/net/i2p/router/update/PluginUpdateRunner.java +++ b/apps/routerconsole/java/src/net/i2p/router/update/PluginUpdateRunner.java @@ -21,6 +21,7 @@ import net.i2p.update.*; import net.i2p.util.EepGet; import net.i2p.util.FileUtil; import net.i2p.util.I2PAppThread; +import net.i2p.util.Log; import net.i2p.util.OrderedProperties; import net.i2p.util.SecureDirectory; import net.i2p.util.SecureFile; @@ -147,7 +148,7 @@ class PluginUpdateRunner extends UpdateRunner { return; } File tempDir = new File(_context.getTempDir(), "tmp" + _context.random().nextInt() + "-unzip"); - if (!FileUtil.extractZip(to, tempDir)) { + if (!FileUtil.extractZip(to, tempDir, Log.ERROR)) { f.delete(); to.delete(); FileUtil.rmdir(tempDir, false); @@ -374,7 +375,7 @@ class PluginUpdateRunner extends UpdateRunner { } // Finally, extract the zip to the plugin directory - if (!FileUtil.extractZip(to, destDir)) { + if (!FileUtil.extractZip(to, destDir, Log.WARN)) { to.delete(); statusDone("" + _("Failed to install plugin in {0}", destDir.getAbsolutePath()) + ""); return; diff --git a/apps/routerconsole/java/src/net/i2p/router/update/UpdateRunner.java b/apps/routerconsole/java/src/net/i2p/router/update/UpdateRunner.java index 937f235fe..a9fc6d3c6 100644 --- a/apps/routerconsole/java/src/net/i2p/router/update/UpdateRunner.java +++ b/apps/routerconsole/java/src/net/i2p/router/update/UpdateRunner.java @@ -39,9 +39,10 @@ class UpdateRunner extends I2PAppThread implements UpdateTask, EepGet.StatusList protected boolean _isPartial; /** set by the listeners on completion */ protected String _newVersion; - // 56 byte header, only used for suds - private final ByteArrayOutputStream _baos; + /** 56 byte header, only used for suds */ + protected final ByteArrayOutputStream _baos; protected URI _currentURI; + private final String _currentVersion; private static final String SIGNED_UPDATE_FILE = "i2pupdate.sud"; @@ -49,7 +50,18 @@ class UpdateRunner extends I2PAppThread implements UpdateTask, EepGet.StatusList protected static final long INACTIVITY_TIMEOUT = 5*60*1000; protected static final long NOPROXY_INACTIVITY_TIMEOUT = 60*1000; + /** + * Uses router version for partial checks + */ public UpdateRunner(RouterContext ctx, ConsoleUpdateManager mgr, List uris) { + this(ctx, mgr, uris, RouterVersion.VERSION); + } + + /** + * @param currentVersion used for partial checks + * @since 0.9.7 + */ + public UpdateRunner(RouterContext ctx, ConsoleUpdateManager mgr, List uris, String currentVersion) { super("Update Runner"); setDaemon(true); _context = ctx; @@ -58,6 +70,7 @@ class UpdateRunner extends I2PAppThread implements UpdateTask, EepGet.StatusList _urls = uris; _baos = new ByteArrayOutputStream(TrustedUpdate.HEADER_BYTES); _updateFile = (new File(ctx.getTempDir(), "update" + ctx.random().nextInt() + ".tmp")).getAbsolutePath(); + _currentVersion = currentVersion; } //////// begin UpdateTask methods @@ -184,7 +197,7 @@ class UpdateRunner extends I2PAppThread implements UpdateTask, EepGet.StatusList if (_isPartial) { // Compare version with what we have now String newVersion = TrustedUpdate.getVersionString(new ByteArrayInputStream(_baos.toByteArray())); - boolean newer = VersionComparator.comp(newVersion, RouterVersion.VERSION) > 0; + boolean newer = VersionComparator.comp(newVersion, _currentVersion) > 0; if (newer) { _newVersion = newVersion; } else { diff --git a/core/java/src/net/i2p/util/FileUtil.java b/core/java/src/net/i2p/util/FileUtil.java index c29422c10..2a7180547 100644 --- a/core/java/src/net/i2p/util/FileUtil.java +++ b/core/java/src/net/i2p/util/FileUtil.java @@ -89,8 +89,19 @@ public class FileUtil { /** * As of release 0.7.12, any files inside the zip that have a .jar.pack or .war.pack suffix * are transparently unpacked to a .jar or .war file using unpack200. + * Logs at WARN level to wrapper.log */ public static boolean extractZip(File zipfile, File targetDir) { + return extractZip(zipfile, targetDir, Log.WARN); + } + + /** + * @param logLevel Log.WARN, etc. + * @return true if it was copied successfully + * @since 0.9.7 + */ + public static boolean extractZip(File zipfile, File targetDir, int logLevel) { + int files = 0; ZipFile zip = null; try { byte buf[] = new byte[16*1024]; @@ -107,7 +118,8 @@ public class FileUtil { if ( (parent != null) && (!parent.exists()) ) { boolean parentsOk = parent.mkdirs(); if (!parentsOk) { - System.err.println("ERROR: Unable to create the parent dir for " + entry.getName() + ": [" + parent.getAbsolutePath() + "]"); + if (logLevel <= Log.ERROR) + System.err.println("ERROR: Unable to create the parent dir for " + entry.getName() + ": [" + parent.getAbsolutePath() + "]"); return false; } } @@ -115,9 +127,10 @@ public class FileUtil { if (!target.exists()) { boolean created = target.mkdirs(); if (!created) { - System.err.println("ERROR: Unable to create the directory [" + entry.getName() + "]"); + if (logLevel <= Log.ERROR) + System.err.println("ERROR: Unable to create the directory [" + entry.getName() + "]"); return false; - } else { + } else if (logLevel <= Log.INFO) { System.err.println("INFO: Creating directory [" + entry.getName() + "]"); } } @@ -131,28 +144,35 @@ public class FileUtil { target = new File(targetDir, entry.getName().substring(0, entry.getName().length() - ".pack".length())); jos = new JarOutputStream(new FileOutputStream(target)); unpack(in, jos); - System.err.println("INFO: File [" + entry.getName() + "] extracted and unpacked"); + if (logLevel <= Log.INFO) + System.err.println("INFO: File [" + entry.getName() + "] extracted and unpacked"); } else { fos = new FileOutputStream(target); int read = 0; while ( (read = in.read(buf)) != -1) { fos.write(buf, 0, read); } - System.err.println("INFO: File [" + entry.getName() + "] extracted"); + if (logLevel <= Log.INFO) + System.err.println("INFO: File [" + entry.getName() + "] extracted"); } + files++; } catch (IOException ioe) { - System.err.println("ERROR: Error extracting the zip entry (" + entry.getName() + ')'); - if (ioe.getMessage() != null && ioe.getMessage().indexOf("CAFED00D") >= 0) - System.err.println("This may be caused by a packed library that requires Java 1.6, your Java version is: " + - System.getProperty("java.version")); - ioe.printStackTrace(); + if (logLevel <= Log.ERROR) { + System.err.println("ERROR: Error extracting the zip entry (" + entry.getName() + ')'); + if (ioe.getMessage() != null && ioe.getMessage().indexOf("CAFED00D") >= 0) + System.err.println("This may be caused by a packed library that requires Java 1.6, your Java version is: " + + System.getProperty("java.version")); + ioe.printStackTrace(); + } return false; } catch (Exception e) { // Oracle unpack() should throw an IOE but other problems can happen, e.g: // java.lang.reflect.InvocationTargetException // Caused by: java.util.zip.ZipException: duplicate entry: xxxxx - System.err.println("ERROR: Error extracting the zip entry (" + entry.getName() + ')'); - e.printStackTrace(); + if (logLevel <= Log.ERROR) { + System.err.println("ERROR: Error extracting the zip entry (" + entry.getName() + ')'); + e.printStackTrace(); + } return false; } finally { try { if (in != null) in.close(); } catch (IOException ioe) {} @@ -163,13 +183,17 @@ public class FileUtil { } return true; } catch (IOException ioe) { - System.err.println("ERROR: Unable to extract the zip file"); - ioe.printStackTrace(); + if (logLevel <= Log.ERROR) { + System.err.println("ERROR: Unable to extract the zip file"); + ioe.printStackTrace(); + } return false; } finally { if (zip != null) { try { zip.close(); } catch (IOException ioe) {} } + if (files > 0 && logLevel <= Log.WARN) + System.err.println("INFO: " + files + " files extracted to " + targetDir); } } diff --git a/history.txt b/history.txt index 158b98ad3..639b2046f 100644 --- a/history.txt +++ b/history.txt @@ -1,3 +1,7 @@ +2013-07-03 zzz + * Updater: Fix plugin update checker (ticket #897) + * Utils: Reduce logging in wrapper log when extracting zip files + 2013-06-30 zzz * BuildHandler: Drop build request with bad flags diff --git a/router/java/src/net/i2p/router/RouterVersion.java b/router/java/src/net/i2p/router/RouterVersion.java index affa6f41b..25340f779 100644 --- a/router/java/src/net/i2p/router/RouterVersion.java +++ b/router/java/src/net/i2p/router/RouterVersion.java @@ -18,7 +18,7 @@ public class RouterVersion { /** deprecated */ public final static String ID = "Monotone"; public final static String VERSION = CoreVersion.VERSION; - public final static long BUILD = 14; + public final static long BUILD = 15; /** for example "-test" */ public final static String EXTRA = "-rc";