summaryrefslogtreecommitdiffstats
path: root/gerrit-pgm/src/main/java/com/google/gerrit/pgm/init/LibraryDownloader.java
diff options
context:
space:
mode:
Diffstat (limited to 'gerrit-pgm/src/main/java/com/google/gerrit/pgm/init/LibraryDownloader.java')
-rw-r--r--gerrit-pgm/src/main/java/com/google/gerrit/pgm/init/LibraryDownloader.java38
1 files changed, 33 insertions, 5 deletions
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..bf358f4751 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,8 +14,10 @@
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.pgm.util.IoUtil;
import com.google.gerrit.server.config.SitePaths;
import com.google.inject.Inject;
@@ -26,6 +28,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;
@@ -40,20 +43,18 @@ import java.security.NoSuchAlgorithmException;
class LibraryDownloader {
private final ConsoleUI ui;
private final File lib_dir;
- private final ReloadSiteLibrary reload;
private boolean required;
private String name;
private String jarUrl;
private String sha1;
+ private String remove;
private File dst;
@Inject
- LibraryDownloader(final ReloadSiteLibrary reload, final ConsoleUI ui,
- final SitePaths site) {
+ LibraryDownloader(ConsoleUI ui, SitePaths site) {
this.ui = ui;
this.lib_dir = site.lib_dir;
- this.reload = reload;
}
void setName(final String name) {
@@ -68,6 +69,10 @@ class LibraryDownloader {
this.sha1 = sha1;
}
+ void setRemove(String remove) {
+ this.remove = remove;
+ }
+
void downloadRequired() {
this.required = true;
download();
@@ -123,6 +128,7 @@ class LibraryDownloader {
}
try {
+ removeStaleVersions();
doGetByHttp();
verifyFileChecksum();
} catch (IOException err) {
@@ -155,7 +161,29 @@ class LibraryDownloader {
}
}
- reload.reload();
+ if (dst.exists()) {
+ IoUtil.loadJARs(dst);
+ }
+ }
+
+ 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 {