From 13417cf9c6eec555b51da49742e47939d2f5715b Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Fri, 19 Oct 2012 22:47:33 -0400
Subject: [PATCH] Exclude submodules from zip downloads (issue 151)

---
 src/com/gitblit/wicket/pages/RepositoriesPage.java |  165 +++++++++++++++++++++++++++++++++++++++---------------
 1 files changed, 119 insertions(+), 46 deletions(-)

diff --git a/src/com/gitblit/wicket/pages/RepositoriesPage.java b/src/com/gitblit/wicket/pages/RepositoriesPage.java
index b0e5e57..97c6aa2 100644
--- a/src/com/gitblit/wicket/pages/RepositoriesPage.java
+++ b/src/com/gitblit/wicket/pages/RepositoriesPage.java
@@ -16,87 +16,160 @@
 package com.gitblit.wicket.pages;
 
 import java.io.File;
-import java.io.FileReader;
+import java.io.FileInputStream;
 import java.io.InputStream;
 import java.io.InputStreamReader;
+import java.text.MessageFormat;
+import java.util.List;
 
 import org.apache.wicket.Component;
+import org.apache.wicket.PageParameters;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.resource.ContextRelativeResource;
+import org.apache.wicket.util.resource.ResourceStreamNotFoundException;
+import org.eclipse.jgit.lib.Constants;
 
 import com.gitblit.GitBlit;
 import com.gitblit.Keys;
+import com.gitblit.models.RepositoryModel;
 import com.gitblit.utils.MarkdownUtils;
 import com.gitblit.utils.StringUtils;
 import com.gitblit.wicket.GitBlitWebSession;
+import com.gitblit.wicket.PageRegistration;
+import com.gitblit.wicket.PageRegistration.DropDownMenuItem;
+import com.gitblit.wicket.PageRegistration.DropDownMenuRegistration;
 import com.gitblit.wicket.WicketUtils;
 import com.gitblit.wicket.panels.RepositoriesPanel;
-import com.gitblit.wicket.panels.UsersPanel;
 
-public class RepositoriesPage extends BasePage {
+public class RepositoriesPage extends RootPage {
 
 	public RepositoriesPage() {
 		super();
+		setup(null);
+	}
+
+	public RepositoriesPage(PageParameters params) {
+		super(params);
+		setup(params);
+	}
+
+	@Override
+	protected boolean reusePageParameters() {
+		return true;
+	}
+
+	private void setup(PageParameters params) {
 		setupPage("", "");
-
-		final boolean showAdmin;
-		if (GitBlit.getBoolean(Keys.web.authenticateAdminPages, true)) {
-			boolean allowAdmin = GitBlit.getBoolean(Keys.web.allowAdministration, false);
-			showAdmin = allowAdmin && GitBlitWebSession.get().canAdmin();
-			// authentication requires state and session
-			setStatelessHint(false);
-		} else {
-			showAdmin = GitBlit.getBoolean(Keys.web.allowAdministration, false);
-			if (GitBlit.getBoolean(Keys.web.authenticateViewPages, false)) {
-				// authentication requires state and session
-				setStatelessHint(false);
-			} else {
-				// no authentication required, no state and no session required
-				setStatelessHint(true);
-			}
-		}
-
-		// display an error message cached from a redirect
-		String cachedMessage = GitBlitWebSession.get().clearErrorMessage();
-		if (!StringUtils.isEmpty(cachedMessage)) {
-			error(cachedMessage);
+		// check to see if we should display a login message
+		boolean authenticateView = GitBlit.getBoolean(Keys.web.authenticateViewPages, true);
+		if (authenticateView && !GitBlitWebSession.get().isLoggedIn()) {
+			String messageSource = GitBlit.getString(Keys.web.loginMessage, "gitblit");
+			String message = readMarkdown(messageSource, "login.mkd");
+			Component repositoriesMessage = new Label("repositoriesMessage", message);
+			add(repositoriesMessage.setEscapeModelStrings(false));
+			add(new Label("repositoriesPanel"));
+			return;
 		}
 
 		// Load the markdown welcome message
 		String messageSource = GitBlit.getString(Keys.web.repositoriesMessage, "gitblit");
-		String message = "<br/>";
+		String message = readMarkdown(messageSource, "welcome.mkd");
+		Component repositoriesMessage = new Label("repositoriesMessage", message)
+				.setEscapeModelStrings(false).setVisible(message.length() > 0);
+		add(repositoriesMessage);
+
+		List<RepositoryModel> repositories = getRepositories(params);
+
+		RepositoriesPanel repositoriesPanel = new RepositoriesPanel("repositoriesPanel", showAdmin,
+				true, repositories, true, getAccessRestrictions());
+		// push the panel down if we are hiding the admin controls and the
+		// welcome message
+		if (!showAdmin && !repositoriesMessage.isVisible()) {
+			WicketUtils.setCssStyle(repositoriesPanel, "padding-top:5px;");
+		}
+		add(repositoriesPanel);
+	}
+
+	@Override
+	protected void addDropDownMenus(List<PageRegistration> pages) {
+		PageParameters params = getPageParameters();
+
+		DropDownMenuRegistration menu = new DropDownMenuRegistration("gb.filters",
+				RepositoriesPage.class);
+		// preserve time filter option on repository choices
+		menu.menuItems.addAll(getRepositoryFilterItems(params));
+
+		// preserve repository filter option on time choices
+		menu.menuItems.addAll(getTimeFilterItems(params));
+
+		if (menu.menuItems.size() > 0) {
+			// Reset Filter
+			menu.menuItems.add(new DropDownMenuItem(getString("gb.reset"), null, null));
+		}
+
+		pages.add(menu);
+	}
+
+	private String readMarkdown(String messageSource, String resource) {
+		String message = "";
 		if (messageSource.equalsIgnoreCase("gitblit")) {
-			// Read default welcome message
-			try {
-				ContextRelativeResource res = WicketUtils.getResource("welcome.mkd");
-				InputStream is = res.getResourceStream().getInputStream();
-				InputStreamReader reader = new InputStreamReader(is);
-				message = MarkdownUtils.transformMarkdown(reader);
-			} catch (Throwable t) {
-				message = "Failed to read default welcome message!";
-				error(message, t, false);
-			}
+			// Read default message
+			message = readDefaultMarkdown(resource);
 		} else {
-			// Read user-supplied welcome message
+			// Read user-supplied message
 			if (!StringUtils.isEmpty(messageSource)) {
 				File file = new File(messageSource);
 				if (file.exists()) {
 					try {
-						FileReader reader = new FileReader(file);
+						FileInputStream fis = new FileInputStream(file);
+						InputStreamReader reader = new InputStreamReader(fis,
+								Constants.CHARACTER_ENCODING);
 						message = MarkdownUtils.transformMarkdown(reader);
+						reader.close();
 					} catch (Throwable t) {
-						message = "Failed to read " + file;
-						error(message, t, false);
+						message = getString("gb.failedToRead") + " " + file;
+						warn(message, t);
 					}
 				} else {
-					message = messageSource + " is not a valid file.";
+					message = messageSource + " " + getString("gb.isNotValidFile");
 				}
 			}
 		}
-		Component repositoriesMessage = new Label("repositoriesMessage", message)
-				.setEscapeModelStrings(false);
-		add(repositoriesMessage);
-		add(new RepositoriesPanel("repositoriesPanel", showAdmin, getAccessRestrictions()));
-		add(new UsersPanel("usersPanel", showAdmin).setVisible(showAdmin));
+		return message;
+	}
+
+	private String readDefaultMarkdown(String file) {
+		String content = readDefaultMarkdown(file, getLanguageCode());
+		if (StringUtils.isEmpty(content)) {
+			content = readDefaultMarkdown(file, null);
+		}
+		return content;
+	}
+	
+	private String readDefaultMarkdown(String file, String lc) {
+		if (!StringUtils.isEmpty(lc)) {
+			// convert to file_lc.mkd
+			file = file.substring(0, file.lastIndexOf('.')) + "_" + lc + file.substring(file.lastIndexOf('.'));
+		}
+		String message;
+		try {			
+		    InputStream is = GitBlit.self().getResourceAsStream(file);
+			InputStreamReader reader = new InputStreamReader(is, Constants.CHARACTER_ENCODING);
+			message = MarkdownUtils.transformMarkdown(reader);
+			reader.close();
+		} catch (ResourceStreamNotFoundException t) {
+			if (lc == null) {
+				// could not find default language resource
+				message = MessageFormat.format(getString("gb.failedToReadMessage"), file);
+				error(message, t, false);
+			} else {
+				// ignore so we can try default language resource
+				message = null;
+			}
+		} catch (Throwable t) {
+			message = MessageFormat.format(getString("gb.failedToReadMessage"), file);
+			error(message, t, false);
+		}
+		return message;
 	}
 }

--
Gitblit v1.9.1