From 11c14e192b907acd3fdc2d6a9bcf4faafc593afe Mon Sep 17 00:00:00 2001
From: Rafael Cavazin <rafaelcavazin@gmail.com>
Date: Sun, 27 Jan 2013 11:13:06 -0500
Subject: [PATCH] updating latest props, and some pt-br fixing

---
 src/com/gitblit/wicket/pages/RepositoryPage.java |  176 ++++++++++++++++++++++++++++++++++------------------------
 1 files changed, 102 insertions(+), 74 deletions(-)

diff --git a/src/com/gitblit/wicket/pages/RepositoryPage.java b/src/com/gitblit/wicket/pages/RepositoryPage.java
index a85d21e..a477b74 100644
--- a/src/com/gitblit/wicket/pages/RepositoryPage.java
+++ b/src/com/gitblit/wicket/pages/RepositoryPage.java
@@ -28,12 +28,10 @@
 
 import org.apache.wicket.Component;
 import org.apache.wicket.PageParameters;
-import org.apache.wicket.RedirectException;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.form.DropDownChoice;
 import org.apache.wicket.markup.html.form.TextField;
 import org.apache.wicket.markup.html.link.ExternalLink;
-import org.apache.wicket.markup.html.link.Link;
 import org.apache.wicket.markup.html.panel.Fragment;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
@@ -50,6 +48,7 @@
 import com.gitblit.PagesServlet;
 import com.gitblit.SyndicationServlet;
 import com.gitblit.models.ProjectModel;
+import com.gitblit.models.RefModel;
 import com.gitblit.models.RepositoryModel;
 import com.gitblit.models.SubmoduleModel;
 import com.gitblit.models.UserModel;
@@ -62,7 +61,6 @@
 import com.gitblit.wicket.PageRegistration.OtherPageLink;
 import com.gitblit.wicket.SessionlessForm;
 import com.gitblit.wicket.WicketUtils;
-import com.gitblit.wicket.panels.BasePanel.JavascriptEventConfirmation;
 import com.gitblit.wicket.panels.LinkPanel;
 import com.gitblit.wicket.panels.NavigationPanel;
 import com.gitblit.wicket.panels.RefsPanel;
@@ -101,6 +99,26 @@
 		if (!getRepositoryModel().hasCommits) {
 			setResponsePage(EmptyRepositoryPage.class, params);
 		}
+		
+		if (getRepositoryModel().isCollectingGarbage) {
+			error(MessageFormat.format(getString("gb.busyCollectingGarbage"), getRepositoryModel().name), true);
+		}
+
+		if (objectId != null) {
+			RefModel branch = null;
+			if ((branch = JGitUtils.getBranch(getRepository(), objectId)) != null) {
+				UserModel user = GitBlitWebSession.get().getUser();
+				if (user == null) {
+					// workaround until get().getUser() is reviewed throughout the app
+					user = UserModel.ANONYMOUS;
+				}
+				boolean canAccess = user.canView(getRepositoryModel(),
+								branch.reference.getName());
+				if (!canAccess) {
+					error(getString("gb.accessDenied"), true);
+				}
+			}
+		}
 
 		// register the available page links for this page and user
 		registeredPages = registerPages();
@@ -136,22 +154,14 @@
 		pages.put("branches", new PageRegistration("gb.branches", BranchesPage.class, params));
 		pages.put("tags", new PageRegistration("gb.tags", TagsPage.class, params));
 		pages.put("tree", new PageRegistration("gb.tree", TreePage.class, params));
+		if (GitBlit.getBoolean(Keys.web.allowForking, true)) {
+			pages.put("forks", new PageRegistration("gb.forks", ForksPage.class, params));
+		}
 
 		// conditional links
 		Repository r = getRepository();
 		RepositoryModel model = getRepositoryModel();
 
-		// forks list button
-		if (StringUtils.isEmpty(model.originRepository)) {
-			if (!ArrayUtils.isEmpty(model.forks)) {
-				// this origin repository has forks
-				pages.put("forks", new PageRegistration("gb.forks", ForksPage.class, params));
-			}
-		} else {
-			// this is a fork of another repository
-			pages.put("forks", new PageRegistration("gb.forks", ForksPage.class, params));
-		}
-		
 		// per-repository extra page links
 		if (model.useTickets && TicgitUtils.getTicketsBranch(r) != null) {
 			pages.put("tickets", new PageRegistration("gb.tickets", TicketsPage.class, params));
@@ -174,12 +184,16 @@
 			showAdmin = GitBlit.getBoolean(Keys.web.allowAdministration, false);
 		}
 		isOwner = GitBlitWebSession.get().isLoggedIn()
-				&& (model.owner != null && model.owner.equalsIgnoreCase(GitBlitWebSession.get()
+				&& (model.isOwner(GitBlitWebSession.get()
 						.getUsername()));
 		if (showAdmin || isOwner) {
 			pages.put("edit", new PageRegistration("gb.edit", EditRepositoryPage.class, params));
 		}
 		return pages;
+	}
+	
+	protected boolean allowForkControls() {
+		return GitBlit.getBoolean(Keys.web.allowForking, true);
 	}
 
 	@Override
@@ -204,15 +218,40 @@
 				WicketUtils.newRepositoryParameter(repositoryName)));
 		add(new Label("pageName", pageName).setRenderBodyOnly(true));
 		
+		UserModel user = GitBlitWebSession.get().getUser();
+		if (user == null) {
+			user = UserModel.ANONYMOUS;
+		}
+
 		// indicate origin repository
 		RepositoryModel model = getRepositoryModel();
 		if (StringUtils.isEmpty(model.originRepository)) {
 			add(new Label("originRepository").setVisible(false));
 		} else {
-			Fragment forkFrag = new Fragment("originRepository", "originFragment", this);
-			forkFrag.add(new LinkPanel("originRepository", null, StringUtils.stripDotGit(model.originRepository), 
-					SummaryPage.class, WicketUtils.newRepositoryParameter(model.originRepository)));
-			add(forkFrag);
+			RepositoryModel origin = GitBlit.self().getRepositoryModel(model.originRepository);
+			if (origin == null) {
+				// no origin repository
+				add(new Label("originRepository").setVisible(false));
+			} else if (!user.canView(origin)) {
+				// show origin repository without link
+				Fragment forkFrag = new Fragment("originRepository", "originFragment", this);
+				forkFrag.add(new Label("originRepository", StringUtils.stripDotGit(model.originRepository)));
+				add(forkFrag);
+			} else {
+				// link to origin repository
+				Fragment forkFrag = new Fragment("originRepository", "originFragment", this);
+				forkFrag.add(new LinkPanel("originRepository", null, StringUtils.stripDotGit(model.originRepository), 
+						SummaryPage.class, WicketUtils.newRepositoryParameter(model.originRepository)));
+				add(forkFrag);
+			}
+		}
+		
+		// show sparkleshare folder icon
+		if (model.isSparkleshared()) {
+			add(WicketUtils.newImage("repositoryIcon", "folder_star_32x32.png",
+					getString("gb.isSparkleshared")));
+		} else {
+			add(WicketUtils.newClearPixel("repositoryIcon").setVisible(false));
 		}
 		
 		if (getRepositoryModel().isBare) {
@@ -224,58 +263,49 @@
 			wc.add(lbl);
 			add(wc);
 		}
-		
-		if (getRepositoryModel().allowForks) {
-			add(new Label("forksProhibitedIndicator").setVisible(false));
-		} else {
-			Fragment wc = new Fragment("forksProhibitedIndicator", "forksProhibitedFragment", this);
-			Label lbl = new Label("forksProhibited", getString("gb.forksProhibited"));
-			WicketUtils.setHtmlTooltip(lbl,  getString("gb.forksProhibitedWarning"));
-			wc.add(lbl);
-			add(wc);
-		}
-		
-		UserModel user = GitBlitWebSession.get().getUser();
-		
-		// fork button
-		if (user != null) {			
-			final String clonedRepo = MessageFormat.format("~{0}/{1}.git", user.username, StringUtils.stripDotGit(StringUtils.getLastPathElement(model.name)));
-			boolean hasClone = GitBlit.self().hasRepository(clonedRepo) && !getRepositoryModel().name.equals(clonedRepo);
-			if (user.canForkRepository(model) && !hasClone) {
-				Link<Void> forkLink = new Link<Void>("forkLink") {
 
-					private static final long serialVersionUID = 1L;
-
-					@Override
-					public void onClick() {
-						RepositoryModel model = getRepositoryModel();
-						if (GitBlit.self().fork(model, GitBlitWebSession.get().getUser())) {
-							throw new RedirectException(SummaryPage.class, WicketUtils.newRepositoryParameter(clonedRepo));
-						} else {
-							error(MessageFormat.format(getString("gb.repositoryForkFailed"), model));
-						}
-					}
-				};
-				forkLink.add(new JavascriptEventConfirmation("onclick", MessageFormat.format(
-						getString("gb.forkRepository"), getRepositoryModel())));
-				add(forkLink);
-			} else {
-				// user not allowed to fork or fork already exists or repo forbids forking
-				add(new ExternalLink("forkLink", "").setVisible(false));
-			}
-			
-			if (hasClone) {
-				// user has clone
-				String url = getRequestCycle().urlFor(SummaryPage.class, WicketUtils.newRepositoryParameter(clonedRepo)).toString();
-				add(new ExternalLink("myForkLink", url));
-			} else {
-				// user does not have clone
-				add(new ExternalLink("myForkLink", "").setVisible(false));
-			}
-		} else {
-			// server prohibits forking
+		// fork controls
+		if (!allowForkControls() || user == null || !user.isAuthenticated) {
+			// must be logged-in to fork, hide all fork controls
 			add(new ExternalLink("forkLink", "").setVisible(false));
 			add(new ExternalLink("myForkLink", "").setVisible(false));
+			add(new Label("forksProhibitedIndicator").setVisible(false));
+		} else {
+			String fork = GitBlit.self().getFork(user.username, model.name);
+			boolean hasFork = fork != null;
+			boolean canFork = user.canFork(model);
+
+			if (hasFork || !canFork) {
+				// user not allowed to fork or fork already exists or repo forbids forking
+				add(new ExternalLink("forkLink", "").setVisible(false));
+				
+				if (user.canFork() && !model.allowForks) {
+					// show forks prohibited indicator
+					Fragment wc = new Fragment("forksProhibitedIndicator", "forksProhibitedFragment", this);
+					Label lbl = new Label("forksProhibited", getString("gb.forksProhibited"));
+					WicketUtils.setHtmlTooltip(lbl,  getString("gb.forksProhibitedWarning"));
+					wc.add(lbl);
+					add(wc);
+				} else {
+					// can not fork, no need for forks prohibited indicator
+					add(new Label("forksProhibitedIndicator").setVisible(false));
+				}
+				
+				if (hasFork && !fork.equals(model.name)) {
+					// user has fork, view my fork link
+					String url = getRequestCycle().urlFor(SummaryPage.class, WicketUtils.newRepositoryParameter(fork)).toString();
+					add(new ExternalLink("myForkLink", url));
+				} else {
+					// no fork, hide view my fork link
+					add(new ExternalLink("myForkLink", "").setVisible(false));
+				}
+			} else if (canFork) {
+				// can fork and we do not have one
+				add(new Label("forksProhibitedIndicator").setVisible(false));
+				add(new ExternalLink("myForkLink", "").setVisible(false));
+				String url = getRequestCycle().urlFor(ForkPage.class, WicketUtils.newRepositoryParameter(model.name)).toString();
+				add(new ExternalLink("forkLink", url));
+			}
 		}
 		
 		super.setupPage(repositoryName, pageName);
@@ -304,7 +334,7 @@
 			RepositoryModel model = GitBlit.self().getRepositoryModel(
 					GitBlitWebSession.get().getUser(), repositoryName);
 			if (model == null) {
-				if (GitBlit.self().hasRepository(repositoryName)) {
+				if (GitBlit.self().hasRepository(repositoryName, true)) {
 					// has repository, but unauthorized
 					authenticationError(getString("gb.unauthorizedAccessForRepository") + " " + repositoryName);
 				} else {
@@ -335,10 +365,6 @@
 				submodules.put(model.path, model);
 			}
 		}
-		return submodules;
-	}
-	
-	protected Map<String, SubmoduleModel> getSubmodules() {
 		return submodules;
 	}
 	
@@ -405,7 +431,7 @@
 	}
 
 	protected String getShortObjectId(String objectId) {
-		return objectId.substring(0, 8);
+		return objectId.substring(0, GitBlit.getInteger(Keys.web.shortCommitIdLength, 6));
 	}
 
 	protected void addRefs(Repository r, RevCommit c) {
@@ -428,6 +454,8 @@
 			Constants.SearchType searchType) {
 		String name = identity == null ? "" : identity.getName();
 		String address = identity == null ? "" : identity.getEmailAddress();
+		name = StringUtils.removeNewlines(name);
+		address = StringUtils.removeNewlines(address);
 		boolean showEmail = GitBlit.getBoolean(Keys.web.showEmailAddresses, false);
 		if (!showEmail || StringUtils.isEmpty(name) || StringUtils.isEmpty(address)) {
 			String value = name;

--
Gitblit v1.9.1