Refactor ProjectConfig constructors to live in a Factory

In the future, we would like to add a few injected dependencies of
ProjectConfig. The fact that we can't use an assisted factory will
hopefully prevent us from adding too many. Regardless, it's reasonable
to group together the few "read" static constructor method into a single
class along with the bare create method.

Change-Id: I391ae8e37086c22c10e7f342d46e08dd2242df71
This commit is contained in:
Dave Borowitz
2018-11-02 14:06:33 -07:00
parent dabc6604eb
commit 0ff5bceaa2
41 changed files with 204 additions and 82 deletions

View File

@@ -253,6 +253,7 @@ public abstract class AbstractDaemonTest {
@Inject protected MetaDataUpdate.Server metaDataUpdateFactory;
@Inject protected PatchSetUtil psUtil;
@Inject protected ProjectCache projectCache;
@Inject protected ProjectConfig.Factory projectConfigFactory;
@Inject protected ProjectResetter.Builder.Factory projectResetter;
@Inject protected Provider<InternalChangeQuery> queryProvider;
@Inject protected PushOneCommit.Factory pushFactory;
@@ -1000,7 +1001,7 @@ public abstract class AbstractDaemonTest {
protected void setUseContributorAgreements(InheritableBoolean value) throws Exception {
try (MetaDataUpdate md = metaDataUpdateFactory.create(project)) {
ProjectConfig config = ProjectConfig.read(md);
ProjectConfig config = projectConfigFactory.read(md);
config.getProject().setBooleanConfig(BooleanProjectConfig.USE_CONTRIBUTOR_AGREEMENTS, value);
config.commit(md);
projectCache.evict(config.getProject());
@@ -1009,7 +1010,7 @@ public abstract class AbstractDaemonTest {
protected void setUseSignedOffBy(InheritableBoolean value) throws Exception {
try (MetaDataUpdate md = metaDataUpdateFactory.create(project)) {
ProjectConfig config = ProjectConfig.read(md);
ProjectConfig config = projectConfigFactory.read(md);
config.getProject().setBooleanConfig(BooleanProjectConfig.USE_SIGNED_OFF_BY, value);
config.commit(md);
projectCache.evict(config.getProject());
@@ -1018,7 +1019,7 @@ public abstract class AbstractDaemonTest {
protected void setRequireChangeId(InheritableBoolean value) throws Exception {
try (MetaDataUpdate md = metaDataUpdateFactory.create(project)) {
ProjectConfig config = ProjectConfig.read(md);
ProjectConfig config = projectConfigFactory.read(md);
config.getProject().setBooleanConfig(BooleanProjectConfig.REQUIRE_CHANGE_ID, value);
config.commit(md);
projectCache.evict(config.getProject());
@@ -1080,7 +1081,7 @@ public abstract class AbstractDaemonTest {
throws RepositoryNotFoundException, IOException, ConfigInvalidException {
try (MetaDataUpdate md = metaDataUpdateFactory.create(project)) {
md.setMessage(String.format("Grant %s on %s", permission, ref));
ProjectConfig config = ProjectConfig.read(md);
ProjectConfig config = projectConfigFactory.read(md);
AccessSection s = config.getAccessSection(ref, true);
Permission p = s.getPermission(permission, true);
PermissionRule rule = Util.newRule(config, groupUUID);
@@ -1104,7 +1105,7 @@ public abstract class AbstractDaemonTest {
String permission = Permission.LABEL + label;
try (MetaDataUpdate md = metaDataUpdateFactory.create(project)) {
md.setMessage(String.format("Grant %s on %s", permission, ref));
ProjectConfig config = ProjectConfig.read(md);
ProjectConfig config = projectConfigFactory.read(md);
AccessSection s = config.getAccessSection(ref, true);
Permission p = s.getPermission(permission, true);
p.setExclusiveGroup(exclusive);
@@ -1122,7 +1123,7 @@ public abstract class AbstractDaemonTest {
throws IOException, ConfigInvalidException {
try (MetaDataUpdate md = metaDataUpdateFactory.create(project)) {
md.setMessage(String.format("Remove %s on %s", permission, ref));
ProjectConfig config = ProjectConfig.read(md);
ProjectConfig config = projectConfigFactory.read(md);
AccessSection s = config.getAccessSection(ref, true);
Permission p = s.getPermission(permission, true);
p.clearRules();
@@ -1672,7 +1673,7 @@ public abstract class AbstractDaemonTest {
private ProjectConfigUpdate(Project.NameKey projectName) throws Exception {
metaDataUpdate = metaDataUpdateFactory.create(projectName);
projectConfig = ProjectConfig.read(metaDataUpdate);
projectConfig = projectConfigFactory.read(metaDataUpdate);
}
public ProjectConfig getConfig() {

View File

@@ -62,6 +62,7 @@ class ChangeProjectAccess extends ProjectAccessHandler<ProjectAccess> {
ProjectAccessFactory.Factory projectAccessFactory,
ProjectCache projectCache,
GroupBackend groupBackend,
ProjectConfig.Factory projectConfigFactory,
MetaDataUpdate.User metaDataUpdateFactory,
AllProjectsName allProjects,
Provider<SetParent> setParent,
@@ -77,6 +78,7 @@ class ChangeProjectAccess extends ProjectAccessHandler<ProjectAccess> {
@Nullable @Assisted String message) {
super(
groupBackend,
projectConfigFactory,
metaDataUpdateFactory,
allProjects,
setParent,

View File

@@ -71,6 +71,7 @@ class ProjectAccessFactory extends Handler<ProjectAccess> {
private final GroupControl.Factory groupControlFactory;
private final MetaDataUpdate.Server metaDataUpdateFactory;
private final AllProjectsName allProjectsName;
private final ProjectConfig.Factory projectConfigFactory;
private final Project.NameKey projectName;
private WebLinks webLinks;
@@ -83,6 +84,7 @@ class ProjectAccessFactory extends Handler<ProjectAccess> {
GroupControl.Factory groupControlFactory,
MetaDataUpdate.Server metaDataUpdateFactory,
AllProjectsName allProjectsName,
ProjectConfig.Factory projectConfigFactory,
WebLinks webLinks,
@Assisted final Project.NameKey name) {
this.groupBackend = groupBackend;
@@ -91,6 +93,7 @@ class ProjectAccessFactory extends Handler<ProjectAccess> {
this.groupControlFactory = groupControlFactory;
this.metaDataUpdateFactory = metaDataUpdateFactory;
this.allProjectsName = allProjectsName;
this.projectConfigFactory = projectConfigFactory;
this.webLinks = webLinks;
this.projectName = name;
@@ -108,7 +111,7 @@ class ProjectAccessFactory extends Handler<ProjectAccess> {
//
ProjectConfig config;
try (MetaDataUpdate md = metaDataUpdateFactory.create(projectName)) {
config = ProjectConfig.read(md);
config = projectConfigFactory.read(md);
if (config.updateGroupNames(groupBackend)) {
md.setMessage("Update group names\n");
config.commit(md);

View File

@@ -31,6 +31,7 @@ import com.google.gerrit.extensions.restapi.ResourceConflictException;
import com.google.gerrit.extensions.restapi.UnprocessableEntityException;
import com.google.gerrit.httpd.rpc.Handler;
import com.google.gerrit.reviewdb.client.Project;
import com.google.gerrit.reviewdb.client.Project.NameKey;
import com.google.gerrit.server.CurrentUser;
import com.google.gerrit.server.account.GroupBackend;
import com.google.gerrit.server.account.GroupBackends;
@@ -58,6 +59,7 @@ import org.eclipse.jgit.lib.ObjectId;
public abstract class ProjectAccessHandler<T> extends Handler<T> {
protected final GroupBackend groupBackend;
protected final ProjectConfig.Factory projectConfigFactory;
protected final Project.NameKey projectName;
protected final ObjectId base;
protected final CurrentUser user;
@@ -77,14 +79,15 @@ public abstract class ProjectAccessHandler<T> extends Handler<T> {
protected ProjectAccessHandler(
GroupBackend groupBackend,
ProjectConfig.Factory projectConfigFactory,
MetaDataUpdate.User metaDataUpdateFactory,
AllProjectsName allProjects,
Provider<SetParent> setParent,
CurrentUser user,
Project.NameKey projectName,
NameKey projectName,
ObjectId base,
List<AccessSection> sectionList,
Project.NameKey parentProjectName,
NameKey parentProjectName,
String message,
ContributorAgreementsChecker contributorAgreements,
PermissionBackend permissionBackend,
@@ -102,6 +105,7 @@ public abstract class ProjectAccessHandler<T> extends Handler<T> {
this.message = message;
this.contributorAgreements = contributorAgreements;
this.permissionBackend = permissionBackend;
this.projectConfigFactory = projectConfigFactory;
this.checkIfOwner = checkIfOwner;
}
@@ -113,7 +117,7 @@ public abstract class ProjectAccessHandler<T> extends Handler<T> {
contributorAgreements.check(projectName, user);
try (MetaDataUpdate md = metaDataUpdateFactory.create(projectName)) {
ProjectConfig config = ProjectConfig.read(md, base);
ProjectConfig config = projectConfigFactory.read(md, base);
Set<String> toDelete = scanSectionNames(config);
PermissionBackend.ForProject forProject = permissionBackend.user(user).project(projectName);

View File

@@ -88,6 +88,7 @@ public class ReviewProjectAccess extends ProjectAccessHandler<Change.Id> {
ReviewProjectAccess(
PermissionBackend permissionBackend,
GroupBackend groupBackend,
ProjectConfig.Factory projectConfigFactory,
MetaDataUpdate.User metaDataUpdateFactory,
ReviewDb db,
Provider<PostReviewers> reviewersProvider,
@@ -108,6 +109,7 @@ public class ReviewProjectAccess extends ProjectAccessHandler<Change.Id> {
@Nullable @Assisted String message) {
super(
groupBackend,
projectConfigFactory,
metaDataUpdateFactory,
allProjects,
setParent,

View File

@@ -57,17 +57,20 @@ public class CreateGroupPermissionSyncer implements ChangeMergedListener {
private final AllUsersName allUsers;
private final ProjectCache projectCache;
private final Provider<MetaDataUpdate.Server> metaDataUpdateFactory;
private final ProjectConfig.Factory projectConfigFactory;
@Inject
CreateGroupPermissionSyncer(
AllProjectsName allProjects,
AllUsersName allUsers,
ProjectCache projectCache,
Provider<MetaDataUpdate.Server> metaDataUpdateFactory) {
Provider<MetaDataUpdate.Server> metaDataUpdateFactory,
ProjectConfig.Factory projectConfigFactory) {
this.allProjects = allProjects;
this.allUsers = allUsers;
this.projectCache = projectCache;
this.metaDataUpdateFactory = metaDataUpdateFactory;
this.projectConfigFactory = projectConfigFactory;
}
/**
@@ -102,7 +105,7 @@ public class CreateGroupPermissionSyncer implements ChangeMergedListener {
}
try (MetaDataUpdate md = metaDataUpdateFactory.get().create(allUsers)) {
ProjectConfig config = ProjectConfig.read(md);
ProjectConfig config = projectConfigFactory.read(md);
AccessSection createGroupAccessSection =
config.getAccessSection(RefNames.REFS_GROUPS + "*", true);
if (createGroupsGlobal.isEmpty()) {

View File

@@ -302,12 +302,16 @@ public class ProjectConfigEntry {
private final GitRepositoryManager repoManager;
private final DynamicMap<ProjectConfigEntry> pluginConfigEntries;
private final ProjectConfig.Factory projectConfigFactory;
@Inject
UpdateChecker(
GitRepositoryManager repoManager, DynamicMap<ProjectConfigEntry> pluginConfigEntries) {
GitRepositoryManager repoManager,
DynamicMap<ProjectConfigEntry> pluginConfigEntries,
ProjectConfig.Factory projectConfigFactory) {
this.repoManager = repoManager;
this.pluginConfigEntries = pluginConfigEntries;
this.projectConfigFactory = projectConfigFactory;
}
@Override
@@ -361,7 +365,7 @@ public class ProjectConfigEntry {
return null;
}
try (Repository repo = repoManager.openRepository(p)) {
ProjectConfig pc = new ProjectConfig(p);
ProjectConfig pc = projectConfigFactory.create(p);
pc.load(repo, id);
return pc;
}

View File

@@ -321,6 +321,7 @@ class ReceiveCommits {
private final SetHashtagsOp.Factory hashtagsFactory;
private final SubmoduleOp.Factory subOpFactory;
private final TagCache tagCache;
private final ProjectConfig.Factory projectConfigFactory;
// Assisted injected fields.
private final AllRefsWatcher allRefsWatcher;
@@ -365,6 +366,7 @@ class ReceiveCommits {
AccountResolver accountResolver,
AllProjectsName allProjectsName,
BatchUpdate.Factory batchUpdateFactory,
ProjectConfig.Factory projectConfigFactory,
@GerritServerConfig Config cfg,
ChangeEditUtil editUtil,
ChangeIndexer indexer,
@@ -437,6 +439,7 @@ class ReceiveCommits {
this.seq = seq;
this.subOpFactory = subOpFactory;
this.tagCache = tagCache;
this.projectConfigFactory = projectConfigFactory;
// Assisted injected fields.
this.allRefsWatcher = allRefsWatcher;
@@ -1055,7 +1058,7 @@ class ReceiveCommits {
case UPDATE:
case UPDATE_NONFASTFORWARD:
try {
ProjectConfig cfg = new ProjectConfig(project.getNameKey());
ProjectConfig cfg = projectConfigFactory.create(project.getNameKey());
cfg.load(project.getNameKey(), receivePack.getRevWalk(), cmd.getNewId());
if (!cfg.getValidationErrors().isEmpty()) {
addError("Invalid project configuration:");

View File

@@ -98,6 +98,7 @@ public class CommitValidators {
private final AccountValidator accountValidator;
private final String installCommitMsgHookCommand;
private final ProjectCache projectCache;
private final ProjectConfig.Factory projectConfigFactory;
@Inject
Factory(
@@ -110,7 +111,8 @@ public class CommitValidators {
AllProjectsName allProjects,
ExternalIdsConsistencyChecker externalIdsConsistencyChecker,
AccountValidator accountValidator,
ProjectCache projectCache) {
ProjectCache projectCache,
ProjectConfig.Factory projectConfigFactory) {
this.gerritIdent = gerritIdent;
this.urlFormatter = urlFormatter;
this.pluginValidators = pluginValidators;
@@ -122,6 +124,7 @@ public class CommitValidators {
this.installCommitMsgHookCommand =
cfg != null ? cfg.getString("gerrit", null, "installCommitMsgHookCommand") : null;
this.projectCache = projectCache;
this.projectConfigFactory = projectConfigFactory;
}
public CommitValidators forReceiveCommits(
@@ -145,7 +148,7 @@ public class CommitValidators {
new SignedOffByValidator(user, perm, projectState),
new ChangeIdValidator(
projectState, user, urlFormatter, installCommitMsgHookCommand, sshInfo, change),
new ConfigValidator(branch, user, rw, allUsers, allProjects),
new ConfigValidator(projectConfigFactory, branch, user, rw, allUsers, allProjects),
new BannedCommitsValidator(rejectCommits),
new PluginCommitValidationListener(pluginValidators),
new ExternalIdUpdateListener(allUsers, externalIdsConsistencyChecker),
@@ -172,7 +175,7 @@ public class CommitValidators {
new SignedOffByValidator(user, perm, projectCache.checkedGet(branch.getParentKey())),
new ChangeIdValidator(
projectState, user, urlFormatter, installCommitMsgHookCommand, sshInfo, change),
new ConfigValidator(branch, user, rw, allUsers, allProjects),
new ConfigValidator(projectConfigFactory, branch, user, rw, allUsers, allProjects),
new PluginCommitValidationListener(pluginValidators),
new ExternalIdUpdateListener(allUsers, externalIdsConsistencyChecker),
new AccountCommitValidator(repoManager, allUsers, accountValidator),
@@ -379,6 +382,7 @@ public class CommitValidators {
/** If this is the special project configuration branch, validate the config. */
public static class ConfigValidator implements CommitValidationListener {
private final ProjectConfig.Factory projectConfigFactory;
private final Branch.NameKey branch;
private final IdentifiedUser user;
private final RevWalk rw;
@@ -386,11 +390,13 @@ public class CommitValidators {
private final AllProjectsName allProjects;
public ConfigValidator(
ProjectConfig.Factory projectConfigFactory,
Branch.NameKey branch,
IdentifiedUser user,
RevWalk rw,
AllUsersName allUsers,
AllProjectsName allProjects) {
this.projectConfigFactory = projectConfigFactory;
this.branch = branch;
this.user = user;
this.rw = rw;
@@ -405,7 +411,7 @@ public class CommitValidators {
List<CommitValidationMessage> messages = new ArrayList<>();
try {
ProjectConfig cfg = new ProjectConfig(receiveEvent.project.getNameKey());
ProjectConfig cfg = projectConfigFactory.create(receiveEvent.project.getNameKey());
cfg.load(rw, receiveEvent.command.getNewId());
if (!cfg.getValidationErrors().isEmpty()) {
addError("Invalid project configuration:", messages);

View File

@@ -127,6 +127,7 @@ public class MergeValidators {
private final ProjectCache projectCache;
private final PermissionBackend permissionBackend;
private final DynamicMap<ProjectConfigEntry> pluginConfigEntries;
private final ProjectConfig.Factory projectConfigFactory;
private final boolean allowProjectOwnersToChangeParent;
public interface Factory {
@@ -140,12 +141,14 @@ public class MergeValidators {
ProjectCache projectCache,
PermissionBackend permissionBackend,
DynamicMap<ProjectConfigEntry> pluginConfigEntries,
ProjectConfig.Factory projectConfigFactory,
@GerritServerConfig Config config) {
this.allProjectsName = allProjectsName;
this.allUsersName = allUsersName;
this.projectCache = projectCache;
this.permissionBackend = permissionBackend;
this.pluginConfigEntries = pluginConfigEntries;
this.projectConfigFactory = projectConfigFactory;
this.allowProjectOwnersToChangeParent =
config.getBoolean("receive", "allowProjectOwnersToChangeParent", false);
}
@@ -162,7 +165,7 @@ public class MergeValidators {
if (RefNames.REFS_CONFIG.equals(destBranch.get())) {
final Project.NameKey newParent;
try {
ProjectConfig cfg = new ProjectConfig(destProject.getNameKey());
ProjectConfig cfg = projectConfigFactory.create(destProject.getNameKey());
cfg.load(destProject.getNameKey(), repo, commit);
newParent = cfg.getProject().getParent(allProjectsName);
final Project.NameKey oldParent = destProject.getProject().getParent(allProjectsName);

View File

@@ -49,6 +49,7 @@ class RenameGroupOp extends DefaultQueueOp {
private final ProjectCache projectCache;
private final MetaDataUpdate.Server metaDataUpdateFactory;
private final ProjectConfig.Factory projectConfigFactory;
private final PersonIdent author;
private final AccountGroup.UUID uuid;
@@ -63,6 +64,7 @@ class RenameGroupOp extends DefaultQueueOp {
WorkQueue workQueue,
ProjectCache projectCache,
MetaDataUpdate.Server metaDataUpdateFactory,
ProjectConfig.Factory projectConfigFactory,
@Assisted("author") PersonIdent author,
@Assisted AccountGroup.UUID uuid,
@Assisted("oldName") String oldName,
@@ -70,6 +72,7 @@ class RenameGroupOp extends DefaultQueueOp {
super(workQueue);
this.projectCache = projectCache;
this.metaDataUpdateFactory = metaDataUpdateFactory;
this.projectConfigFactory = projectConfigFactory;
this.author = author;
this.uuid = uuid;
@@ -109,7 +112,7 @@ class RenameGroupOp extends DefaultQueueOp {
private void rename(MetaDataUpdate md) throws IOException, ConfigInvalidException {
boolean success = false;
for (int attempts = 0; !success && attempts < MAX_TRIES; attempts++) {
ProjectConfig config = ProjectConfig.read(md);
ProjectConfig config = projectConfigFactory.read(md);
// The group isn't referenced, or its name has been fixed already.
//

View File

@@ -277,12 +277,18 @@ public class ProjectCacheImpl implements ProjectCache {
private final ProjectState.Factory projectStateFactory;
private final GitRepositoryManager mgr;
private final ProjectCacheClock clock;
private final ProjectConfig.Factory projectConfigFactory;
@Inject
Loader(ProjectState.Factory psf, GitRepositoryManager g, ProjectCacheClock clock) {
Loader(
ProjectState.Factory psf,
GitRepositoryManager g,
ProjectCacheClock clock,
ProjectConfig.Factory projectConfigFactory) {
projectStateFactory = psf;
mgr = g;
this.clock = clock;
this.projectConfigFactory = projectConfigFactory;
}
@Override
@@ -291,7 +297,7 @@ public class ProjectCacheImpl implements ProjectCache {
long now = clock.read();
Project.NameKey key = new Project.NameKey(projectName);
try (Repository git = mgr.openRepository(key)) {
ProjectConfig cfg = new ProjectConfig(key);
ProjectConfig cfg = projectConfigFactory.create(key);
cfg.load(key, git);
ProjectState state = projectStateFactory.create(cfg);

View File

@@ -59,6 +59,7 @@ import com.google.gerrit.server.git.NotifyConfig;
import com.google.gerrit.server.git.ValidationError;
import com.google.gerrit.server.git.meta.MetaDataUpdate;
import com.google.gerrit.server.git.meta.VersionedMetaData;
import com.google.inject.Singleton;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
@@ -167,6 +168,29 @@ public class ProjectConfig extends VersionedMetaData implements ValidationError.
private static final Pattern EXCLUSIVE_PERMISSIONS_SPLIT_PATTERN = Pattern.compile("[, \t]{1,}");
// Don't use an assisted factory, since instances created by an assisted factory retain references
// to their enclosing injector. Instances of ProjectConfig are cached for a long time in the
// ProjectCache, so this would retain lots more memory.
@Singleton
public static class Factory {
public ProjectConfig create(Project.NameKey projectName) {
return new ProjectConfig(projectName);
}
public ProjectConfig read(MetaDataUpdate update) throws IOException, ConfigInvalidException {
ProjectConfig r = create(update.getProjectName());
r.load(update);
return r;
}
public ProjectConfig read(MetaDataUpdate update, ObjectId id)
throws IOException, ConfigInvalidException {
ProjectConfig r = create(update.getProjectName());
r.load(update, id);
return r;
}
}
private Project project;
private AccountsSection accountsSection;
private GroupList groupList;
@@ -188,20 +212,6 @@ public class ProjectConfig extends VersionedMetaData implements ValidationError.
private Map<String, List<String>> extensionPanelSections;
private Map<String, GroupReference> groupsByName;
public static ProjectConfig read(MetaDataUpdate update)
throws IOException, ConfigInvalidException {
ProjectConfig r = new ProjectConfig(update.getProjectName());
r.load(update);
return r;
}
public static ProjectConfig read(MetaDataUpdate update, ObjectId id)
throws IOException, ConfigInvalidException {
ProjectConfig r = new ProjectConfig(update.getProjectName());
r.load(update, id);
return r;
}
public static CommentLinkInfoImpl buildCommentLink(Config cfg, String name, boolean allowRaw)
throws IllegalArgumentException {
String match = cfg.getString(COMMENTLINK, name, KEY_MATCH);
@@ -243,7 +253,7 @@ public class ProjectConfig extends VersionedMetaData implements ValidationError.
commentLinkSections.add(commentLink);
}
public ProjectConfig(Project.NameKey projectName) {
private ProjectConfig(Project.NameKey projectName) {
this.projectName = projectName;
}

View File

@@ -68,6 +68,7 @@ public class CreateAccessChange implements RestModifyView<ProjectResource, Proje
private final SetAccessUtil setAccess;
private final ChangeJson.Factory jsonFactory;
private final ProjectCache projectCache;
private final ProjectConfig.Factory projectConfigFactory;
@Inject
CreateAccessChange(
@@ -79,7 +80,8 @@ public class CreateAccessChange implements RestModifyView<ProjectResource, Proje
Provider<ReviewDb> db,
SetAccessUtil accessUtil,
ChangeJson.Factory jsonFactory,
ProjectCache projectCache) {
ProjectCache projectCache,
ProjectConfig.Factory projectConfigFactory) {
this.permissionBackend = permissionBackend;
this.seq = seq;
this.changeInserterFactory = changeInserterFactory;
@@ -89,6 +91,7 @@ public class CreateAccessChange implements RestModifyView<ProjectResource, Proje
this.setAccess = accessUtil;
this.jsonFactory = jsonFactory;
this.projectCache = projectCache;
this.projectConfigFactory = projectConfigFactory;
}
@Override
@@ -117,7 +120,7 @@ public class CreateAccessChange implements RestModifyView<ProjectResource, Proje
input.parent == null ? null : new Project.NameKey(input.parent);
try (MetaDataUpdate md = metaDataUpdateUser.create(rsrc.getNameKey())) {
ProjectConfig config = ProjectConfig.read(md);
ProjectConfig config = projectConfigFactory.read(md);
ObjectId oldCommit = config.getRevision();
String oldCommitSha1 = oldCommit == null ? null : oldCommit.getName();

View File

@@ -115,6 +115,7 @@ public class CreateProject
private final AllProjectsName allProjects;
private final AllUsersName allUsers;
private final PluginItemContext<ProjectNameLockManager> lockManager;
private final ProjectConfig.Factory projectConfigFactory;
@Inject
CreateProject(
@@ -135,7 +136,8 @@ public class CreateProject
Provider<PutConfig> putConfig,
AllProjectsName allProjects,
AllUsersName allUsers,
PluginItemContext<ProjectNameLockManager> lockManager) {
PluginItemContext<ProjectNameLockManager> lockManager,
ProjectConfig.Factory projectConfigFactory) {
this.projectsCollection = projectsCollection;
this.groupResolver = groupResolver;
this.projectCreationValidationListeners = projectCreationValidationListeners;
@@ -154,6 +156,7 @@ public class CreateProject
this.allProjects = allProjects;
this.allUsers = allUsers;
this.lockManager = lockManager;
this.projectConfigFactory = projectConfigFactory;
}
@Override
@@ -286,7 +289,7 @@ public class CreateProject
private void createProjectConfig(CreateProjectArgs args)
throws IOException, ConfigInvalidException {
try (MetaDataUpdate md = metaDataUpdateFactory.create(args.getProject())) {
ProjectConfig config = ProjectConfig.read(md);
ProjectConfig config = projectConfigFactory.read(md);
Project newProject = config.getProject();
newProject.setDescription(args.projectDescription);

View File

@@ -95,6 +95,7 @@ public class GetAccess implements RestReadView<ProjectResource> {
private final MetaDataUpdate.Server metaDataUpdateFactory;
private final GroupBackend groupBackend;
private final WebLinks webLinks;
private final ProjectConfig.Factory projectConfigFactory;
@Inject
public GetAccess(
@@ -105,7 +106,8 @@ public class GetAccess implements RestReadView<ProjectResource> {
MetaDataUpdate.Server metaDataUpdateFactory,
ProjectJson projectJson,
GroupBackend groupBackend,
WebLinks webLinks) {
WebLinks webLinks,
ProjectConfig.Factory projectConfigFactory) {
this.user = self;
this.permissionBackend = permissionBackend;
this.allProjectsName = allProjectsName;
@@ -114,6 +116,7 @@ public class GetAccess implements RestReadView<ProjectResource> {
this.metaDataUpdateFactory = metaDataUpdateFactory;
this.groupBackend = groupBackend;
this.webLinks = webLinks;
this.projectConfigFactory = projectConfigFactory;
}
public ProjectAccessInfo apply(Project.NameKey nameKey)
@@ -141,7 +144,7 @@ public class GetAccess implements RestReadView<ProjectResource> {
ProjectConfig config;
try (MetaDataUpdate md = metaDataUpdateFactory.create(projectName)) {
config = ProjectConfig.read(md);
config = projectConfigFactory.read(md);
info.configWebLinks = new ArrayList<>();
// config may have a null revision if the repo doesn't have its own refs/meta/config.

View File

@@ -47,6 +47,7 @@ import com.google.gerrit.server.project.ProjectCache;
import com.google.gerrit.server.project.ProjectConfig;
import com.google.gerrit.server.project.ProjectResource;
import com.google.gerrit.server.project.ProjectState;
import com.google.gerrit.server.project.ProjectState.Factory;
import com.google.inject.Inject;
import com.google.inject.Provider;
import com.google.inject.Singleton;
@@ -77,20 +78,22 @@ public class PutConfig implements RestModifyView<ProjectResource, ConfigInput> {
private final DynamicMap<RestView<ProjectResource>> views;
private final Provider<CurrentUser> user;
private final PermissionBackend permissionBackend;
private final ProjectConfig.Factory projectConfigFactory;
@Inject
PutConfig(
@EnableSignedPush boolean serverEnableSignedPush,
Provider<MetaDataUpdate.User> metaDataUpdateFactory,
ProjectCache projectCache,
ProjectState.Factory projectStateFactory,
Factory projectStateFactory,
DynamicMap<ProjectConfigEntry> pluginConfigEntries,
PluginConfigFactory cfgFactory,
AllProjectsName allProjects,
UiActions uiActions,
DynamicMap<RestView<ProjectResource>> views,
Provider<CurrentUser> user,
PermissionBackend permissionBackend) {
PermissionBackend permissionBackend,
ProjectConfig.Factory projectConfigFactory) {
this.serverEnableSignedPush = serverEnableSignedPush;
this.metaDataUpdateFactory = metaDataUpdateFactory;
this.projectCache = projectCache;
@@ -102,6 +105,7 @@ public class PutConfig implements RestModifyView<ProjectResource, ConfigInput> {
this.views = views;
this.user = user;
this.permissionBackend = permissionBackend;
this.projectConfigFactory = projectConfigFactory;
}
@Override
@@ -122,7 +126,7 @@ public class PutConfig implements RestModifyView<ProjectResource, ConfigInput> {
}
try (MetaDataUpdate md = metaDataUpdateFactory.get().create(projectName)) {
ProjectConfig projectConfig = ProjectConfig.read(md);
ProjectConfig projectConfig = projectConfigFactory.read(md);
Project p = projectConfig.getProject();
p.setDescription(Strings.emptyToNull(input.description));
@@ -164,7 +168,7 @@ public class PutConfig implements RestModifyView<ProjectResource, ConfigInput> {
throw new ResourceConflictException("Cannot update " + projectName);
}
ProjectState state = projectStateFactory.create(ProjectConfig.read(md));
ProjectState state = projectStateFactory.create(projectConfigFactory.read(md));
return new ConfigInfoImpl(
serverEnableSignedPush,
state,

View File

@@ -42,15 +42,18 @@ public class PutDescription implements RestModifyView<ProjectResource, Descripti
private final ProjectCache cache;
private final MetaDataUpdate.Server updateFactory;
private final PermissionBackend permissionBackend;
private final ProjectConfig.Factory projectConfigFactory;
@Inject
PutDescription(
ProjectCache cache,
MetaDataUpdate.Server updateFactory,
PermissionBackend permissionBackend) {
PermissionBackend permissionBackend,
ProjectConfig.Factory projectConfigFactory) {
this.cache = cache;
this.updateFactory = updateFactory;
this.permissionBackend = permissionBackend;
this.projectConfigFactory = projectConfigFactory;
}
@Override
@@ -68,7 +71,7 @@ public class PutDescription implements RestModifyView<ProjectResource, Descripti
.check(ProjectPermission.WRITE_CONFIG);
try (MetaDataUpdate md = updateFactory.create(resource.getNameKey())) {
ProjectConfig config = ProjectConfig.read(md);
ProjectConfig config = projectConfigFactory.read(md);
Project project = config.getProject();
project.setDescription(Strings.emptyToNull(input.description));

View File

@@ -56,6 +56,7 @@ public class SetAccess implements RestModifyView<ProjectResource, ProjectAccessI
private final Provider<IdentifiedUser> identifiedUser;
private final SetAccessUtil accessUtil;
private final CreateGroupPermissionSyncer createGroupPermissionSyncer;
private final ProjectConfig.Factory projectConfigFactory;
@Inject
private SetAccess(
@@ -66,7 +67,8 @@ public class SetAccess implements RestModifyView<ProjectResource, ProjectAccessI
GetAccess getAccess,
Provider<IdentifiedUser> identifiedUser,
SetAccessUtil accessUtil,
CreateGroupPermissionSyncer createGroupPermissionSyncer) {
CreateGroupPermissionSyncer createGroupPermissionSyncer,
ProjectConfig.Factory projectConfigFactory) {
this.groupBackend = groupBackend;
this.permissionBackend = permissionBackend;
this.metaDataUpdateFactory = metaDataUpdateFactory;
@@ -75,6 +77,7 @@ public class SetAccess implements RestModifyView<ProjectResource, ProjectAccessI
this.identifiedUser = identifiedUser;
this.accessUtil = accessUtil;
this.createGroupPermissionSyncer = createGroupPermissionSyncer;
this.projectConfigFactory = projectConfigFactory;
}
@Override
@@ -89,7 +92,7 @@ public class SetAccess implements RestModifyView<ProjectResource, ProjectAccessI
List<AccessSection> removals = accessUtil.getAccessSections(input.remove);
List<AccessSection> additions = accessUtil.getAccessSections(input.add);
try (MetaDataUpdate md = metaDataUpdateUser.create(rsrc.getNameKey())) {
config = ProjectConfig.read(md);
config = projectConfigFactory.read(md);
// Check that the user has the right permissions.
boolean checkedAdmin = false;

View File

@@ -47,6 +47,7 @@ class SetDefaultDashboard implements RestModifyView<DashboardResource, SetDashbo
private final DashboardsCollection dashboards;
private final Provider<GetDashboard> get;
private final PermissionBackend permissionBackend;
private final ProjectConfig.Factory projectConfigFactory;
@Option(name = "--inherited", usage = "set dashboard inherited by children")
boolean inherited;
@@ -57,12 +58,14 @@ class SetDefaultDashboard implements RestModifyView<DashboardResource, SetDashbo
MetaDataUpdate.Server updateFactory,
DashboardsCollection dashboards,
Provider<GetDashboard> get,
PermissionBackend permissionBackend) {
PermissionBackend permissionBackend,
ProjectConfig.Factory projectConfigFactory) {
this.cache = cache;
this.updateFactory = updateFactory;
this.dashboards = dashboards;
this.get = get;
this.permissionBackend = permissionBackend;
this.projectConfigFactory = projectConfigFactory;
}
@Override
@@ -93,7 +96,7 @@ class SetDefaultDashboard implements RestModifyView<DashboardResource, SetDashbo
}
try (MetaDataUpdate md = updateFactory.create(rsrc.getProjectState().getNameKey())) {
ProjectConfig config = ProjectConfig.read(md);
ProjectConfig config = projectConfigFactory.read(md);
Project project = config.getProject();
if (inherited) {
project.setDefaultDashboard(input.id);

View File

@@ -60,6 +60,7 @@ public class SetParent
private final MetaDataUpdate.Server updateFactory;
private final AllProjectsName allProjects;
private final AllUsersName allUsers;
private final ProjectConfig.Factory projectConfigFactory;
private volatile boolean allowProjectOwnersToChangeParent;
@Inject
@@ -69,12 +70,14 @@ public class SetParent
MetaDataUpdate.Server updateFactory,
AllProjectsName allProjects,
AllUsersName allUsers,
ProjectConfig.Factory projectConfigFactory,
@GerritServerConfig Config config) {
this.cache = cache;
this.permissionBackend = permissionBackend;
this.updateFactory = updateFactory;
this.allProjects = allProjects;
this.allUsers = allUsers;
this.projectConfigFactory = projectConfigFactory;
this.allowProjectOwnersToChangeParent =
config.getBoolean("receive", "allowProjectOwnersToChangeParent", false);
}
@@ -96,7 +99,7 @@ public class SetParent
MoreObjects.firstNonNull(Strings.emptyToNull(input.parent), allProjects.get());
validateParentUpdate(rsrc.getProjectState().getNameKey(), user, parentName, checkIfAdmin);
try (MetaDataUpdate md = updateFactory.create(rsrc.getNameKey())) {
ProjectConfig config = ProjectConfig.read(md);
ProjectConfig config = projectConfigFactory.read(md);
Project project = config.getProject();
project.setParentName(parentName);

View File

@@ -73,6 +73,7 @@ public class AllProjectsCreator {
private final AllProjectsName allProjectsName;
private final PersonIdent serverUser;
private final NotesMigration notesMigration;
private final ProjectConfig.Factory projectConfigFactory;
private final GroupReference anonymous;
private final GroupReference registered;
private final GroupReference owners;
@@ -90,11 +91,13 @@ public class AllProjectsCreator {
AllProjectsName allProjectsName,
@GerritPersonIdent PersonIdent serverUser,
NotesMigration notesMigration,
SystemGroupBackend systemGroupBackend) {
SystemGroupBackend systemGroupBackend,
ProjectConfig.Factory projectConfigFactory) {
this.repositoryManager = repositoryManager;
this.allProjectsName = allProjectsName;
this.serverUser = serverUser;
this.notesMigration = notesMigration;
this.projectConfigFactory = projectConfigFactory;
this.anonymous = systemGroupBackend.getGroup(ANONYMOUS_USERS);
this.registered = systemGroupBackend.getGroup(REGISTERED_USERS);
@@ -170,7 +173,7 @@ public class AllProjectsCreator {
Strings.emptyToNull(message),
"Initialized Gerrit Code Review " + Version.getVersion()));
ProjectConfig config = ProjectConfig.read(md);
ProjectConfig config = projectConfigFactory.read(md);
Project p = config.getProject();
p.setDescription("Access inherited by all other projects.");
p.setBooleanConfig(BooleanProjectConfig.REQUIRE_CHANGE_ID, InheritableBoolean.TRUE);

View File

@@ -35,6 +35,7 @@ import com.google.gerrit.server.git.GitRepositoryManager;
import com.google.gerrit.server.git.meta.MetaDataUpdate;
import com.google.gerrit.server.group.SystemGroupBackend;
import com.google.gerrit.server.project.ProjectConfig;
import com.google.gerrit.server.project.ProjectConfig.Factory;
import com.google.gerrit.server.project.RefPattern;
import com.google.inject.Inject;
import java.io.IOException;
@@ -50,6 +51,7 @@ public class AllUsersCreator {
private final GitRepositoryManager mgr;
private final AllUsersName allUsersName;
private final PersonIdent serverUser;
private final ProjectConfig.Factory projectConfigFactory;
private final GroupReference registered;
@Nullable private GroupReference admin;
@@ -60,11 +62,13 @@ public class AllUsersCreator {
GitRepositoryManager mgr,
AllUsersName allUsersName,
SystemGroupBackend systemGroupBackend,
@GerritPersonIdent PersonIdent serverUser) {
@GerritPersonIdent PersonIdent serverUser,
Factory projectConfigFactory) {
this.mgr = mgr;
this.allUsersName = allUsersName;
this.serverUser = serverUser;
this.registered = systemGroupBackend.getGroup(REGISTERED_USERS);
this.projectConfigFactory = projectConfigFactory;
this.codeReviewLabel = getDefaultCodeReviewLabel();
}
@@ -107,7 +111,7 @@ public class AllUsersCreator {
md.getCommitBuilder().setCommitter(serverUser);
md.setMessage("Initialized Gerrit Code Review " + Version.getVersion());
ProjectConfig config = ProjectConfig.read(md);
ProjectConfig config = projectConfigFactory.read(md);
Project project = config.getProject();
project.setDescription("Individual user settings and preferences.");

View File

@@ -42,15 +42,18 @@ import org.eclipse.jgit.transport.RefSpec;
public class Schema_120 extends SchemaVersion {
private final GitRepositoryManager mgr;
private final ProjectConfig.Factory projectConfigFactory;
private final PersonIdent serverUser;
@Inject
Schema_120(
Provider<Schema_119> prior,
GitRepositoryManager mgr,
ProjectConfig.Factory projectConfigFactory,
@GerritPersonIdent PersonIdent serverUser) {
super(prior);
this.mgr = mgr;
this.projectConfigFactory = projectConfigFactory;
this.serverUser = serverUser;
}
@@ -64,7 +67,7 @@ public class Schema_120 extends SchemaVersion {
md.getCommitBuilder().setAuthor(serverUser);
md.getCommitBuilder().setCommitter(serverUser);
md.setMessage("Added superproject subscription during upgrade");
ProjectConfig pc = ProjectConfig.read(md);
ProjectConfig pc = projectConfigFactory.read(md);
SubscribeSection s = null;
for (SubscribeSection s1 : pc.getSubscribeSections(subbranch)) {

View File

@@ -57,6 +57,7 @@ public class Schema_125 extends SchemaVersion {
private final AllUsersName allUsersName;
private final AllProjectsName allProjectsName;
private final SystemGroupBackend systemGroupBackend;
private final ProjectConfig.Factory projectConfigFactory;
private final PersonIdent serverUser;
@Inject
@@ -66,12 +67,14 @@ public class Schema_125 extends SchemaVersion {
AllUsersName allUsersName,
AllProjectsName allProjectsName,
SystemGroupBackend systemGroupBackend,
ProjectConfig.Factory projectConfigFactory,
@GerritPersonIdent PersonIdent serverUser) {
super(prior);
this.repoManager = repoManager;
this.allUsersName = allUsersName;
this.allProjectsName = allProjectsName;
this.systemGroupBackend = systemGroupBackend;
this.projectConfigFactory = projectConfigFactory;
this.serverUser = serverUser;
}
@@ -79,7 +82,7 @@ public class Schema_125 extends SchemaVersion {
protected void migrateData(ReviewDb db, UpdateUI ui) throws OrmException {
try (Repository git = repoManager.openRepository(allUsersName);
MetaDataUpdate md = new MetaDataUpdate(GitReferenceUpdated.DISABLED, allUsersName, git)) {
ProjectConfig config = ProjectConfig.read(md);
ProjectConfig config = projectConfigFactory.read(md);
config
.getAccessSection(RefNames.REFS_USERS + "*", true)
@@ -114,7 +117,7 @@ public class Schema_125 extends SchemaVersion {
while (parent != null) {
try (Repository git = repoManager.openRepository(parent);
MetaDataUpdate md = new MetaDataUpdate(GitReferenceUpdated.DISABLED, parent, git)) {
ProjectConfig parentConfig = ProjectConfig.read(md);
ProjectConfig parentConfig = projectConfigFactory.read(md);
for (LabelType lt : parentConfig.getLabelSections().values()) {
if (!labelTypes.containsKey(lt.getName())) {
labelTypes.put(lt.getName(), lt);

View File

@@ -44,6 +44,7 @@ public class Schema_126 extends SchemaVersion {
private final GitRepositoryManager repoManager;
private final AllUsersName allUsersName;
private final SystemGroupBackend systemGroupBackend;
private final ProjectConfig.Factory projectConfigFactory;
private final PersonIdent serverUser;
@Inject
@@ -52,11 +53,13 @@ public class Schema_126 extends SchemaVersion {
GitRepositoryManager repoManager,
AllUsersName allUsersName,
SystemGroupBackend systemGroupBackend,
ProjectConfig.Factory projectConfigFactory,
@GerritPersonIdent PersonIdent serverUser) {
super(prior);
this.repoManager = repoManager;
this.allUsersName = allUsersName;
this.systemGroupBackend = systemGroupBackend;
this.projectConfigFactory = projectConfigFactory;
this.serverUser = serverUser;
}
@@ -64,7 +67,7 @@ public class Schema_126 extends SchemaVersion {
protected void migrateData(ReviewDb db, UpdateUI ui) throws OrmException {
try (Repository git = repoManager.openRepository(allUsersName);
MetaDataUpdate md = new MetaDataUpdate(GitReferenceUpdated.DISABLED, allUsersName, git)) {
ProjectConfig config = ProjectConfig.read(md);
ProjectConfig config = projectConfigFactory.read(md);
String refsUsersShardedId = RefNames.REFS_USERS + "${" + RefPattern.USERID_SHARDED + "}";
config.remove(config.getAccessSection(refsUsersShardedId));

View File

@@ -42,6 +42,7 @@ public class Schema_128 extends SchemaVersion {
private final GitRepositoryManager repoManager;
private final AllProjectsName allProjectsName;
private final SystemGroupBackend systemGroupBackend;
private final ProjectConfig.Factory projectConfigFactory;
private final PersonIdent serverUser;
@Inject
@@ -50,11 +51,13 @@ public class Schema_128 extends SchemaVersion {
GitRepositoryManager repoManager,
AllProjectsName allProjectsName,
SystemGroupBackend systemGroupBackend,
ProjectConfig.Factory projectConfigFactory,
@GerritPersonIdent PersonIdent serverUser) {
super(prior);
this.repoManager = repoManager;
this.allProjectsName = allProjectsName;
this.systemGroupBackend = systemGroupBackend;
this.projectConfigFactory = projectConfigFactory;
this.serverUser = serverUser;
}
@@ -63,7 +66,7 @@ public class Schema_128 extends SchemaVersion {
try (Repository git = repoManager.openRepository(allProjectsName);
MetaDataUpdate md =
new MetaDataUpdate(GitReferenceUpdated.DISABLED, allProjectsName, git)) {
ProjectConfig config = ProjectConfig.read(md);
ProjectConfig config = projectConfigFactory.read(md);
GroupReference registered = systemGroupBackend.getGroup(REGISTERED_USERS);
AccessSection refsFor = config.getAccessSection("refs/for/*", true);

View File

@@ -38,15 +38,18 @@ public class Schema_131 extends SchemaVersion {
"Rename 'Push Annotated/Signed Tag' permission to 'Create Annotated/Signed Tag'";
private final GitRepositoryManager repoManager;
private final ProjectConfig.Factory projectConfigFactory;
private final PersonIdent serverUser;
@Inject
Schema_131(
Provider<Schema_130> prior,
GitRepositoryManager repoManager,
ProjectConfig.Factory projectConfigFactory,
@GerritPersonIdent PersonIdent serverUser) {
super(prior);
this.repoManager = repoManager;
this.projectConfigFactory = projectConfigFactory;
this.serverUser = serverUser;
}
@@ -58,7 +61,7 @@ public class Schema_131 extends SchemaVersion {
for (Project.NameKey projectName : repoList) {
try (Repository git = repoManager.openRepository(projectName);
MetaDataUpdate md = new MetaDataUpdate(GitReferenceUpdated.DISABLED, projectName, git)) {
ProjectConfig config = ProjectConfig.read(md);
ProjectConfig config = projectConfigFactory.read(md);
if (config.hasLegacyPermissions()) {
md.getCommitBuilder().setAuthor(serverUser);
md.getCommitBuilder().setCommitter(serverUser);

View File

@@ -48,6 +48,7 @@ public class Schema_135 extends SchemaVersion {
private final GitRepositoryManager repoManager;
private final AllProjectsName allProjectsName;
private final SystemGroupBackend systemGroupBackend;
private final ProjectConfig.Factory projectConfigFactory;
private final PersonIdent serverUser;
@Inject
@@ -56,11 +57,13 @@ public class Schema_135 extends SchemaVersion {
GitRepositoryManager repoManager,
AllProjectsName allProjectsName,
SystemGroupBackend systemGroupBackend,
ProjectConfig.Factory projectConfigFactory,
@GerritPersonIdent PersonIdent serverUser) {
super(prior);
this.repoManager = repoManager;
this.allProjectsName = allProjectsName;
this.systemGroupBackend = systemGroupBackend;
this.projectConfigFactory = projectConfigFactory;
this.serverUser = serverUser;
}
@@ -69,7 +72,7 @@ public class Schema_135 extends SchemaVersion {
try (Repository git = repoManager.openRepository(allProjectsName);
MetaDataUpdate md =
new MetaDataUpdate(GitReferenceUpdated.DISABLED, allProjectsName, git)) {
ProjectConfig config = ProjectConfig.read(md);
ProjectConfig config = projectConfigFactory.read(md);
AccessSection meta = config.getAccessSection(RefNames.REFS_CONFIG, true);
Permission createRefsMetaConfigPermission = meta.getPermission(Permission.CREATE, true);

View File

@@ -34,6 +34,7 @@ public class Schema_162 extends SchemaVersion {
private final GitRepositoryManager repoManager;
private final AllProjectsName allProjectsName;
private final AllUsersName allUsersName;
private final ProjectConfig.Factory projectConfigFactory;
private final PersonIdent serverUser;
@Inject
@@ -42,11 +43,13 @@ public class Schema_162 extends SchemaVersion {
GitRepositoryManager repoManager,
AllProjectsName allProjectsName,
AllUsersName allUsersName,
ProjectConfig.Factory projectConfigFactory,
@GerritPersonIdent PersonIdent serverUser) {
super(prior);
this.repoManager = repoManager;
this.allProjectsName = allProjectsName;
this.allUsersName = allUsersName;
this.projectConfigFactory = projectConfigFactory;
this.serverUser = serverUser;
}
@@ -54,7 +57,7 @@ public class Schema_162 extends SchemaVersion {
protected void migrateData(ReviewDb db, UpdateUI ui) throws OrmException {
try (Repository git = repoManager.openRepository(allUsersName);
MetaDataUpdate md = new MetaDataUpdate(GitReferenceUpdated.DISABLED, allUsersName, git)) {
ProjectConfig cfg = ProjectConfig.read(md);
ProjectConfig cfg = projectConfigFactory.read(md);
if (allProjectsName.equals(cfg.getProject().getParent(allProjectsName))) {
return;
}

View File

@@ -44,6 +44,7 @@ public class Schema_164 extends SchemaVersion {
private final GitRepositoryManager repoManager;
private final AllUsersName allUsersName;
private final SystemGroupBackend systemGroupBackend;
private final ProjectConfig.Factory projectConfigFactory;
private final PersonIdent serverUser;
@Inject
@@ -52,11 +53,13 @@ public class Schema_164 extends SchemaVersion {
GitRepositoryManager repoManager,
AllUsersName allUsersName,
SystemGroupBackend systemGroupBackend,
ProjectConfig.Factory projectConfigFactory,
@GerritPersonIdent PersonIdent serverUser) {
super(prior);
this.repoManager = repoManager;
this.allUsersName = allUsersName;
this.systemGroupBackend = systemGroupBackend;
this.projectConfigFactory = projectConfigFactory;
this.serverUser = serverUser;
}
@@ -68,7 +71,7 @@ public class Schema_164 extends SchemaVersion {
md.getCommitBuilder().setCommitter(serverUser);
md.setMessage(COMMIT_MSG);
ProjectConfig config = ProjectConfig.read(md);
ProjectConfig config = projectConfigFactory.read(md);
AccessSection groups = config.getAccessSection(RefNames.REFS_GROUPS + "*", true);
grant(
config,

View File

@@ -48,6 +48,7 @@ public class Schema_165 extends SchemaVersion {
private final GitRepositoryManager repoManager;
private final AllUsersName allUsersName;
private final SystemGroupBackend systemGroupBackend;
private final ProjectConfig.Factory projectConfigFactory;
private final PersonIdent serverUser;
@Inject
@@ -56,11 +57,13 @@ public class Schema_165 extends SchemaVersion {
GitRepositoryManager repoManager,
AllUsersName allUsersName,
SystemGroupBackend systemGroupBackend,
ProjectConfig.Factory projectConfigFactory,
@GerritPersonIdent PersonIdent serverUser) {
super(prior);
this.repoManager = repoManager;
this.allUsersName = allUsersName;
this.systemGroupBackend = systemGroupBackend;
this.projectConfigFactory = projectConfigFactory;
this.serverUser = serverUser;
}
@@ -68,7 +71,7 @@ public class Schema_165 extends SchemaVersion {
protected void migrateData(ReviewDb db, UpdateUI ui) throws OrmException, SQLException {
try (Repository git = repoManager.openRepository(allUsersName);
MetaDataUpdate md = new MetaDataUpdate(GitReferenceUpdated.DISABLED, allUsersName, git)) {
ProjectConfig config = ProjectConfig.read(md);
ProjectConfig config = projectConfigFactory.read(md);
Optional<Permission> permission = findDefaultPermission(config);
if (!permission.isPresent()) {
// the default permission was not found, hence it cannot be fixed

View File

@@ -46,6 +46,7 @@ import com.google.gerrit.server.git.validators.OnSubmitValidators;
import com.google.gerrit.server.logging.RequestId;
import com.google.gerrit.server.patch.PatchSetInfoFactory;
import com.google.gerrit.server.project.ProjectCache;
import com.google.gerrit.server.project.ProjectConfig;
import com.google.gerrit.server.project.ProjectState;
import com.google.gerrit.server.query.change.InternalChangeQuery;
import com.google.gerrit.server.submit.MergeOp.CommitStatus;
@@ -115,6 +116,7 @@ public abstract class SubmitStrategy {
final OnSubmitValidators.Factory onSubmitValidatorsFactory;
final TagCache tagCache;
final Provider<InternalChangeQuery> queryProvider;
final ProjectConfig.Factory projectConfigFactory;
final Branch.NameKey destBranch;
final CodeReviewRevWalk rw;
@@ -154,6 +156,7 @@ public abstract class SubmitStrategy {
OnSubmitValidators.Factory onSubmitValidatorsFactory,
TagCache tagCache,
Provider<InternalChangeQuery> queryProvider,
ProjectConfig.Factory projectConfigFactory,
@Assisted Branch.NameKey destBranch,
@Assisted CommitStatus commitStatus,
@Assisted CodeReviewRevWalk rw,
@@ -176,6 +179,7 @@ public abstract class SubmitStrategy {
this.repoManager = repoManager;
this.cmUtil = cmUtil;
this.labelNormalizer = labelNormalizer;
this.projectConfigFactory = projectConfigFactory;
this.patchSetInfoFactory = patchSetInfoFactory;
this.psUtil = psUtil;
this.projectCache = projectCache;

View File

@@ -145,7 +145,7 @@ abstract class SubmitStrategyOp implements BatchUpdateOp {
if (RefNames.REFS_CONFIG.equals(refName)) {
logger.atFine().log("Loading new configuration from %s", RefNames.REFS_CONFIG);
try {
ProjectConfig cfg = new ProjectConfig(getProject());
ProjectConfig cfg = args.projectConfigFactory.create(getProject());
cfg.load(ctx.getRevWalk(), commit);
} catch (Exception e) {
throw new IntegrationException(

View File

@@ -189,7 +189,7 @@ public abstract class AbstractSubmoduleSubscription extends AbstractDaemonTest {
try (MetaDataUpdate md = metaDataUpdateFactory.create(sub)) {
md.setMessage("Added superproject subscription");
SubscribeSection s;
ProjectConfig pc = ProjectConfig.read(md);
ProjectConfig pc = projectConfigFactory.read(md);
if (pc.getSubscribeSections().containsKey(superName)) {
s = pc.getSubscribeSections().get(superName);
} else {

View File

@@ -74,6 +74,7 @@ public class LabelNormalizerTest {
@Inject private SchemaCreator schemaCreator;
@Inject protected ThreadLocalRequestContext requestContext;
@Inject private ChangeNotes.Factory changeNotesFactory;
@Inject private ProjectConfig.Factory projectConfigFactory;
private LifecycleManager lifecycle;
private ReviewDb db;
@@ -198,7 +199,7 @@ public class LabelNormalizerTest {
private ProjectConfig loadAllProjects() throws Exception {
try (Repository repo = repoManager.openRepository(allProjects)) {
ProjectConfig pc = new ProjectConfig(allProjects);
ProjectConfig pc = projectConfigFactory.create(allProjects);
pc.load(repo);
return pc;
}

View File

@@ -206,6 +206,7 @@ public class RefControlTest {
@Inject private DefaultRefFilter.Factory refFilterFactory;
@Inject private TransferConfig transferConfig;
@Inject private MetricMaker metricMaker;
@Inject private ProjectConfig.Factory projectConfigFactory;
@Before
public void setUp() throws Exception {
@@ -274,7 +275,8 @@ public class RefControlTest {
try {
Repository repo = repoManager.createRepository(allProjectsName);
ProjectConfig allProjects = new ProjectConfig(new Project.NameKey(allProjectsName.get()));
ProjectConfig allProjects =
projectConfigFactory.create(new Project.NameKey(allProjectsName.get()));
allProjects.load(repo);
LabelType cr = Util.codeReview();
allProjects.getLabelSections().put(cr.getName(), cr);
@@ -295,11 +297,11 @@ public class RefControlTest {
CacheBuilder.newBuilder().build();
sectionSorter = new PermissionCollection.Factory(new SectionSortCache(c), metricMaker);
parent = new ProjectConfig(parentKey);
parent = projectConfigFactory.create(parentKey);
parent.load(newRepository(parentKey));
add(parent);
local = new ProjectConfig(localKey);
local = projectConfigFactory.create(localKey);
local.load(newRepository(localKey));
add(local);
local.getProject().setParentName(parentKey);
@@ -455,7 +457,7 @@ public class RefControlTest {
allow(local, READ, DEVS, "refs/heads/*");
assertCanAccess(user(local, "a", ADMIN));
local = new ProjectConfig(localKey);
local = projectConfigFactory.create(localKey);
local.load(newRepository(localKey));
local.getProject().setParentName(parentKey);
allow(local, READ, DEVS, "refs/*");

View File

@@ -57,6 +57,7 @@ public class CommitsCollectionTest {
@Inject protected MetaDataUpdate.Server metaDataUpdateFactory;
@Inject protected AllProjectsName allProjects;
@Inject private CommitsCollection commits;
@Inject private ProjectConfig.Factory projectConfigFactory;
private TestRepository<InMemoryRepository> repo;
private ProjectConfig project;
@@ -70,7 +71,7 @@ public class CommitsCollectionTest {
Project.NameKey name = new Project.NameKey("project");
InMemoryRepository inMemoryRepo = repoManager.createRepository(name);
project = new ProjectConfig(name);
project = projectConfigFactory.create(name);
project.load(inMemoryRepo);
repo = new TestRepository<>(inMemoryRepo);
}

View File

@@ -78,11 +78,13 @@ public class ProjectConfigTest extends GerritBaseTests {
new GroupReference(new AccountGroup.UUID("X"), "Developers");
private final GroupReference staff = new GroupReference(new AccountGroup.UUID("Y"), "Staff");
private ProjectConfig.Factory factory;
private Repository db;
private TestRepository<?> tr;
@Before
public void setUp() throws Exception {
factory = new ProjectConfig.Factory();
db = new InMemoryRepository(new DfsRepositoryDescription("repo"));
tr = new TestRepository<>(db);
}
@@ -404,7 +406,7 @@ public class ProjectConfigTest extends GerritBaseTests {
@Test
public void readUnexistingPluginConfig() throws Exception {
ProjectConfig cfg = new ProjectConfig(new Project.NameKey("test"));
ProjectConfig cfg = factory.create(new Project.NameKey("test"));
cfg.load(db);
PluginConfig pluginCfg = cfg.getPluginConfig("somePlugin");
assertThat(pluginCfg.getNames()).isEmpty();
@@ -592,7 +594,7 @@ public class ProjectConfigTest extends GerritBaseTests {
}
private ProjectConfig read(RevCommit rev) throws IOException, ConfigInvalidException {
ProjectConfig cfg = new ProjectConfig(new Project.NameKey("test"));
ProjectConfig cfg = factory.create(new Project.NameKey("test"));
cfg.load(db, rev);
return cfg;
}

View File

@@ -50,6 +50,8 @@ public class SchemaCreatorTest {
@Inject private InMemoryDatabase db;
@Inject private ProjectConfig.Factory projectConfigFactory;
@Before
public void setUp() throws Exception {
new InMemoryModule().inject(this);
@@ -85,7 +87,7 @@ public class SchemaCreatorTest {
private LabelTypes getLabelTypes() throws Exception {
db.create();
ProjectConfig c = new ProjectConfig(allProjects);
ProjectConfig c = projectConfigFactory.create(allProjects);
try (Repository repo = repoManager.openRepository(allProjects)) {
c.load(repo);
return new LabelTypes(ImmutableList.copyOf(c.getLabelSections().values()));

View File

@@ -47,6 +47,7 @@ public class Schema_161_to_162_Test {
@Inject private GitRepositoryManager repoManager;
@Inject private Schema_162 schema162;
@Inject private ReviewDb db;
@Inject private ProjectConfig.Factory projectConfigFactory;
@Inject @GerritPersonIdent private PersonIdent serverUser;
@Test
@@ -73,7 +74,7 @@ public class Schema_161_to_162_Test {
try (Repository git = repoManager.openRepository(allUsersName);
MetaDataUpdate md = new MetaDataUpdate(GitReferenceUpdated.DISABLED, allUsersName, git)) {
ProjectConfig cfg = ProjectConfig.read(md);
ProjectConfig cfg = projectConfigFactory.read(md);
cfg.getProject().setParentName(testProject);
md.getCommitBuilder().setCommitter(serverUser);
md.getCommitBuilder().setAuthor(serverUser);