]> source.dussan.org Git - gitblit.git/commitdiff
Allow configuring the default integration branch for a repository
authorJames Moger <james.moger@gitblit.com>
Sat, 8 Mar 2014 20:39:36 +0000 (15:39 -0500)
committerJames Moger <james.moger@gitblit.com>
Sat, 8 Mar 2014 20:39:36 +0000 (15:39 -0500)
src/main/java/com/gitblit/client/EditRepositoryDialog.java
src/main/java/com/gitblit/manager/RepositoryManager.java
src/main/java/com/gitblit/models/RepositoryModel.java
src/main/java/com/gitblit/wicket/GitBlitWebApp.properties
src/main/java/com/gitblit/wicket/pages/EditRepositoryPage.html
src/main/java/com/gitblit/wicket/pages/EditRepositoryPage.java
src/main/java/com/gitblit/wicket/pages/EditTicketPage.java
src/main/java/com/gitblit/wicket/pages/NewTicketPage.java
src/main/java/com/gitblit/wicket/pages/TicketPage.java

index c3690f374622320424050f7367fee02e0277f23b..ef665d10e21cd752670148c522214a90e6e59adc 100644 (file)
@@ -58,6 +58,8 @@ import javax.swing.KeyStroke;
 import javax.swing.ListCellRenderer;\r
 import javax.swing.ScrollPaneConstants;\r
 \r
+import org.eclipse.jgit.lib.Repository;\r
+\r
 import com.gitblit.Constants.AccessRestrictionType;\r
 import com.gitblit.Constants.AuthorizationControl;\r
 import com.gitblit.Constants.FederationStrategy;\r
@@ -92,7 +94,9 @@ public class EditRepositoryDialog extends JDialog {
 \r
        private JCheckBox acceptNewTickets;\r
 \r
-       private JCheckBox requireApproval;
+       private JCheckBox requireApproval;\r
+\r
+       private JComboBox mergeToField;
 
        private JCheckBox useIncrementalPushTags;\r
 \r
@@ -217,6 +221,16 @@ public class EditRepositoryDialog extends JDialog {
                                anRepository.acceptNewPatchsets);\r
                requireApproval = new JCheckBox(Translation.get("gb.requireApprovalDescription"),\r
                                anRepository.requireApproval);\r
+\r
+               if (ArrayUtils.isEmpty(anRepository.availableRefs)) {\r
+                       mergeToField = new JComboBox();\r
+                       mergeToField.setEnabled(false);\r
+               } else {\r
+                       mergeToField = new JComboBox(\r
+                                       anRepository.availableRefs.toArray());\r
+                       mergeToField.setSelectedItem(anRepository.mergeTo);\r
+               }\r
+\r
                useIncrementalPushTags = new JCheckBox(Translation.get("gb.useIncrementalPushTagsDescription"),\r
                                anRepository.useIncrementalPushTags);\r
                showRemoteBranches = new JCheckBox(\r
@@ -316,6 +330,7 @@ public class EditRepositoryDialog extends JDialog {
                                acceptNewPatchsets));\r
                fieldsPanel.add(newFieldPanel(Translation.get("gb.requireApproval"),\r
                                requireApproval));\r
+               fieldsPanel.add(newFieldPanel(Translation.get("gb.mergeTo"), mergeToField));\r
                fieldsPanel\r
                .add(newFieldPanel(Translation.get("gb.enableIncrementalPushTags"), useIncrementalPushTags));\r
                fieldsPanel.add(newFieldPanel(Translation.get("gb.showRemoteBranches"),\r
@@ -573,6 +588,8 @@ public class EditRepositoryDialog extends JDialog {
                repository.acceptNewPatchsets = acceptNewPatchsets.isSelected();\r
                repository.acceptNewTickets = acceptNewTickets.isSelected();\r
                repository.requireApproval = requireApproval.isSelected();
+               repository.mergeTo = mergeToField.getSelectedItem() == null ? null\r
+                               : Repository.shortenRefName(mergeToField.getSelectedItem().toString());\r
                repository.useIncrementalPushTags = useIncrementalPushTags.isSelected();\r
                repository.showRemoteBranches = showRemoteBranches.isSelected();\r
                repository.skipSizeCalculation = skipSizeCalculation.isSelected();\r
index 1e917984e5c481ae8a903a1ddf4938d2c8481f45..839671c2eb34a81fe98f2cf6f25eaebafe5217a8 100644 (file)
@@ -804,6 +804,7 @@ public class RepositoryManager implements IRepositoryManager {
                        model.acceptNewPatchsets = getConfig(config, "acceptNewPatchsets", true);
                        model.acceptNewTickets = getConfig(config, "acceptNewTickets", true);
                        model.requireApproval = getConfig(config, "requireApproval", settings.getBoolean(Keys.tickets.requireApproval, false));
+                       model.mergeTo = getConfig(config, "mergeTo", null);
                        model.useIncrementalPushTags = getConfig(config, "useIncrementalPushTags", false);
                        model.incrementalPushTagPrefix = getConfig(config, "incrementalPushTagPrefix", null);
                        model.allowForks = getConfig(config, "allowForks", true);
@@ -854,6 +855,9 @@ public class RepositoryManager implements IRepositoryManager {
                        }
                }
                model.HEAD = JGitUtils.getHEADRef(r);
+               if (StringUtils.isEmpty(model.mergeTo)) {
+                       model.mergeTo = model.HEAD;
+               }
                model.availableRefs = JGitUtils.getAvailableHeadTargets(r);
                model.sparkleshareId = JGitUtils.getSparkleshareId(r);
                model.hasCommits = JGitUtils.hasCommits(r);
@@ -1418,6 +1422,9 @@ public class RepositoryManager implements IRepositoryManager {
                        // override default
                        config.setBoolean(Constants.CONFIG_GITBLIT, null, "requireApproval", repository.requireApproval);
                }
+               if (!StringUtils.isEmpty(repository.mergeTo)) {
+                       config.setString(Constants.CONFIG_GITBLIT, null, "mergeTo", repository.mergeTo);
+               }
                config.setBoolean(Constants.CONFIG_GITBLIT, null, "useIncrementalPushTags", repository.useIncrementalPushTags);
                if (StringUtils.isEmpty(repository.incrementalPushTagPrefix) ||
                                repository.incrementalPushTagPrefix.equals(settings.getString(Keys.git.defaultIncrementalPushTagPrefix, "r"))) {
index 5bd2ec038a2f68a70276cbdd848905a3c3c79d5e..f84e96b938f63fa012ae3db2f1f17bb058d4b768 100644 (file)
@@ -88,6 +88,7 @@ public class RepositoryModel implements Serializable, Comparable<RepositoryModel
        public boolean acceptNewPatchsets;\r
        public boolean acceptNewTickets;\r
        public boolean requireApproval;
+       public String mergeTo;\r
 \r
        public transient boolean isCollectingGarbage;\r
        public Date lastGC;\r
index 9f090c897dff41170750ecce1d7a86e819ac9fea..2ab023ff04ecb0db80429a7a2361ae73bf628150 100644 (file)
@@ -669,3 +669,4 @@ gb.repositoryIsFrozen = This repository is frozen.
 gb.repositoryDoesNotAcceptPatchsets = This repository does not accept patchsets.
 gb.serverDoesNotAcceptPatchsets = This server does not accept patchsets.
 gb.ticketIsClosed = This ticket is closed.
+gb.mergeToDescription = default integration branch for merging ticket patchsets
index da19ca0fdd4e98de1316f015d0c69c53facc04d5..f82ac3d56b6bcbfafec2659816a45daa347381de 100644 (file)
                                <tr><th><wicket:message key="gb.acceptNewTickets"></wicket:message></th><td class="edit"><label class="checkbox"><input type="checkbox" wicket:id="acceptNewTickets" tabindex="7" /> &nbsp;<span class="help-inline"><wicket:message key="gb.acceptNewTicketsDescription"></wicket:message></span></label></td></tr>\r
                                <tr><th><wicket:message key="gb.acceptNewPatchsets"></wicket:message></th><td class="edit"><label class="checkbox"><input type="checkbox" wicket:id="acceptNewPatchsets" tabindex="8" /> &nbsp;<span class="help-inline"><wicket:message key="gb.acceptNewPatchsetsDescription"></wicket:message></span></label></td></tr>\r
                                <tr><th><wicket:message key="gb.requireApproval"></wicket:message></th><td class="edit"><label class="checkbox"><input type="checkbox" wicket:id="requireApproval" tabindex="9" /> &nbsp;<span class="help-inline"><wicket:message key="gb.requireApprovalDescription"></wicket:message></span></label></td></tr>\r
-                               <tr><th><wicket:message key="gb.enableIncrementalPushTags"></wicket:message></th><td class="edit"><label class="checkbox"><input type="checkbox" wicket:id="useIncrementalPushTags" tabindex="10" /> &nbsp;<span class="help-inline"><wicket:message key="gb.useIncrementalPushTagsDescription"></wicket:message></span></label></td></tr>\r
-                               <tr><th><wicket:message key="gb.showRemoteBranches"></wicket:message></th><td class="edit"><label class="checkbox"><input type="checkbox" wicket:id="showRemoteBranches" tabindex="11" /> &nbsp;<span class="help-inline"><wicket:message key="gb.showRemoteBranchesDescription"></wicket:message></span></label></td></tr>\r
-                               <tr><th><wicket:message key="gb.skipSizeCalculation"></wicket:message></th><td class="edit"><label class="checkbox"><input type="checkbox" wicket:id="skipSizeCalculation" tabindex="12" /> &nbsp;<span class="help-inline"><wicket:message key="gb.skipSizeCalculationDescription"></wicket:message></span></label></td></tr>\r
-                               <tr><th><wicket:message key="gb.skipSummaryMetrics"></wicket:message></th><td class="edit"><label class="checkbox"><input type="checkbox" wicket:id="skipSummaryMetrics" tabindex="13" /> &nbsp;<span class="help-inline"><wicket:message key="gb.skipSummaryMetricsDescription"></wicket:message></span></label></td></tr>\r
-                               <tr><th><wicket:message key="gb.maxActivityCommits"></wicket:message></th><td class="edit"><select class="span2" wicket:id="maxActivityCommits" tabindex="14" /> &nbsp;<span class="help-inline"><wicket:message key="gb.maxActivityCommitsDescription"></wicket:message></span></td></tr>\r
-                               <tr><th><wicket:message key="gb.metricAuthorExclusions"></wicket:message></th><td class="edit"><input class="span8" type="text" wicket:id="metricAuthorExclusions" size="40" tabindex="15" /></td></tr>\r
-                               <tr><th><wicket:message key="gb.commitMessageRenderer"></wicket:message></th><td class="edit"><select class="span2" wicket:id="commitMessageRenderer" tabindex="16" /></td></tr>\r
+                               <tr><th><wicket:message key="gb.mergeTo"></wicket:message></th><td class="edit"><select class="span2" wicket:id="mergeTo" tabindex="10" /> &nbsp;<span class="help-inline"><wicket:message key="gb.mergeToDescription"></wicket:message></span></td></tr>\r
                                <tr><th colspan="2"><hr/></th></tr>\r
-                               <tr><th><wicket:message key="gb.mailingLists"></wicket:message></th><td class="edit"><input class="span8" type="text" wicket:id="mailingLists" size="40" tabindex="17" /></td></tr>\r
+                               <tr><th><wicket:message key="gb.enableIncrementalPushTags"></wicket:message></th><td class="edit"><label class="checkbox"><input type="checkbox" wicket:id="useIncrementalPushTags" tabindex="11" /> &nbsp;<span class="help-inline"><wicket:message key="gb.useIncrementalPushTagsDescription"></wicket:message></span></label></td></tr>\r
+                               <tr><th><wicket:message key="gb.showRemoteBranches"></wicket:message></th><td class="edit"><label class="checkbox"><input type="checkbox" wicket:id="showRemoteBranches" tabindex="12" /> &nbsp;<span class="help-inline"><wicket:message key="gb.showRemoteBranchesDescription"></wicket:message></span></label></td></tr>\r
+                               <tr><th><wicket:message key="gb.skipSizeCalculation"></wicket:message></th><td class="edit"><label class="checkbox"><input type="checkbox" wicket:id="skipSizeCalculation" tabindex="13" /> &nbsp;<span class="help-inline"><wicket:message key="gb.skipSizeCalculationDescription"></wicket:message></span></label></td></tr>\r
+                               <tr><th><wicket:message key="gb.skipSummaryMetrics"></wicket:message></th><td class="edit"><label class="checkbox"><input type="checkbox" wicket:id="skipSummaryMetrics" tabindex="14" /> &nbsp;<span class="help-inline"><wicket:message key="gb.skipSummaryMetricsDescription"></wicket:message></span></label></td></tr>\r
+                               <tr><th><wicket:message key="gb.maxActivityCommits"></wicket:message></th><td class="edit"><select class="span2" wicket:id="maxActivityCommits" tabindex="15" /> &nbsp;<span class="help-inline"><wicket:message key="gb.maxActivityCommitsDescription"></wicket:message></span></td></tr>\r
+                               <tr><th><wicket:message key="gb.metricAuthorExclusions"></wicket:message></th><td class="edit"><input class="span8" type="text" wicket:id="metricAuthorExclusions" size="40" tabindex="16" /></td></tr>\r
+                               <tr><th><wicket:message key="gb.commitMessageRenderer"></wicket:message></th><td class="edit"><select class="span2" wicket:id="commitMessageRenderer" tabindex="17" /></td></tr>\r
+                               <tr><th colspan="2"><hr/></th></tr>\r
+                               <tr><th><wicket:message key="gb.mailingLists"></wicket:message></th><td class="edit"><input class="span8" type="text" wicket:id="mailingLists" size="40" tabindex="18" /></td></tr>\r
                        </tbody>\r
                </table>\r
                </div>\r
                <div class="tab-pane" id="permissions">\r
                        <table class="plain">\r
                                <tbody class="settings">\r
-                                       <tr><th><wicket:message key="gb.owners"></wicket:message></th><td class="edit"><span wicket:id="owners" tabindex="18" /> </td></tr>\r
+                                       <tr><th><wicket:message key="gb.owners"></wicket:message></th><td class="edit"><span wicket:id="owners" tabindex="19" /> </td></tr>\r
                                        <tr><th colspan="2"><hr/></th></tr>\r
-                                       <tr><th><wicket:message key="gb.accessRestriction"></wicket:message></th><td class="edit"><select class="span4" wicket:id="accessRestriction" tabindex="19" /></td></tr>\r
+                                       <tr><th><wicket:message key="gb.accessRestriction"></wicket:message></th><td class="edit"><select class="span4" wicket:id="accessRestriction" tabindex="20" /></td></tr>\r
                                        <tr><th colspan="2"><hr/></th></tr>\r
                                        <tr><th><wicket:message key="gb.authorizationControl"></wicket:message></th><td style="padding:2px;"><span class="authorizationControl" wicket:id="authorizationControl"></span></td></tr>\r
                                        <tr><th colspan="2"><hr/></th></tr>\r
-                                       <tr><th><wicket:message key="gb.isFrozen"></wicket:message></th><td class="edit"><label class="checkbox"><input type="checkbox" wicket:id="isFrozen" tabindex="20" /> &nbsp;<span class="help-inline"><wicket:message key="gb.isFrozenDescription"></wicket:message></span></label></td></tr>\r
-                                       <tr><th><wicket:message key="gb.allowForks"></wicket:message></th><td class="edit"><label class="checkbox"><input type="checkbox" wicket:id="allowForks" tabindex="21" /> &nbsp;<span class="help-inline"><wicket:message key="gb.allowForksDescription"></wicket:message></span></label></td></tr>\r
-                                       <tr><th><wicket:message key="gb.verifyCommitter"></wicket:message></th><td class="edit"><label class="checkbox"><input type="checkbox" wicket:id="verifyCommitter" tabindex="22" /> &nbsp;<span class="help-inline"><wicket:message key="gb.verifyCommitterDescription"></wicket:message></span><br/><span class="help-inline" style="padding-left:10px;"><wicket:message key="gb.verifyCommitterNote"></wicket:message></span></label></td></tr>\r
+                                       <tr><th><wicket:message key="gb.isFrozen"></wicket:message></th><td class="edit"><label class="checkbox"><input type="checkbox" wicket:id="isFrozen" tabindex="21" /> &nbsp;<span class="help-inline"><wicket:message key="gb.isFrozenDescription"></wicket:message></span></label></td></tr>\r
+                                       <tr><th><wicket:message key="gb.allowForks"></wicket:message></th><td class="edit"><label class="checkbox"><input type="checkbox" wicket:id="allowForks" tabindex="22" /> &nbsp;<span class="help-inline"><wicket:message key="gb.allowForksDescription"></wicket:message></span></label></td></tr>\r
+                                       <tr><th><wicket:message key="gb.verifyCommitter"></wicket:message></th><td class="edit"><label class="checkbox"><input type="checkbox" wicket:id="verifyCommitter" tabindex="23" /> &nbsp;<span class="help-inline"><wicket:message key="gb.verifyCommitterDescription"></wicket:message></span><br/><span class="help-inline" style="padding-left:10px;"><wicket:message key="gb.verifyCommitterNote"></wicket:message></span></label></td></tr>\r
                                        <tr><th colspan="2"><hr/></th></tr>\r
                                        <tr><th><wicket:message key="gb.userPermissions"></wicket:message></th><td style="padding:2px;"><span wicket:id="users"></span></td></tr>\r
                                        <tr><th colspan="2"><hr/></th></tr>\r
@@ -75,7 +77,7 @@
                <div class="tab-pane" id="federation">\r
                        <table class="plain">\r
                                <tbody class="settings">\r
-                                       <tr><th><wicket:message key="gb.federationStrategy"></wicket:message></th><td class="edit"><select class="span4" wicket:id="federationStrategy" tabindex="23" /></td></tr>\r
+                                       <tr><th><wicket:message key="gb.federationStrategy"></wicket:message></th><td class="edit"><select class="span4" wicket:id="federationStrategy" tabindex="24" /></td></tr>\r
                                        <tr><th><wicket:message key="gb.federationSets"></wicket:message></th><td style="padding:2px;"><span wicket:id="federationSets"></span></td></tr>\r
                                </tbody>\r
                        </table>\r
index 3a5f122fedbc3edaf0142047a81f88ab483f763d..f860eeb33bb0c3222c4842eb9fb784e3f38c813b 100644 (file)
@@ -49,6 +49,7 @@ import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;\r
 import org.apache.wicket.model.util.CollectionModel;\r
 import org.apache.wicket.model.util.ListModel;\r
+import org.eclipse.jgit.lib.Repository;\r
 \r
 import com.gitblit.Constants;\r
 import com.gitblit.Constants.AccessRestrictionType;\r
@@ -443,8 +444,16 @@ public class EditRepositoryPage extends RootSubPage {
 \r
                // allow relinking HEAD to a branch or tag other than master on edit repository\r
                List<String> availableRefs = new ArrayList<String>();\r
+               List<String> availableBranches = new ArrayList<String>();\r
                if (!ArrayUtils.isEmpty(repositoryModel.availableRefs)) {\r
-                       availableRefs.addAll(repositoryModel.availableRefs);\r
+                       for (String ref : repositoryModel.availableRefs) {\r
+                               if (!ref.startsWith(Constants.R_TICKET)) {\r
+                                       availableRefs.add(ref);\r
+                                       if (ref.startsWith(Constants.R_HEADS)) {\r
+                                               availableBranches.add(Repository.shortenRefName(ref));\r
+                                       }\r
+                               }\r
+                       }\r
                }\r
                form.add(new DropDownChoice<String>("HEAD", availableRefs).setEnabled(availableRefs.size() > 0));\r
 \r
@@ -469,6 +478,7 @@ public class EditRepositoryPage extends RootSubPage {
                form.add(new CheckBox("acceptNewPatchsets"));\r
                form.add(new CheckBox("acceptNewTickets"));
                form.add(new CheckBox("requireApproval"));\r
+               form.add(new DropDownChoice<String>("mergeTo", availableBranches).setEnabled(availableBranches.size() > 0));\r
                form.add(new CheckBox("useIncrementalPushTags"));\r
                form.add(new CheckBox("showRemoteBranches"));\r
                form.add(new CheckBox("skipSizeCalculation"));\r
index b5004861150be64c58b33726ca8422dbd37d8753..00cd47d9f720556446118923eb474ae7e02b2def 100644 (file)
@@ -108,7 +108,7 @@ public class EditTicketPage extends RepositoryPage {
                topicModel = Model.of(ticket.topic == null ? "" : ticket.topic);\r
                responsibleModel = Model.of();\r
                milestoneModel = Model.of();\r
-               mergeToModel = Model.of(ticket.mergeTo == null ? "" : ticket.mergeTo);\r
+               mergeToModel = Model.of(ticket.mergeTo == null ? getRepositoryModel().mergeTo : ticket.mergeTo);\r
                statusModel = Model.of(ticket.status);\r
 \r
                setStatelessHint(false);\r
@@ -309,8 +309,8 @@ public class EditTicketPage extends RepositoryPage {
                                        branches.add(Repository.shortenRefName(branch));\r
                                }\r
                        }\r
-                       branches.remove(Repository.shortenRefName(getRepositoryModel().HEAD));\r
-                       branches.add(0, Repository.shortenRefName(getRepositoryModel().HEAD));\r
+                       branches.remove(Repository.shortenRefName(getRepositoryModel().mergeTo));\r
+                       branches.add(0, Repository.shortenRefName(getRepositoryModel().mergeTo));\r
 \r
                        Fragment mergeto = new Fragment("mergeto", "mergeToFragment", this);\r
                        mergeto.add(new DropDownChoice<String>("mergeto", mergeToModel, branches));\r
index 25fe48f4023b14b94cd60122ad4d66decb53e07d..fda2e9f3e4d8249cdf84420047f8b4f1a75087de 100644 (file)
@@ -87,7 +87,7 @@ public class NewTicketPage extends RepositoryPage {
                typeModel = Model.of(TicketModel.Type.defaultType);\r
                titleModel = Model.of();\r
                topicModel = Model.of();\r
-               mergeToModel = Model.of(Repository.shortenRefName(getRepositoryModel().HEAD));\r
+               mergeToModel = Model.of(Repository.shortenRefName(getRepositoryModel().mergeTo));\r
                responsibleModel = Model.of();\r
                milestoneModel = Model.of();\r
 \r
index 434882f49277e38a169a7a12675f2c8e56fa5723..1a1686d397ac9fadd08561793a9196e1cb0a9c7f 100644 (file)
@@ -988,7 +988,7 @@ public class TicketPage extends TicketBasePage {
                md = md.replace("${ticketId}", "" + ticketId);\r
                md = md.replace("${patchset}", "" + 1);\r
                md = md.replace("${reviewBranch}", Repository.shortenRefName(PatchsetCommand.getTicketBranch(ticketId)));\r
-               String integrationBranch = Repository.shortenRefName(getRepositoryModel().HEAD);\r
+               String integrationBranch = Repository.shortenRefName(getRepositoryModel().mergeTo);\r
                if (!StringUtils.isEmpty(ticket.mergeTo)) {\r
                        integrationBranch = ticket.mergeTo;\r
                }\r