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
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 ff1eddf..b1fa0c3 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 @@
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 ea1b515..9ef7e4f 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.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 @@
private String name;
private String jarUrl;
private String sha1;
+ private String remove;
private File dst;
@Inject
@@ -68,6 +71,10 @@
this.sha1 = sha1;
}
+ void setRemove(String remove) {
+ this.remove = remove;
+ }
+
void downloadRequired() {
this.required = true;
download();
@@ -123,6 +130,7 @@
}
try {
+ removeStaleVersions();
doGetByHttp();
verifyFileChecksum();
} catch (IOException err) {
@@ -158,6 +166,26 @@
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 f4c5808..f1ecadd 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