From 0e44acbb2fec928a1606dc60f427a148fff405c9 Mon Sep 17 00:00:00 2001
From: Mohamed Ragab <moragab@gmail.com>
Date: Wed, 02 May 2012 11:15:01 -0400
Subject: [PATCH] Added a script to facilitate setting the proxy host and port and no proxy hosts, and then it concatenates all the java system properties for setting the java proxy configurations and puts the resulting string in an environment variable JAVA_PROXY_CONFIG, modified the scirpts gitblit, gitblit-ubuntu, and gitblit-centos to source the java-proxy-config.sh script and then include the resulting java proxy configuration in the java command
---
src/com/gitblit/utils/RpcUtils.java | 255 ++++++++++++++++++++++++++++++++++++++++++++-------
1 files changed, 220 insertions(+), 35 deletions(-)
diff --git a/src/com/gitblit/utils/RpcUtils.java b/src/com/gitblit/utils/RpcUtils.java
index eb28c0f..02a63a4 100644
--- a/src/com/gitblit/utils/RpcUtils.java
+++ b/src/com/gitblit/utils/RpcUtils.java
@@ -21,15 +21,18 @@
import java.util.Collection;
import java.util.List;
import java.util.Map;
-import java.util.Properties;
import com.gitblit.Constants;
import com.gitblit.Constants.RpcRequest;
-import com.gitblit.IStoredSettings;
+import com.gitblit.GitBlitException.UnknownRequestException;
import com.gitblit.models.FederationModel;
import com.gitblit.models.FederationProposal;
import com.gitblit.models.FederationSet;
+import com.gitblit.models.FeedModel;
import com.gitblit.models.RepositoryModel;
+import com.gitblit.models.ServerSettings;
+import com.gitblit.models.ServerStatus;
+import com.gitblit.models.TeamModel;
import com.gitblit.models.UserModel;
import com.google.gson.reflect.TypeToken;
@@ -44,10 +47,16 @@
public static final Type NAMES_TYPE = new TypeToken<Collection<String>>() {
}.getType();
+ public static final Type SETTINGS_TYPE = new TypeToken<Map<String, String>>() {
+ }.getType();
+
private static final Type REPOSITORIES_TYPE = new TypeToken<Map<String, RepositoryModel>>() {
}.getType();
private static final Type USERS_TYPE = new TypeToken<Collection<UserModel>>() {
+ }.getType();
+
+ private static final Type TEAMS_TYPE = new TypeToken<Collection<TeamModel>>() {
}.getType();
private static final Type REGISTRATIONS_TYPE = new TypeToken<Collection<FederationModel>>() {
@@ -57,6 +66,9 @@
}.getType();
private static final Type SETS_TYPE = new TypeToken<Collection<FederationSet>>() {
+ }.getType();
+
+ private static final Type BRANCHES_TYPE = new TypeToken<Map<String, Collection<String>>>() {
}.getType();
/**
@@ -89,7 +101,28 @@
req = RpcRequest.LIST_REPOSITORIES;
}
return remoteURL + Constants.RPC_PATH + "?req=" + req.name().toLowerCase()
- + (name == null ? "" : ("&name=" + name));
+ + (name == null ? "" : ("&name=" + StringUtils.encodeURL(name)));
+ }
+
+ /**
+ * Returns the version of the RPC protocol on the server.
+ *
+ * @param serverUrl
+ * @param account
+ * @param password
+ * @return the protocol version
+ * @throws IOException
+ */
+ public static int getProtocolVersion(String serverUrl, String account, char[] password)
+ throws IOException {
+ String url = asLink(serverUrl, RpcRequest.GET_PROTOCOL);
+ int protocol = 1;
+ try {
+ protocol = JsonUtils.retrieveJson(url, Integer.class, account, password);
+ } catch (UnknownRequestException e) {
+ // v0.7.0 (protocol 1) did not have this request type
+ }
+ return protocol;
}
/**
@@ -128,6 +161,24 @@
}
/**
+ * Tries to pull the gitblit team definitions from the remote gitblit
+ * instance.
+ *
+ * @param serverUrl
+ * @param account
+ * @param password
+ * @return a collection of UserModel objects
+ * @throws IOException
+ */
+ public static List<TeamModel> getTeams(String serverUrl, String account, char[] password)
+ throws IOException {
+ String url = asLink(serverUrl, RpcRequest.LIST_TEAMS);
+ Collection<TeamModel> models = JsonUtils.retrieveJson(url, TEAMS_TYPE, account, password);
+ List<TeamModel> list = new ArrayList<TeamModel>(models);
+ return list;
+ }
+
+ /**
* Create a repository on the Gitblit server.
*
* @param repository
@@ -139,6 +190,10 @@
*/
public static boolean createRepository(RepositoryModel repository, String serverUrl,
String account, char[] password) throws IOException {
+ // ensure repository name ends with .git
+ if (!repository.name.endsWith(".git")) {
+ repository.name += ".git";
+ }
return doAction(RpcRequest.CREATE_REPOSITORY, null, repository, serverUrl, account,
password);
@@ -225,6 +280,53 @@
}
/**
+ * Create a team on the Gitblit server.
+ *
+ * @param team
+ * @param serverUrl
+ * @param account
+ * @param password
+ * @return true if the action succeeded
+ * @throws IOException
+ */
+ public static boolean createTeam(TeamModel team, String serverUrl, String account,
+ char[] password) throws IOException {
+ return doAction(RpcRequest.CREATE_TEAM, null, team, serverUrl, account, password);
+
+ }
+
+ /**
+ * Send a revised version of the team model to the Gitblit server.
+ *
+ * @param team
+ * @param serverUrl
+ * @param account
+ * @param password
+ * @return true if the action succeeded
+ * @throws IOException
+ */
+ public static boolean updateTeam(String teamname, TeamModel team, String serverUrl,
+ String account, char[] password) throws IOException {
+ return doAction(RpcRequest.EDIT_TEAM, teamname, team, serverUrl, account, password);
+
+ }
+
+ /**
+ * Deletes a team from the Gitblit server.
+ *
+ * @param team
+ * @param serverUrl
+ * @param account
+ * @param password
+ * @return true if the action succeeded
+ * @throws IOException
+ */
+ public static boolean deleteTeam(TeamModel team, String serverUrl, String account,
+ char[] password) throws IOException {
+ return doAction(RpcRequest.DELETE_TEAM, null, team, serverUrl, account, password);
+ }
+
+ /**
* Retrieves the list of users that can access the specified repository.
*
* @param repository
@@ -242,7 +344,7 @@
}
/**
- * Sets the repository membership list.
+ * Sets the repository user membership list.
*
* @param repository
* @param memberships
@@ -256,6 +358,41 @@
List<String> memberships, String serverUrl, String account, char[] password)
throws IOException {
return doAction(RpcRequest.SET_REPOSITORY_MEMBERS, repository.name, memberships, serverUrl,
+ account, password);
+ }
+
+ /**
+ * Retrieves the list of teams that can access the specified repository.
+ *
+ * @param repository
+ * @param serverUrl
+ * @param account
+ * @param password
+ * @return list of teams
+ * @throws IOException
+ */
+ public static List<String> getRepositoryTeams(RepositoryModel repository, String serverUrl,
+ String account, char[] password) throws IOException {
+ String url = asLink(serverUrl, RpcRequest.LIST_REPOSITORY_TEAMS, repository.name);
+ Collection<String> list = JsonUtils.retrieveJson(url, NAMES_TYPE, account, password);
+ return new ArrayList<String>(list);
+ }
+
+ /**
+ * Sets the repository team membership list.
+ *
+ * @param repository
+ * @param teams
+ * @param serverUrl
+ * @param account
+ * @param password
+ * @return true if the action succeeded
+ * @throws IOException
+ */
+ public static boolean setRepositoryTeams(RepositoryModel repository,
+ List<String> teams, String serverUrl, String account, char[] password)
+ throws IOException {
+ return doAction(RpcRequest.SET_REPOSITORY_TEAMS, repository.name, teams, serverUrl,
account, password);
}
@@ -338,15 +475,90 @@
* @param serverUrl
* @param account
* @param password
- * @return an IStoredSettings object
+ * @return an Settings object
* @throws IOException
*/
- public static IStoredSettings getSettings(String serverUrl, String account, char[] password)
+ public static ServerSettings getSettings(String serverUrl, String account, char[] password)
throws IOException {
String url = asLink(serverUrl, RpcRequest.LIST_SETTINGS);
- Properties props = JsonUtils.retrieveJson(url, Properties.class, account, password);
- RpcSettings settings = new RpcSettings(props);
+ ServerSettings settings = JsonUtils.retrieveJson(url, ServerSettings.class, account,
+ password);
return settings;
+ }
+
+ /**
+ * Update the settings on the Gitblit server.
+ *
+ * @param settings
+ * the settings to update
+ * @param serverUrl
+ * @param account
+ * @param password
+ * @return true if the action succeeded
+ * @throws IOException
+ */
+ public static boolean updateSettings(Map<String, String> settings, String serverUrl,
+ String account, char[] password) throws IOException {
+ return doAction(RpcRequest.EDIT_SETTINGS, null, settings, serverUrl, account, password);
+
+ }
+
+ /**
+ * Retrieves the server status object.
+ *
+ * @param serverUrl
+ * @param account
+ * @param password
+ * @return an ServerStatus object
+ * @throws IOException
+ */
+ public static ServerStatus getStatus(String serverUrl, String account, char[] password)
+ throws IOException {
+ String url = asLink(serverUrl, RpcRequest.LIST_STATUS);
+ ServerStatus status = JsonUtils.retrieveJson(url, ServerStatus.class, account, password);
+ return status;
+ }
+
+ /**
+ * Retrieves a map of local branches in the Gitblit server keyed by
+ * repository.
+ *
+ * @param serverUrl
+ * @param account
+ * @param password
+ * @return
+ * @throws IOException
+ */
+ public static Map<String, Collection<String>> getBranches(String serverUrl, String account,
+ char[] password) throws IOException {
+ String url = asLink(serverUrl, RpcRequest.LIST_BRANCHES);
+ Map<String, Collection<String>> branches = JsonUtils.retrieveJson(url, BRANCHES_TYPE,
+ account, password);
+ return branches;
+ }
+
+ /**
+ * Retrieves a list of available branch feeds in the Gitblit server.
+ *
+ * @param serverUrl
+ * @param account
+ * @param password
+ * @return
+ * @throws IOException
+ */
+ public static List<FeedModel> getBranchFeeds(String serverUrl, String account, char[] password)
+ throws IOException {
+ List<FeedModel> feeds = new ArrayList<FeedModel>();
+ Map<String, Collection<String>> allBranches = getBranches(serverUrl, account, password);
+ for (Map.Entry<String, Collection<String>> entry : allBranches.entrySet()) {
+ for (String branch : entry.getValue()) {
+ FeedModel feed = new FeedModel();
+ feed.repository = entry.getKey();
+ feed.branch = branch;
+ feeds.add(feed);
+ }
+ }
+ return feeds;
}
/**
@@ -368,32 +580,5 @@
String json = JsonUtils.toJsonString(object);
int resultCode = JsonUtils.sendJsonString(url, json, account, password);
return resultCode == 200;
- }
-
- /**
- * Settings implementation that wraps a retrieved properties instance. This
- * class is used for RPC communication.
- *
- * @author James Moger
- *
- */
- private static class RpcSettings extends IStoredSettings {
-
- private final Properties properties = new Properties();
-
- public RpcSettings(Properties props) {
- super(RpcSettings.class);
- properties.putAll(props);
- }
-
- @Override
- protected Properties read() {
- return properties;
- }
-
- @Override
- public String toString() {
- return "RpcSettings";
- }
}
}
--
Gitblit v1.9.1