init: Don't abort on empty directory

The following sequence should work:

  mkdir testgit
  java -jar gerrit.war init -d testgit

Since testgit is empty, it should be acceptable for us to populate the
directory with our files.

Bug: issue 358
Change-Id: Ia85f31802066f8d39b042d3d057d33950a5035fd
Signed-off-by: Shawn O. Pearce <sop@google.com>
This commit is contained in:
Shawn O. Pearce
2009-12-15 08:32:01 -08:00
parent 4691f2f6cf
commit ca7c302929

View File

@@ -87,6 +87,7 @@ public class Init extends SiteProgram {
@Inject
private SchemaFactory<ReviewDb> schema;
private boolean isNew;
private boolean deleteOnFailure;
private ConsoleUI ui;
private Injector dbInjector;
@@ -113,7 +114,18 @@ public class Init extends SiteProgram {
ui = ConsoleUI.getInstance(batchMode);
initPathLocations();
final boolean isNew = !site_path.exists();
if (site_path.exists()) {
final String[] contents = site_path.list();
if (contents != null)
isNew = contents.length == 0;
else if (site_path.isDirectory())
throw die("Cannot access " + site_path);
else
throw die("Not a directory: " + site_path);
} else {
isNew = true;
}
try {
upgradeFrom2_0();
@@ -188,9 +200,7 @@ public class Init extends SiteProgram {
throw die("aborted by user");
}
if (!etc_dir.exists() && !etc_dir.mkdirs()) {
throw die("Cannot create directory " + etc_dir);
}
mkdir(etc_dir);
for (String name : etcFiles) {
final File src = new File(site_path, name);
final File dst = new File(etc_dir, name);
@@ -210,24 +220,21 @@ public class Init extends SiteProgram {
ConfigInvalidException {
ui.header("Gerrit Code Review %s", version());
if (!gerrit_config.exists()) {
if (isNew) {
if (!ui.yesno(true, "Create '%s'", site_path.getCanonicalPath())) {
throw die("aborted by user");
}
if (!site_path.mkdirs()) {
if (!site_path.isDirectory() && !site_path.mkdirs()) {
throw die("Cannot make directory " + site_path);
}
if (!etc_dir.mkdir()) {
throw die("Cannot make directory " + etc_dir);
}
deleteOnFailure = true;
}
bin_dir.mkdir();
etc_dir.mkdir();
lib_dir.mkdir();
logs_dir.mkdir();
static_dir.mkdir();
mkdir(bin_dir);
mkdir(etc_dir);
mkdir(lib_dir);
mkdir(logs_dir);
mkdir(static_dir);
cfg.load();
sec.load();
@@ -338,6 +345,12 @@ public class Init extends SiteProgram {
}
}
private static void mkdir(final File path) {
if (!path.isDirectory() && !path.mkdir()) {
throw die("Cannot make directory " + path);
}
}
private static void chmod(final int mode, final File path) throws IOException {
if (!path.exists() && !path.createNewFile()) {
throw new IOException("Cannot create " + path);