Merge "Remove old library JARs when upgrading" into stable-2.6

This commit is contained in:
Shawn Pearce
2013-04-26 14:50:01 +00:00
committed by Gerrit Code Review
3 changed files with 31 additions and 0 deletions

View File

@@ -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);
}

View File

@@ -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();