From f6740d55ff80bc6e16da5c3df0ee1ba2235d6629 Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Mon, 26 Sep 2011 15:33:19 -0400 Subject: [PATCH] Implemented a Federation Client. Bare clone tweaks. Documentation. --- src/com/gitblit/GitBlit.java | 87 ++++--------------------------------------- 1 files changed, 9 insertions(+), 78 deletions(-) diff --git a/src/com/gitblit/GitBlit.java b/src/com/gitblit/GitBlit.java index c2b214b..62b93e7 100644 --- a/src/com/gitblit/GitBlit.java +++ b/src/com/gitblit/GitBlit.java @@ -61,6 +61,7 @@ import com.gitblit.models.FederationProposal; import com.gitblit.models.RepositoryModel; import com.gitblit.models.UserModel; +import com.gitblit.utils.FederationUtils; import com.gitblit.utils.JGitUtils; import com.gitblit.utils.StringUtils; import com.google.gson.Gson; @@ -830,8 +831,8 @@ // Schedule the federation executor List<FederationModel> registrations = getFederationRegistrations(); if (registrations.size() > 0) { - scheduledExecutor.schedule(new FederationPullExecutor(registrations), 1, - TimeUnit.MINUTES); + FederationPullExecutor executor = new FederationPullExecutor(registrations, true); + scheduledExecutor.schedule(executor, 1, TimeUnit.MINUTES); } } @@ -843,79 +844,7 @@ */ public List<FederationModel> getFederationRegistrations() { if (federationRegistrations.isEmpty()) { - List<String> keys = settings.getAllKeys(Keys.federation._ROOT); - keys.remove(Keys.federation.name); - keys.remove(Keys.federation.passphrase); - keys.remove(Keys.federation.allowProposals); - keys.remove(Keys.federation.proposalsFolder); - keys.remove(Keys.federation.defaultFrequency); - keys.remove(Keys.federation.sets); - Collections.sort(keys); - Map<String, FederationModel> federatedModels = new HashMap<String, FederationModel>(); - for (String key : keys) { - String value = key.substring(Keys.federation._ROOT.length() + 1); - List<String> values = StringUtils.getStringsFromValue(value, "\\."); - String server = values.get(0); - if (!federatedModels.containsKey(server)) { - federatedModels.put(server, new FederationModel(server)); - } - String setting = values.get(1); - if (setting.equals("url")) { - // url of the origin Gitblit instance - federatedModels.get(server).url = settings.getString(key, ""); - } else if (setting.equals("token")) { - // token for the origin Gitblit instance - federatedModels.get(server).token = settings.getString(key, ""); - } else if (setting.equals("frequency")) { - // frequency of the pull operation - federatedModels.get(server).frequency = settings.getString(key, ""); - } else if (setting.equals("folder")) { - // destination folder of the pull operation - federatedModels.get(server).folder = settings.getString(key, ""); - } else if (setting.equals("bare")) { - // whether pulled repositories should be bare - federatedModels.get(server).bare = settings.getBoolean(key, true); - } else if (setting.equals("mirror")) { - // are the repositories to be true mirrors of the origin - federatedModels.get(server).mirror = settings.getBoolean(key, true); - } else if (setting.equals("mergeAccounts")) { - // merge remote accounts into local accounts - federatedModels.get(server).mergeAccounts = settings.getBoolean(key, false); - } else if (setting.equals("sendStatus")) { - // send a status acknowledgment to source Gitblit instance - // at end of git pull - federatedModels.get(server).sendStatus = settings.getBoolean(key, false); - } else if (setting.equals("notifyOnError")) { - // notify administrators on federation pull failures - federatedModels.get(server).notifyOnError = settings.getBoolean(key, false); - } else if (setting.equals("exclude")) { - // excluded repositories - federatedModels.get(server).exclusions = settings.getStrings(key); - } else if (setting.equals("include")) { - // included repositories - federatedModels.get(server).inclusions = settings.getStrings(key); - } - } - - // verify that registrations have a url and a token - for (FederationModel model : federatedModels.values()) { - if (StringUtils.isEmpty(model.url)) { - logger.warn(MessageFormat.format( - "Dropping federation registration {0}. Missing url.", model.name)); - continue; - } - if (StringUtils.isEmpty(model.token)) { - logger.warn(MessageFormat.format( - "Dropping federation registration {0}. Missing token.", model.name)); - continue; - } - // set default frequency if unspecified - if (StringUtils.isEmpty(model.frequency)) { - model.frequency = settings.getString(Keys.federation.defaultFrequency, - "60 mins"); - } - federationRegistrations.add(model); - } + federationRegistrations.addAll(FederationUtils.getFederationRegistrations(settings)); } return federationRegistrations; } @@ -1239,7 +1168,7 @@ * * @param settings */ - public void configureContext(IStoredSettings settings) { + public void configureContext(IStoredSettings settings, boolean startFederation) { logger.info("Reading configuration from " + settings.toString()); this.settings = settings; repositoriesFolder = new File(settings.getString(Keys.git.repositoriesFolder, "git")); @@ -1268,12 +1197,14 @@ loginService = new FileUserService(realmFile); } setUserService(loginService); - configureFederation(); mailExecutor = new MailExecutor(settings); if (mailExecutor.isReady()) { scheduledExecutor.scheduleAtFixedRate(mailExecutor, 1, 2, TimeUnit.MINUTES); } else { logger.warn("Mail server is not properly configured. Mail services disabled."); + } + if (startFederation) { + configureFederation(); } } @@ -1288,7 +1219,7 @@ if (settings == null) { // Gitblit WAR is running in a servlet container WebXmlSettings webxmlSettings = new WebXmlSettings(contextEvent.getServletContext()); - configureContext(webxmlSettings); + configureContext(webxmlSettings, true); } } -- Gitblit v1.9.1