From 8d414da1d93294923b529cb8485e7b1cb2f2c20e Mon Sep 17 00:00:00 2001 From: Shawn Pearce Date: Thu, 25 Apr 2013 13:00:44 -0700 Subject: [PATCH] Remove old library JARs when upgrading When upgrading the MySQL connector library make sure the old JAR is removed from future classpaths before the new JAR is downloaded. Bug: issue 1870 Change-Id: I2e5aff5baac0e81fb5aa2131adcba1f7b5e53972 --- .../com/google/gerrit/pgm/init/Libraries.java | 1 + .../gerrit/pgm/init/LibraryDownloader.java | 28 +++++++++++++++++++ .../com/google/gerrit/pgm/libraries.config | 2 ++ 3 files changed, 31 insertions(+) diff --git a/gerrit-pgm/src/main/java/com/google/gerrit/pgm/init/Libraries.java b/gerrit-pgm/src/main/java/com/google/gerrit/pgm/init/Libraries.java index ff1eddfb49..b1fa0c3cb1 100644 --- a/gerrit-pgm/src/main/java/com/google/gerrit/pgm/init/Libraries.java +++ b/gerrit-pgm/src/main/java/com/google/gerrit/pgm/init/Libraries.java @@ -78,6 +78,7 @@ class Libraries { dl.setName(get(cfg, n, "name")); dl.setJarUrl(get(cfg, n, "url")); dl.setSHA1(get(cfg, n, "sha1")); + dl.setRemove(get(cfg, n, "remove")); field.set(this, dl); } diff --git a/gerrit-pgm/src/main/java/com/google/gerrit/pgm/init/LibraryDownloader.java b/gerrit-pgm/src/main/java/com/google/gerrit/pgm/init/LibraryDownloader.java index ea1b515fb3..9ef7e4f698 100644 --- a/gerrit-pgm/src/main/java/com/google/gerrit/pgm/init/LibraryDownloader.java +++ b/gerrit-pgm/src/main/java/com/google/gerrit/pgm/init/LibraryDownloader.java @@ -14,6 +14,7 @@ package com.google.gerrit.pgm.init; +import com.google.common.base.Strings; import com.google.gerrit.pgm.util.ConsoleUI; import com.google.gerrit.pgm.util.Die; import com.google.gerrit.server.config.SitePaths; @@ -26,6 +27,7 @@ import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; +import java.io.FilenameFilter; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; @@ -46,6 +48,7 @@ class LibraryDownloader { private String name; private String jarUrl; private String sha1; + private String remove; private File dst; @Inject @@ -68,6 +71,10 @@ class LibraryDownloader { this.sha1 = sha1; } + void setRemove(String remove) { + this.remove = remove; + } + void downloadRequired() { this.required = true; download(); @@ -123,6 +130,7 @@ class LibraryDownloader { } try { + removeStaleVersions(); doGetByHttp(); verifyFileChecksum(); } catch (IOException err) { @@ -158,6 +166,26 @@ class LibraryDownloader { reload.reload(); } + private void removeStaleVersions() { + if (!Strings.isNullOrEmpty(remove)) { + String[] names = lib_dir.list(new FilenameFilter() { + @Override + public boolean accept(File dir, String name) { + return name.matches("^" + remove + "$"); + } + }); + if (names != null) { + for (String old : names) { + String bak = "." + old + ".backup"; + ui.message("Renaming %s to %s", old, bak); + if (!new File(lib_dir, old).renameTo(new File(lib_dir, bak))) { + throw new Die("cannot rename " + old); + } + } + } + } + } + private void doGetByHttp() throws IOException { System.err.print("Downloading " + jarUrl + " ..."); System.err.flush(); diff --git a/gerrit-pgm/src/main/resources/com/google/gerrit/pgm/libraries.config b/gerrit-pgm/src/main/resources/com/google/gerrit/pgm/libraries.config index f4c58084cb..f1ecadda36 100644 --- a/gerrit-pgm/src/main/resources/com/google/gerrit/pgm/libraries.config +++ b/gerrit-pgm/src/main/resources/com/google/gerrit/pgm/libraries.config @@ -17,8 +17,10 @@ name = Bouncy Castle Crypto v144 url = http://www.bouncycastle.org/download/bcprov-jdk16-144.jar sha1 = 6327a5f7a3dc45e0fd735adb5d08c5a74c05c20c + remove = bcprov-.*[.]jar [library "mysqlDriver"] name = MySQL Connector/J 5.1.21 url = http://repo2.maven.org/maven2/mysql/mysql-connector-java/5.1.21/mysql-connector-java-5.1.21.jar sha1 = 7abbd19fc2e2d5b92c0895af8520f7fa30266be9 + remove = mysql-connector-java-.*[.]jar