in src/main/java/com/googlesource/gerrit/plugins/lfs/LfsApiServlet.java [77:124]
protected LargeFileRepository getLargeFileRepository(LfsRequest request, String path, String auth)
throws LfsException {
String pathInfo = path.startsWith("/") ? path : "/" + path;
Matcher matcher = URL_PATTERN.matcher(pathInfo);
if (!matcher.matches()) {
throw new LfsException("no repository at " + pathInfo);
}
String projName = matcher.group(1);
Project.NameKey project = Project.nameKey(ProjectUtil.stripGitSuffix(projName));
Optional<ProjectState> state = projectCache.get(project);
if (!state.isPresent() || state.get().getProject().getState() == HIDDEN) {
throw new LfsRepositoryNotFound(project.get());
}
authorizeUser(
userProvider.getUser(auth, projName, request.getOperation()), state.get(), request);
if (request.isUpload() && state.get().getProject().getState() == READ_ONLY) {
throw new LfsRepositoryReadOnly(project.get());
}
LfsProjectConfigSection config = lfsConfigFactory.getProjectsConfig().getForProject(project);
// Only accept requests for projects where LFS is enabled.
// No config means we default to "not enabled".
if (config != null && config.isEnabled()) {
// For uploads, check object sizes against limit if configured
if (request.isUpload()) {
if (config.isReadOnly()) {
throw new LfsRepositoryReadOnly(project.get());
}
long maxObjectSize = config.getMaxObjectSize();
if (maxObjectSize > 0) {
for (LfsObject object : request.getObjects()) {
if (object.getSize() > maxObjectSize) {
throw new LfsValidationError(
String.format(
"size of object %s (%d bytes) exceeds limit (%d bytes)",
object.getOid(), object.getSize(), maxObjectSize));
}
}
}
}
return repoResolver.get(project, config.getBackend());
}
throw new LfsUnavailable(project.get());
}