From fb9813874c811ae06604c30d875e9dce57df9874 Mon Sep 17 00:00:00 2001
From: SHaselbauer <sarah.haselbauer@akquinet.de>
Date: Mon, 21 Jan 2013 16:28:11 -0500
Subject: [PATCH] Merge multiple owners feature (pull request #63, #66)
---
src/com/gitblit/wicket/pages/EditRepositoryPage.java | 26 ++++++++++++++++++++------
1 files changed, 20 insertions(+), 6 deletions(-)
diff --git a/src/com/gitblit/wicket/pages/EditRepositoryPage.java b/src/com/gitblit/wicket/pages/EditRepositoryPage.java
index a071b69..9a81bde 100644
--- a/src/com/gitblit/wicket/pages/EditRepositoryPage.java
+++ b/src/com/gitblit/wicket/pages/EditRepositoryPage.java
@@ -61,6 +61,7 @@
import com.gitblit.models.RepositoryModel;
import com.gitblit.models.UserModel;
import com.gitblit.utils.ArrayUtils;
+import com.gitblit.utils.MultiConfigUtil;
import com.gitblit.utils.StringUtils;
import com.gitblit.wicket.GitBlitWebSession;
import com.gitblit.wicket.StringChoiceRenderer;
@@ -70,6 +71,8 @@
public class EditRepositoryPage extends RootSubPage {
+ private MultiConfigUtil multiConfigUtil = new MultiConfigUtil();
+
private final boolean isCreate;
private boolean isAdmin;
@@ -94,7 +97,7 @@
// personal create permissions, inject personal repository path
model.name = user.getPersonalPath() + "/";
model.projectPath = user.getPersonalPath();
- model.owner = user.username;
+ model.addRepoAdministrator(user.username);
// personal repositories are private by default
model.accessRestriction = AccessRestrictionType.VIEW;
model.authorizationControl = AuthorizationControl.NAMED;
@@ -164,6 +167,12 @@
final RegistrantPermissionsPanel teamsPalette = new RegistrantPermissionsPanel("teams",
RegistrantType.TEAM, GitBlit.self().getAllTeamnames(), repositoryTeams, getAccessPermissions());
+ // repo administrators palette
+ List admins = multiConfigUtil.convertCollectionToList(repositoryModel.getRepoAdministrators());
+ List persons = GitBlit.self().getAllUsernames();
+ final Palette repoAdministratorsPalette = new Palette("repoAdministrators", new ListModel<String>(admins), new CollectionModel<String>(
+ persons), new StringChoiceRenderer(), 10, true);
+
// indexed local branches palette
List<String> allLocalBranches = new ArrayList<String>();
allLocalBranches.add(Constants.DEFAULT_BRANCH);
@@ -326,6 +335,12 @@
}
repositoryModel.indexedBranches = indexedBranches;
+ repositoryModel.removeAllRepoAdministrators();
+ Iterator<String> repoAdmins = repoAdministratorsPalette.getSelectedChoices();
+ while (repoAdmins.hasNext()) {
+ repositoryModel.addRepoAdministrator(repoAdmins.next());
+ }
+
// pre-receive scripts
List<String> preReceiveScripts = new ArrayList<String>();
Iterator<String> pres = preReceivePalette.getSelectedChoices();
@@ -377,8 +392,7 @@
// field names reflective match RepositoryModel fields
form.add(new TextField<String>("name").setEnabled(allowEditName));
form.add(new TextField<String>("description"));
- form.add(new DropDownChoice<String>("owner", GitBlit.self().getAllUsernames())
- .setEnabled(GitBlitWebSession.get().canAdmin() && !repositoryModel.isPersonalRepository()));
+ form.add(repoAdministratorsPalette);
form.add(new CheckBox("allowForks").setEnabled(GitBlit.getBoolean(Keys.web.allowForking, true)));
DropDownChoice<AccessRestrictionType> accessRestriction = new DropDownChoice<AccessRestrictionType>("accessRestriction", Arrays
.asList(AccessRestrictionType.values()), new AccessRestrictionRenderer());
@@ -559,9 +573,9 @@
isAdmin = true;
return;
} else {
- if (!model.owner.equalsIgnoreCase(user.username)) {
- // User is not an Admin nor Owner
- error(getString("gb.errorOnlyAdminOrOwnerMayEditRepository"), true);
+ if (!model.isRepoAdministrator(user.username)) {
+ // User is not an Admin nor RepoAdministrator
+ error(getString("gb.errorOnlyAdminOrRepoAdminMayEditRepository"), true);
}
}
}
--
Gitblit v1.9.1