init: delete cache if not empty
As the the cache may be stale during update, offer the option to delete it during init. The default is set to not delete the cache, so batch usage should be safe. Change-Id: I51cc6d8aeeed52d2e47aaea97cba625ee0d506fc
This commit is contained in:
parent
ca40aad0b9
commit
61b8c842bd
@ -15,6 +15,7 @@
|
||||
package com.google.gerrit.pgm.init;
|
||||
|
||||
import com.google.gerrit.common.FileUtil;
|
||||
import com.google.gerrit.pgm.init.api.ConsoleUI;
|
||||
import com.google.gerrit.pgm.init.api.InitStep;
|
||||
import com.google.gerrit.pgm.init.api.Section;
|
||||
import com.google.gerrit.server.config.SitePaths;
|
||||
@ -22,21 +23,30 @@ import com.google.inject.Inject;
|
||||
import com.google.inject.Singleton;
|
||||
|
||||
import java.nio.file.Path;
|
||||
import java.io.IOException;
|
||||
import java.nio.file.DirectoryStream;
|
||||
import java.nio.file.Files;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/** Initialize the {@code cache} configuration section. */
|
||||
@Singleton
|
||||
class InitCache implements InitStep {
|
||||
private final ConsoleUI ui;
|
||||
private final SitePaths site;
|
||||
private final Section cache;
|
||||
|
||||
@Inject
|
||||
InitCache(final SitePaths site, final Section.Factory sections) {
|
||||
InitCache(final ConsoleUI ui, final SitePaths site,
|
||||
final Section.Factory sections) {
|
||||
this.ui = ui;
|
||||
this.site = site;
|
||||
this.cache = sections.get("cache", null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
ui.header("Cache");
|
||||
String path = cache.get("directory");
|
||||
|
||||
if (path != null && path.isEmpty()) {
|
||||
@ -53,6 +63,27 @@ class InitCache implements InitStep {
|
||||
|
||||
Path loc = site.resolve(path);
|
||||
FileUtil.mkdirsOrDie(loc, "cannot create cache.directory");
|
||||
List<Path> cacheFiles = new ArrayList<>();
|
||||
try (DirectoryStream<Path> stream =
|
||||
Files.newDirectoryStream(loc, "*.{lock,h2,trace}.db")) {
|
||||
for (Path entry : stream) {
|
||||
cacheFiles.add(entry);
|
||||
}
|
||||
} catch (IOException e) {
|
||||
ui.message("IO error during cache directory scan");
|
||||
return;
|
||||
}
|
||||
if (!cacheFiles.isEmpty()) {
|
||||
for (Path entry : cacheFiles) {
|
||||
if (ui.yesno(false, "Delete cache file %s", entry)) {
|
||||
try {
|
||||
Files.deleteIfExists(entry);
|
||||
} catch (IOException e) {
|
||||
ui.message("Could not delete " + entry);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
Loading…
Reference in New Issue
Block a user