From cb285cbfddfc0b633d6b8cdb4dc0d2bd2b8b51ef Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Thu, 05 Jan 2012 17:34:05 -0500
Subject: [PATCH] Fixed bug in receive hook for repositories in subfolders

---
 src/com/gitblit/client/EditRepositoryDialog.java |   74 +++++++++++++++++++++++++++++++++++--
 1 files changed, 70 insertions(+), 4 deletions(-)

diff --git a/src/com/gitblit/client/EditRepositoryDialog.java b/src/com/gitblit/client/EditRepositoryDialog.java
index 0b6ef59..ebc540f 100644
--- a/src/com/gitblit/client/EditRepositoryDialog.java
+++ b/src/com/gitblit/client/EditRepositoryDialog.java
@@ -52,7 +52,7 @@
 import com.gitblit.Constants.AccessRestrictionType;
 import com.gitblit.Constants.FederationStrategy;
 import com.gitblit.models.RepositoryModel;
-import com.gitblit.models.TeamModel;
+import com.gitblit.utils.ArrayUtils;
 import com.gitblit.utils.StringUtils;
 
 /**
@@ -90,6 +90,8 @@
 
 	private JCheckBox isFrozen;
 
+	private JTextField mailingListsField;
+
 	private JComboBox accessRestriction;
 
 	private JComboBox federationStrategy;
@@ -97,10 +99,18 @@
 	private JComboBox ownerField;
 
 	private JPalette<String> usersPalette;
-	
+
 	private JPalette<String> setsPalette;
-	
+
 	private JPalette<String> teamsPalette;
+
+	private JPalette<String> preReceivePalette;
+
+	private JLabel preReceiveInherited;
+
+	private JPalette<String> postReceivePalette;
+
+	private JLabel postReceiveInherited;
 
 	private Set<String> repositoryNames;
 
@@ -159,6 +169,9 @@
 				anRepository.skipSummaryMetrics);
 		isFrozen = new JCheckBox(Translation.get("gb.isFrozenDescription"), anRepository.isFrozen);
 
+		mailingListsField = new JTextField(ArrayUtils.isEmpty(anRepository.mailingLists) ? ""
+				: StringUtils.flattenStrings(anRepository.mailingLists, " "), 50);
+
 		accessRestriction = new JComboBox(AccessRestrictionType.values());
 		accessRestriction.setRenderer(new AccessRestrictionRenderer());
 		accessRestriction.setSelectedItem(anRepository.accessRestriction);
@@ -190,6 +203,7 @@
 		fieldsPanel
 				.add(newFieldPanel(Translation.get("gb.skipSummaryMetrics"), skipSummaryMetrics));
 		fieldsPanel.add(newFieldPanel(Translation.get("gb.isFrozen"), isFrozen));
+		fieldsPanel.add(newFieldPanel(Translation.get("gb.mailingLists"), mailingListsField));
 
 		usersPalette = new JPalette<String>();
 		JPanel accessPanel = new JPanel(new BorderLayout(5, 5));
@@ -211,6 +225,18 @@
 		federationPanel.add(newFieldPanel(Translation.get("gb.federationSets"), setsPalette),
 				BorderLayout.CENTER);
 
+		preReceivePalette = new JPalette<String>(true);
+		preReceiveInherited = new JLabel();
+		JPanel preReceivePanel = new JPanel(new BorderLayout(5, 5));
+		preReceivePanel.add(preReceivePalette, BorderLayout.CENTER);
+		preReceivePanel.add(preReceiveInherited, BorderLayout.WEST);
+
+		postReceivePalette = new JPalette<String>(true);
+		postReceiveInherited = new JLabel();
+		JPanel postReceivePanel = new JPanel(new BorderLayout(5, 5));
+		postReceivePanel.add(postReceivePalette, BorderLayout.CENTER);
+		postReceivePanel.add(postReceiveInherited, BorderLayout.WEST);
+
 		JTabbedPane panel = new JTabbedPane(JTabbedPane.TOP);
 		panel.addTab(Translation.get("gb.general"), fieldsPanel);
 		panel.addTab(Translation.get("gb.accessRestriction"), accessPanel);
@@ -218,6 +244,8 @@
 			panel.addTab(Translation.get("gb.teams"), teamsPanel);
 		}
 		panel.addTab(Translation.get("gb.federation"), federationPanel);
+		panel.addTab(Translation.get("gb.preReceiveScripts"), preReceivePanel);
+		panel.addTab(Translation.get("gb.postReceiveScripts"), postReceivePanel);
 
 		JButton createButton = new JButton(Translation.get("gb.save"));
 		createButton.addActionListener(new ActionListener() {
@@ -348,12 +376,27 @@
 		repository.skipSummaryMetrics = skipSummaryMetrics.isSelected();
 		repository.isFrozen = isFrozen.isSelected();
 
+		String ml = mailingListsField.getText();
+		if (!StringUtils.isEmpty(ml)) {
+			Set<String> list = new HashSet<String>();
+			for (String address : ml.split("(,|\\s)")) {
+				if (StringUtils.isEmpty(address)) {
+					continue;
+				}
+				list.add(address.toLowerCase());
+			}
+			repository.mailingLists = new ArrayList<String>(list);
+		}
+
 		repository.accessRestriction = (AccessRestrictionType) accessRestriction.getSelectedItem();
 		repository.federationStrategy = (FederationStrategy) federationStrategy.getSelectedItem();
 
 		if (repository.federationStrategy.exceeds(FederationStrategy.EXCLUDE)) {
 			repository.federationSets = setsPalette.getSelections();
 		}
+
+		repository.preReceiveScripts = preReceivePalette.getSelections();
+		repository.postReceiveScripts = postReceivePalette.getSelections();
 		return true;
 	}
 
@@ -369,7 +412,7 @@
 		}
 		usersPalette.setObjects(all, selected);
 	}
-	
+
 	public void setTeams(List<String> all, List<String> selected) {
 		teamsPalette.setObjects(all, selected);
 	}
@@ -389,6 +432,29 @@
 		setsPalette.setObjects(all, selected);
 	}
 
+	public void setPreReceiveScripts(List<String> all, List<String> inherited, List<String> selected) {
+		preReceivePalette.setObjects(all, selected);
+		showInherited(inherited, preReceiveInherited);
+	}
+
+	public void setPostReceiveScripts(List<String> all, List<String> inherited,
+			List<String> selected) {
+		postReceivePalette.setObjects(all, selected);
+		showInherited(inherited, postReceiveInherited);
+	}
+
+	private void showInherited(List<String> list, JLabel label) {
+		StringBuilder sb = new StringBuilder();
+		if (list != null && list.size() > 0) {
+			sb.append("<html><body><b>INHERITED</b><ul style=\"margin-left:5px;list-style-type: none;\">");
+			for (String script : list) {
+				sb.append("<li>").append(script).append("</li>");
+			}
+			sb.append("</ul></body></html>");
+		}
+		label.setText(sb.toString());
+	}
+
 	public RepositoryModel getRepository() {
 		if (canceled) {
 			return null;

--
Gitblit v1.9.1