diff options
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.java | 38 |
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 { |