From f762b160efd5cafd919a6fd7f9587f578eceb454 Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Sun, 02 Oct 2011 16:59:44 -0400 Subject: [PATCH] Merge branch 'master' into rpc --- src/com/gitblit/GitBlit.java | 130 +++++++++++++++---------------------------- 1 files changed, 45 insertions(+), 85 deletions(-) diff --git a/src/com/gitblit/GitBlit.java b/src/com/gitblit/GitBlit.java index c2b214b..1727038 100644 --- a/src/com/gitblit/GitBlit.java +++ b/src/com/gitblit/GitBlit.java @@ -59,12 +59,14 @@ import com.gitblit.Constants.FederationToken; import com.gitblit.models.FederationModel; import com.gitblit.models.FederationProposal; +import com.gitblit.models.FederationSet; import com.gitblit.models.RepositoryModel; import com.gitblit.models.UserModel; +import com.gitblit.utils.ByteFormat; +import com.gitblit.utils.FederationUtils; import com.gitblit.utils.JGitUtils; +import com.gitblit.utils.JsonUtils; import com.gitblit.utils.StringUtils; -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; /** * GitBlit is the servlet context listener singleton that acts as the core for @@ -248,6 +250,7 @@ public void setUserService(IUserService userService) { logger.info("Setting up user service " + userService.toString()); this.userService = userService; + this.userService.setup(settings); } /** @@ -528,6 +531,10 @@ model.origin = config.getString("remote", "origin", "url"); } r.close(); + if (getBoolean(Keys.web.showRepositorySizes, true)) { + ByteFormat byteFormat = new ByteFormat(); + model.size = byteFormat.format(calculateSize(model)); + } return model; } @@ -830,8 +837,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 +850,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; } @@ -942,6 +877,29 @@ } } return null; + } + + /** + * Returns the list of federation sets. + * + * @return list of federation sets + */ + public List<FederationSet> getFederationSets(String gitblitUrl) { + List<FederationSet> list = new ArrayList<FederationSet>(); + // generate standard tokens + for (FederationToken type : FederationToken.values()) { + FederationSet fset = new FederationSet(type.toString(), type, getFederationToken(type)); + fset.repositories = getRepositories(gitblitUrl, fset.token); + list.add(fset); + } + // generate tokens for federation sets + for (String set : settings.getStrings(Keys.federation.sets)) { + FederationSet fset = new FederationSet(set, FederationToken.REPOSITORIES, + getFederationToken(set)); + fset.repositories = getRepositories(gitblitUrl, fset.token); + list.add(fset); + } + return list; } /** @@ -1042,13 +1000,13 @@ * @param proposal * the proposal * @param gitblitUrl - * the url of your gitblit instance + * the url of your gitblit instance to send an email to + * administrators * @return true if the proposal was submitted */ public boolean submitFederationProposal(FederationProposal proposal, String gitblitUrl) { // convert proposal to json - Gson gson = new GsonBuilder().setPrettyPrinting().create(); - String json = gson.toJson(proposal); + String json = JsonUtils.toJsonString(proposal); try { // make the proposals folder @@ -1094,10 +1052,10 @@ && file.getName().toLowerCase().endsWith(Constants.PROPOSAL_EXT); } }); - Gson gson = new Gson(); for (File file : files) { String json = com.gitblit.utils.FileUtils.readContent(file, null); - FederationProposal proposal = gson.fromJson(json, FederationProposal.class); + FederationProposal proposal = JsonUtils.fromJsonString(json, + FederationProposal.class); list.add(proposal); } } @@ -1239,7 +1197,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 +1226,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 +1248,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