Merge commit 'a7e928daaf7ba4176b5044797f90b21f420ab2f7'

* commit 'a7e928daaf7ba4176b5044797f90b21f420ab2f7':
  Verify the case of the project name before opening git repository
This commit is contained in:
Shawn O. Pearce
2011-10-27 09:50:53 -07:00
3 changed files with 128 additions and 43 deletions

View File

@@ -29,6 +29,7 @@ import com.google.gerrit.server.git.GitRepositoryManager;
import com.google.gerrit.server.git.MetaDataUpdate;
import com.google.gerrit.server.git.ProjectConfig;
import com.google.gerrit.server.git.ReplicationQueue;
import com.google.gerrit.server.git.RepositoryCaseMismatchException;
import com.google.gerrit.server.project.ProjectCache;
import com.google.gerrit.server.project.ProjectControl;
import com.google.gerrit.sshd.BaseCommand;
@@ -178,18 +179,9 @@ final class CreateProject extends BaseCommand {
repo.close();
}
} catch (IllegalStateException err) {
try {
Repository repo = repoManager.openRepository(nameKey);
try {
if (repo.getObjectDatabase().exists()) {
throw new UnloggedFailure(1, "fatal: project \"" + projectName + "\" exists");
}
} finally {
repo.close();
}
} catch (RepositoryNotFoundException doesNotExist) {
throw new Failure(1, "fatal: Cannot create " + projectName, err);
}
handleRepositoryExistsException(nameKey);
} catch (RepositoryCaseMismatchException err) {
handleRepositoryExistsException(err.getNameOfExistingProject());
} catch (RepositoryNotFoundException badName) {
throw new UnloggedFailure(1, "fatal: " + badName.getMessage());
} catch (Exception err) {
@@ -297,4 +289,21 @@ final class CreateProject extends BaseCommand {
throw new Failure(1, "--branch \"" + branch + "\" is not a valid name");
}
}
private void handleRepositoryExistsException(final Project.NameKey projectName)
throws Failure {
try {
Repository repo = repoManager.openRepository(projectName);
try {
if (repo.getObjectDatabase().exists()) {
throw new UnloggedFailure(1, "fatal: project \"" + projectName
+ "\" exists");
}
} finally {
repo.close();
}
} catch (RepositoryNotFoundException err) {
throw new Failure(1, "fatal: Cannot create " + projectName, err);
}
}
}