summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaladox none <thomasmulhall410@yahoo.com>2019-03-09 01:50:41 +0000
committerDavid Pursehouse <dpursehouse@collab.net>2019-03-09 15:24:06 +0900
commit09e31071c759c9f281e524bbf088f8cac26a8486 (patch)
treea5b472e8e5668cfcfd12ff0b40e15f0ec1153a38
parent5d72078537c18d916945b45f08882c25cdb5d8c8 (diff)
Strip trailing slash at the end when creating repos
Bug: Issue 7192 Change-Id: I1106899b8afb52f1cf04e46b87b6658f4664af09
-rw-r--r--java/com/google/gerrit/common/ProjectUtil.java17
-rw-r--r--java/com/google/gerrit/server/restapi/project/CreateProject.java2
-rw-r--r--java/com/google/gerrit/server/restapi/project/ProjectsCollection.java6
-rw-r--r--javatests/com/google/gerrit/acceptance/rest/project/CreateProjectIT.java22
-rw-r--r--javatests/com/google/gerrit/acceptance/ssh/CreateProjectIT.java34
5 files changed, 73 insertions, 8 deletions
diff --git a/java/com/google/gerrit/common/ProjectUtil.java b/java/com/google/gerrit/common/ProjectUtil.java
index bfd5ef9294..e9d37818b9 100644
--- a/java/com/google/gerrit/common/ProjectUtil.java
+++ b/java/com/google/gerrit/common/ProjectUtil.java
@@ -15,15 +15,26 @@
package com.google.gerrit.common;
public class ProjectUtil {
+ public static String sanitizeProjectName(String name) {
+ name = stripGitSuffix(name);
+ name = stripTrailingSlash(name);
+ return name;
+ }
+
public static String stripGitSuffix(String name) {
if (name.endsWith(".git")) {
// Be nice and drop the trailing ".git" suffix, which we never keep
// in our database, but clients might mistakenly provide anyway.
//
name = name.substring(0, name.length() - 4);
- while (name.endsWith("/")) {
- name = name.substring(0, name.length() - 1);
- }
+ name = stripTrailingSlash(name);
+ }
+ return name;
+ }
+
+ private static String stripTrailingSlash(String name) {
+ while (name.endsWith("/")) {
+ name = name.substring(0, name.length() - 1);
}
return name;
}
diff --git a/java/com/google/gerrit/server/restapi/project/CreateProject.java b/java/com/google/gerrit/server/restapi/project/CreateProject.java
index 56203702c3..b92fba8fe4 100644
--- a/java/com/google/gerrit/server/restapi/project/CreateProject.java
+++ b/java/com/google/gerrit/server/restapi/project/CreateProject.java
@@ -168,7 +168,7 @@ public class CreateProject
}
CreateProjectArgs args = new CreateProjectArgs();
- args.setProjectName(ProjectUtil.stripGitSuffix(name));
+ args.setProjectName(ProjectUtil.sanitizeProjectName(name));
String parentName =
MoreObjects.firstNonNull(Strings.emptyToNull(input.parent), allProjects.get());
diff --git a/java/com/google/gerrit/server/restapi/project/ProjectsCollection.java b/java/com/google/gerrit/server/restapi/project/ProjectsCollection.java
index 6abf102d65..ed317aadc9 100644
--- a/java/com/google/gerrit/server/restapi/project/ProjectsCollection.java
+++ b/java/com/google/gerrit/server/restapi/project/ProjectsCollection.java
@@ -17,6 +17,7 @@ package com.google.gerrit.server.restapi.project;
import com.google.common.collect.ListMultimap;
import com.google.common.flogger.FluentLogger;
import com.google.gerrit.common.Nullable;
+import com.google.gerrit.common.ProjectUtil;
import com.google.gerrit.extensions.registration.DynamicMap;
import com.google.gerrit.extensions.restapi.AuthException;
import com.google.gerrit.extensions.restapi.BadRequestException;
@@ -42,7 +43,6 @@ import com.google.inject.Inject;
import com.google.inject.Provider;
import com.google.inject.Singleton;
import java.io.IOException;
-import org.eclipse.jgit.lib.Constants;
@Singleton
public class ProjectsCollection
@@ -136,9 +136,7 @@ public class ProjectsCollection
@Nullable
private ProjectResource _parse(String id, boolean checkAccess)
throws IOException, PermissionBackendException, ResourceConflictException {
- if (id.endsWith(Constants.DOT_GIT_EXT)) {
- id = id.substring(0, id.length() - Constants.DOT_GIT_EXT.length());
- }
+ id = ProjectUtil.sanitizeProjectName(id);
Project.NameKey nameKey = new Project.NameKey(id);
ProjectState state = projectCache.checkedGet(nameKey);
diff --git a/javatests/com/google/gerrit/acceptance/rest/project/CreateProjectIT.java b/javatests/com/google/gerrit/acceptance/rest/project/CreateProjectIT.java
index 023c5407f6..97558c4a3a 100644
--- a/javatests/com/google/gerrit/acceptance/rest/project/CreateProjectIT.java
+++ b/javatests/com/google/gerrit/acceptance/rest/project/CreateProjectIT.java
@@ -178,6 +178,28 @@ public class CreateProjectIT extends AbstractDaemonTest {
}
@Test
+ public void createProjectThatEndsWithSlash() throws Exception {
+ String newProjectName = name("newProject");
+ ProjectInfo p = gApi.projects().create(newProjectName + "/").get();
+ assertThat(p.name).isEqualTo(newProjectName);
+ ProjectState projectState = projectCache.get(new Project.NameKey(newProjectName));
+ assertThat(projectState).isNotNull();
+ assertProjectInfo(projectState.getProject(), p);
+ assertHead(newProjectName, "refs/heads/master");
+ }
+
+ @Test
+ public void createProjectThatContainsSlash() throws Exception {
+ String newProjectName = name("newProject/newProject");
+ ProjectInfo p = gApi.projects().create(newProjectName).get();
+ assertThat(p.name).isEqualTo(newProjectName);
+ ProjectState projectState = projectCache.get(new Project.NameKey(newProjectName));
+ assertThat(projectState).isNotNull();
+ assertProjectInfo(projectState.getProject(), p);
+ assertHead(newProjectName, "refs/heads/master");
+ }
+
+ @Test
public void createProjectWithProperties() throws Exception {
String newProjectName = name("newProject");
ProjectInput in = new ProjectInput();
diff --git a/javatests/com/google/gerrit/acceptance/ssh/CreateProjectIT.java b/javatests/com/google/gerrit/acceptance/ssh/CreateProjectIT.java
index e58317989d..0ce05b0d01 100644
--- a/javatests/com/google/gerrit/acceptance/ssh/CreateProjectIT.java
+++ b/javatests/com/google/gerrit/acceptance/ssh/CreateProjectIT.java
@@ -49,4 +49,38 @@ public class CreateProjectIT extends AbstractDaemonTest {
ProjectState projectState = projectCache.get(new Project.NameKey(newProjectName));
assertThat(projectState).isNull();
}
+
+ @Test
+ public void withDotGit() throws Exception {
+ String newGroupName = "newGroup";
+ adminRestSession.put("/groups/" + newGroupName);
+ String newProjectName = name("newProject");
+ adminSshSession.exec(
+ "gerrit create-project --branch master --owner "
+ + newGroupName
+ + " "
+ + newProjectName
+ + ".git");
+ adminSshSession.assertSuccess();
+ ProjectState projectState = projectCache.get(new Project.NameKey(newProjectName));
+ assertThat(projectState).isNotNull();
+ assertThat(projectState.getName()).isEqualTo(newProjectName);
+ }
+
+ @Test
+ public void withTrailingSlash() throws Exception {
+ String newGroupName = "newGroup";
+ adminRestSession.put("/groups/" + newGroupName);
+ String newProjectName = name("newProject");
+ adminSshSession.exec(
+ "gerrit create-project --branch master --owner "
+ + newGroupName
+ + " "
+ + newProjectName
+ + "/");
+ adminSshSession.assertSuccess();
+ ProjectState projectState = projectCache.get(new Project.NameKey(newProjectName));
+ assertThat(projectState).isNotNull();
+ assertThat(projectState.getName()).isEqualTo(newProjectName);
+ }
}