From f96d3233fde0d6dc5b61690e59794d209d77ae90 Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Wed, 06 Jun 2012 22:11:54 -0400 Subject: [PATCH] Possible fix for federation branch mirroring issue (issue 86) --- src/com/gitblit/GitBlit.java | 82 ++++++++++++++++++++++++++--------------- 1 files changed, 52 insertions(+), 30 deletions(-) diff --git a/src/com/gitblit/GitBlit.java b/src/com/gitblit/GitBlit.java index a95e4f7..969dc53 100644 --- a/src/com/gitblit/GitBlit.java +++ b/src/com/gitblit/GitBlit.java @@ -30,6 +30,7 @@ import java.util.Collections; import java.util.Date; import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.List; import java.util.Map; @@ -252,6 +253,17 @@ */ public static List<String> getStrings(String key) { return self().settings.getStrings(key); + } + + /** + * Returns a map of space-separated key-value pairs from the specified key. + * + * @see IStoredSettings.getStrings(String key) + * @param name + * @return map of string, string + */ + public static Map<String, String> getMap(String key) { + return self().settings.getMap(key); } /** @@ -837,7 +849,7 @@ model.useTickets = getConfig(config, "useTickets", false); model.useDocs = getConfig(config, "useDocs", false); model.accessRestriction = AccessRestrictionType.fromName(getConfig(config, - "accessRestriction", null)); + "accessRestriction", settings.getString(Keys.git.defaultAccessRestriction, null))); model.showRemoteBranches = getConfig(config, "showRemoteBranches", false); model.isFrozen = getConfig(config, "isFrozen", false); model.showReadme = getConfig(config, "showReadme", false); @@ -846,22 +858,22 @@ model.federationStrategy = FederationStrategy.fromName(getConfig(config, "federationStrategy", null)); model.federationSets = new ArrayList<String>(Arrays.asList(config.getStringList( - "gitblit", null, "federationSets"))); + Constants.CONFIG_GITBLIT, null, "federationSets"))); model.isFederated = getConfig(config, "isFederated", false); model.origin = config.getString("remote", "origin", "url"); model.preReceiveScripts = new ArrayList<String>(Arrays.asList(config.getStringList( - "gitblit", null, "preReceiveScript"))); + Constants.CONFIG_GITBLIT, null, "preReceiveScript"))); model.postReceiveScripts = new ArrayList<String>(Arrays.asList(config.getStringList( - "gitblit", null, "postReceiveScript"))); + Constants.CONFIG_GITBLIT, null, "postReceiveScript"))); model.mailingLists = new ArrayList<String>(Arrays.asList(config.getStringList( - "gitblit", null, "mailingList"))); + Constants.CONFIG_GITBLIT, null, "mailingList"))); model.indexedBranches = new ArrayList<String>(Arrays.asList(config.getStringList( - "gitblit", null, "indexBranch"))); + Constants.CONFIG_GITBLIT, null, "indexBranch"))); // Custom defined properties - model.userDefinedProperties = new HashMap<String, String>(); - for (String aProperty : config.getNames(Constants.CUSTOM_DEFINED_PROP_SECTION, Constants.CUSTOM_DEFINED_PROP_SUBSECTION)) { - model.userDefinedProperties.put(aProperty, config.getString(Constants.CUSTOM_DEFINED_PROP_SECTION, Constants.CUSTOM_DEFINED_PROP_SUBSECTION, aProperty)); + model.customFields = new LinkedHashMap<String, String>(); + for (String aProperty : config.getNames(Constants.CONFIG_GITBLIT, Constants.CONFIG_CUSTOM_FIELDS)) { + model.customFields.put(aProperty, config.getString(Constants.CONFIG_GITBLIT, Constants.CONFIG_CUSTOM_FIELDS, aProperty)); } } model.HEAD = JGitUtils.getHEADRef(r); @@ -956,7 +968,7 @@ * @return field value or defaultValue */ private String getConfig(StoredConfig config, String field, String defaultValue) { - String value = config.getString("gitblit", null, field); + String value = config.getString(Constants.CONFIG_GITBLIT, null, field); if (StringUtils.isEmpty(value)) { return defaultValue; } @@ -964,7 +976,7 @@ } /** - * Returns the gitblit boolean vlaue for the specified key. If key is not + * Returns the gitblit boolean value for the specified key. If key is not * set, returns defaultValue. * * @param config @@ -973,7 +985,7 @@ * @return field value or defaultValue */ private boolean getConfig(StoredConfig config, String field, boolean defaultValue) { - return config.getBoolean("gitblit", field, defaultValue); + return config.getBoolean(Constants.CONFIG_GITBLIT, field, defaultValue); } /** @@ -1090,19 +1102,19 @@ */ public void updateConfiguration(Repository r, RepositoryModel repository) { StoredConfig config = JGitUtils.readConfig(r); - config.setString("gitblit", null, "description", repository.description); - config.setString("gitblit", null, "owner", repository.owner); - config.setBoolean("gitblit", null, "useTickets", repository.useTickets); - config.setBoolean("gitblit", null, "useDocs", repository.useDocs); - config.setString("gitblit", null, "accessRestriction", repository.accessRestriction.name()); - config.setBoolean("gitblit", null, "showRemoteBranches", repository.showRemoteBranches); - config.setBoolean("gitblit", null, "isFrozen", repository.isFrozen); - config.setBoolean("gitblit", null, "showReadme", repository.showReadme); - config.setBoolean("gitblit", null, "skipSizeCalculation", repository.skipSizeCalculation); - config.setBoolean("gitblit", null, "skipSummaryMetrics", repository.skipSummaryMetrics); - config.setString("gitblit", null, "federationStrategy", + config.setString(Constants.CONFIG_GITBLIT, null, "description", repository.description); + config.setString(Constants.CONFIG_GITBLIT, null, "owner", repository.owner); + config.setBoolean(Constants.CONFIG_GITBLIT, null, "useTickets", repository.useTickets); + config.setBoolean(Constants.CONFIG_GITBLIT, null, "useDocs", repository.useDocs); + config.setString(Constants.CONFIG_GITBLIT, null, "accessRestriction", repository.accessRestriction.name()); + config.setBoolean(Constants.CONFIG_GITBLIT, null, "showRemoteBranches", repository.showRemoteBranches); + config.setBoolean(Constants.CONFIG_GITBLIT, null, "isFrozen", repository.isFrozen); + config.setBoolean(Constants.CONFIG_GITBLIT, null, "showReadme", repository.showReadme); + config.setBoolean(Constants.CONFIG_GITBLIT, null, "skipSizeCalculation", repository.skipSizeCalculation); + config.setBoolean(Constants.CONFIG_GITBLIT, null, "skipSummaryMetrics", repository.skipSummaryMetrics); + config.setString(Constants.CONFIG_GITBLIT, null, "federationStrategy", repository.federationStrategy.name()); - config.setBoolean("gitblit", null, "isFederated", repository.isFederated); + config.setBoolean(Constants.CONFIG_GITBLIT, null, "isFederated", repository.isFederated); updateList(config, "federationSets", repository.federationSets); updateList(config, "preReceiveScript", repository.preReceiveScripts); @@ -1111,8 +1123,18 @@ updateList(config, "indexBranch", repository.indexedBranches); // User Defined Properties - for (Entry<String, String> singleProperty : repository.userDefinedProperties.entrySet()) { - config.setString(Constants.CUSTOM_DEFINED_PROP_SECTION, Constants.CUSTOM_DEFINED_PROP_SUBSECTION, singleProperty.getKey(), singleProperty.getValue()); + if (repository.customFields != null) { + if (repository.customFields.size() == 0) { + // clear section + config.unsetSection(Constants.CONFIG_GITBLIT, Constants.CONFIG_CUSTOM_FIELDS); + } else { + for (Entry<String, String> property : repository.customFields.entrySet()) { + // set field + String key = property.getKey(); + String value = property.getValue(); + config.setString(Constants.CONFIG_GITBLIT, Constants.CONFIG_CUSTOM_FIELDS, key, value); + } + } } try { @@ -1129,9 +1151,9 @@ return; } if (ArrayUtils.isEmpty(list)) { - config.unset("gitblit", null, field); + config.unset(Constants.CONFIG_GITBLIT, null, field); } else { - config.setStringList("gitblit", null, field, list); + config.setStringList(Constants.CONFIG_GITBLIT, null, field, list); } } @@ -1926,7 +1948,6 @@ @Override public void contextInitialized(ServletContextEvent contextEvent) { servletContext = contextEvent.getServletContext(); - settingsModel = loadSettingModels(); if (settings == null) { // Gitblit WAR is running in a servlet container ServletContext context = contextEvent.getServletContext(); @@ -1965,7 +1986,8 @@ } } } - + + settingsModel = loadSettingModels(); serverStatus.servletContainer = servletContext.getServerInfo(); } -- Gitblit v1.9.1