create-project: Add --permissions-only option
The new --permissions-only option permits creating a project only
for use as a parent of other projects, for permissions inheritance.
This bypasses the creation of an otherwise empty git repository in
the server's repository forest.
Bug: issue 613
Change-Id: I86c53b11597a3d0cddfae01b2195944b458727a1
Signed-off-by: Shawn O. Pearce <sop@google.com>
diff --git a/Documentation/cmd-create-project.txt b/Documentation/cmd-create-project.txt
index 3da01c4..099008d 100644
--- a/Documentation/cmd-create-project.txt
+++ b/Documentation/cmd-create-project.txt
@@ -13,6 +13,7 @@
[--branch <REF>] \
[\--owner <GROUP> ...] \
[\--parent <NAME>] \
+[\--permissions-only] \
[\--description <DESC>] \
[\--submit-type <TYPE>] \
[\--use-contributor-agreements] \
@@ -68,6 +69,11 @@
through. If not specified, the parent is set to the default
project `\-- All Projects \--`.
+\--permissions-only::
+ Create the project only to serve as a parent for other
+ projects. The new project's Git repository will not be
+ initialized, and cannot be cloned.
+
\--description::
Initial description of the project. If not specified,
no description is stored.
diff --git a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/CreateProject.java b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/CreateProject.java
index a237aa8..80f2c1f 100644
--- a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/CreateProject.java
+++ b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/CreateProject.java
@@ -55,6 +55,9 @@
@Option(name = "--parent", aliases = {"-p"}, metaVar = "NAME", usage = "parent project")
private ProjectControl newParent;
+ @Option(name = "--permissions-only", usage = "create project for use only as parent")
+ private boolean permissionsOnly;
+
@Option(name = "--description", aliases = {"-d"}, metaVar = "DESC", usage = "description of project")
private String projectDescription = "";
@@ -104,21 +107,28 @@
try {
validateParameters();
- Repository repo = repoManager.createRepository(projectName);
- try {
- repo.create(true);
+ if (!permissionsOnly) {
+ Repository repo = repoManager.createRepository(projectName);
+ try {
+ repo.create(true);
- RefUpdate u = repo.updateRef(Constants.HEAD);
- u.disableRefLog();
- u.link(branch);
+ RefUpdate u = repo.updateRef(Constants.HEAD);
+ u.disableRefLog();
+ u.link(branch);
- repoManager.setProjectDescription(projectName, projectDescription);
+ repoManager
+ .setProjectDescription(projectName, projectDescription);
- createProject();
+ rq.replicateNewProject(new Project.NameKey(projectName), branch);
+ } finally {
+ repo.close();
+ }
+ }
+ createProject();
+
+ if (!permissionsOnly) {
rq.replicateNewProject(new Project.NameKey(projectName), branch);
- } finally {
- repo.close();
}
} catch (Exception e) {
p.print("Error when trying to create project: " + e.getMessage()