Remove the GitProjectImporter

Since projects are listed by recursively walking the filesystem,
we don't need to import them into the database.

Change-Id: I86613ac34a9c0ac68ba82b70b2c0312f877a8e69
Signed-off-by: Shawn O. Pearce <sop@google.com>
This commit is contained in:
Shawn O. Pearce 2010-12-08 18:30:43 -08:00
parent 13fb707580
commit 89cefced8d
5 changed files with 4 additions and 168 deletions

View File

@ -11,7 +11,6 @@ SYNOPSIS
'java' -jar gerrit.war 'init'
-d <SITE_PATH>
[\--batch]
[\--import-projects]
[\--no-auto-start]
DESCRIPTION
@ -21,7 +20,7 @@ for some basic setup prior to writing default configuration files
into a newly created `$site_path`.
If run an an existing `$site_path`, init will upgrade some resources
as necessary. This can be useful to import newly created projects.
as necessary.
OPTIONS
-------
@ -30,12 +29,6 @@ OPTIONS
configuration defaults are chosen based on the whims of
the Gerrit developers.
\--import-projects::
Recursively search
link:config-gerrit.html#gerrit.basePath[gerrit.basePath]
for any Git repositories not yet registered as a project,
and initializes a new project for them.
\--no-auto-start::
Don't automatically start the daemon after initializing a
newly created site path. This permits the administartor

View File

@ -31,7 +31,6 @@ import com.google.gerrit.pgm.util.SiteProgram;
import com.google.gerrit.reviewdb.ReviewDb;
import com.google.gerrit.server.config.SitePath;
import com.google.gerrit.server.config.SitePaths;
import com.google.gerrit.server.git.GitProjectImporter;
import com.google.gerrit.server.git.GitRepositoryManager;
import com.google.gerrit.server.git.LocalDiskRepositoryManager;
import com.google.gerrit.server.schema.SchemaUpdater;
@ -62,9 +61,6 @@ public class Init extends SiteProgram {
@Option(name = "--batch", usage = "Batch mode; skip interactive prompting")
private boolean batchMode;
@Option(name = "--import-projects", usage = "Import git repositories as projects")
private boolean importProjects;
@Option(name = "--no-auto-start", usage = "Don't automatically start daemon after init")
private boolean noAutoStart;
@ -73,7 +69,6 @@ public class Init extends SiteProgram {
ErrorLogFile.errorOnlyConsole();
final SiteInit init = createSiteInit();
init.flags.importProjects = importProjects;
init.flags.autoStart = !noAutoStart && init.site.isNew;
final SiteRun run;
@ -83,7 +78,6 @@ public class Init extends SiteProgram {
run = createSiteRun(init);
run.upgradeSchema();
run.importGit();
} catch (Exception failure) {
if (init.flags.deleteOnFailure) {
recursiveDelete(getSitePath());
@ -166,7 +160,6 @@ public class Init extends SiteProgram {
final SchemaUpdater schemaUpdater;
final SchemaFactory<ReviewDb> schema;
final GitRepositoryManager repositoryManager;
final GitProjectImporter gitProjectImporter;
final Browser browser;
@Inject
@ -174,14 +167,13 @@ public class Init extends SiteProgram {
final SchemaUpdater schemaUpdater,
final SchemaFactory<ReviewDb> schema,
final GitRepositoryManager repositoryManager,
final GitProjectImporter gitProjectImporter, final Browser browser) {
final Browser browser) {
this.ui = ui;
this.site = site;
this.flags = flags;
this.schemaUpdater = schemaUpdater;
this.schema = schema;
this.repositoryManager = repositoryManager;
this.gitProjectImporter = gitProjectImporter;
this.browser = browser;
}
@ -241,23 +233,6 @@ public class Init extends SiteProgram {
}
}
void importGit() throws OrmException, IOException {
if (flags.importProjects) {
gitProjectImporter.run(new GitProjectImporter.Messages() {
@Override
public void info(String msg) {
System.err.println(msg);
System.err.flush();
}
@Override
public void warning(String msg) {
info(msg);
}
});
}
}
void start() throws Exception {
if (flags.autoStart) {
if (HostPlatform.isWin32()) {
@ -319,7 +294,6 @@ public class Init extends SiteProgram {
bind(InitFlags.class).toInstance(init.flags);
bind(GitRepositoryManager.class).to(LocalDiskRepositoryManager.class);
bind(GitProjectImporter.class);
}
});
return createDbInjector(SINGLE_USER).createChildInjector(modules);

View File

@ -30,9 +30,6 @@ public class InitFlags {
/** Recursively delete the site path if initialization fails. */
public boolean deleteOnFailure;
/** Run the Git project importer after initialization. */
public boolean importProjects;
/** Run the daemon (and open the web UI in a browser) after initialization. */
public boolean autoStart;

View File

@ -25,14 +25,11 @@ import java.io.File;
/** Initialize the GitRepositoryManager configuration section. */
@Singleton
class InitGitManager implements InitStep {
private final InitFlags flags;
private final ConsoleUI ui;
private final Section gerrit;
@Inject
InitGitManager(final InitFlags flags, final ConsoleUI ui,
final Section.Factory sections) {
this.flags = flags;
InitGitManager(final ConsoleUI ui, final Section.Factory sections) {
this.ui = ui;
this.gerrit = sections.get("gerrit");
}
@ -44,11 +41,7 @@ class InitGitManager implements InitStep {
if (d == null) {
throw die("gerrit.basePath is required");
}
if (d.exists()) {
if (!flags.importProjects && d.list() != null && d.list().length > 0) {
flags.importProjects = ui.yesno(true, "Import existing repositories");
}
} else if (!d.mkdirs()) {
if (!d.exists() && !d.mkdirs()) {
throw die("Cannot create " + d);
}
}

View File

@ -1,121 +0,0 @@
// Copyright (C) 2009 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package com.google.gerrit.server.git;
import com.google.gerrit.reviewdb.Project;
import com.google.gerrit.reviewdb.ReviewDb;
import com.google.gerrit.reviewdb.Project.SubmitType;
import com.google.gwtorm.client.OrmException;
import com.google.gwtorm.client.SchemaFactory;
import com.google.inject.Inject;
import org.eclipse.jgit.lib.RepositoryCache.FileKey;
import org.eclipse.jgit.util.FS;
import java.io.File;
import java.io.IOException;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
/** Imports all projects found within the repository manager. */
public class GitProjectImporter {
public interface Messages {
void info(String msg);
void warning(String msg);
}
private final LocalDiskRepositoryManager repositoryManager;
private final SchemaFactory<ReviewDb> schema;
private Messages messages;
@Inject
GitProjectImporter(final LocalDiskRepositoryManager repositoryManager,
final SchemaFactory<ReviewDb> schema) {
this.repositoryManager = repositoryManager;
this.schema = schema;
}
public void run(final Messages msg) throws OrmException, IOException {
messages = msg;
messages.info("Scanning " + repositoryManager.getBasePath());
final ReviewDb db = schema.open();
try {
final HashSet<String> have = new HashSet<String>();
for (Project p : db.projects().all()) {
have.add(p.getName());
}
importProjects(repositoryManager.getBasePath(), "", db, have);
} finally {
db.close();
}
}
private void importProjects(final File dir, final String prefix,
final ReviewDb db, final Set<String> have) throws OrmException,
IOException {
final File[] ls = dir.listFiles();
if (ls == null) {
return;
}
for (File f : ls) {
String name = f.getName();
if (".".equals(name) || "..".equals(name)) {
continue;
}
if (FileKey.isGitRepository(f, FS.DETECTED)) {
if (name.equals(".git")) {
if ("".equals(prefix)) {
// If the git base path is itself a git repository working
// directory, this is a bit nonsensical for Gerrit Code Review.
// Skip the path and do the next one.
messages.warning("Skipping " + f.getAbsolutePath());
continue;
}
name = prefix.substring(0, prefix.length() - 1);
} else if (name.endsWith(".git")) {
name = prefix + name.substring(0, name.length() - 4);
} else {
name = prefix + name;
if (!have.contains(name)) {
messages.warning("Importing non-standard name '" + name + "'");
}
}
if (have.contains(name)) {
continue;
}
final Project.NameKey nameKey = new Project.NameKey(name);
final Project p = new Project(nameKey);
p.setDescription(repositoryManager.getProjectDescription(nameKey));
p.setSubmitType(SubmitType.MERGE_IF_NECESSARY);
p.setUseContributorAgreements(false);
p.setUseSignedOffBy(false);
p.setUseContentMerge(false);
p.setRequireChangeID(false);
db.projects().insert(Collections.singleton(p));
} else if (f.isDirectory()) {
importProjects(f, prefix + f.getName() + "/", db, have);
}
}
}
}