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:
parent
13fb707580
commit
89cefced8d
@ -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
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user