From 07eb0963cae3a403f8774f65afa20c940ce7124f Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Fri, 13 Jun 2014 08:57:41 -0400
Subject: [PATCH] Merged #103 "flotr2 throws exception on small dashboards"

---
 src/main/java/com/gitblit/wicket/pages/TicketPage.java |   65 ++++++++++++++++++++------------
 1 files changed, 40 insertions(+), 25 deletions(-)

diff --git a/src/main/java/com/gitblit/wicket/pages/TicketPage.java b/src/main/java/com/gitblit/wicket/pages/TicketPage.java
index 498a9db..e7b4749 100644
--- a/src/main/java/com/gitblit/wicket/pages/TicketPage.java
+++ b/src/main/java/com/gitblit/wicket/pages/TicketPage.java
@@ -54,10 +54,10 @@
 import org.eclipse.jgit.lib.Ref;
 import org.eclipse.jgit.lib.Repository;
 import org.eclipse.jgit.revwalk.RevCommit;
-import org.eclipse.jgit.transport.URIish;
 
 import com.gitblit.Constants;
 import com.gitblit.Constants.AccessPermission;
+import com.gitblit.Constants.AuthorizationControl;
 import com.gitblit.Keys;
 import com.gitblit.git.PatchsetCommand;
 import com.gitblit.git.PatchsetReceivePack;
@@ -382,9 +382,16 @@
 				 * RESPONSIBLE LIST
 				 */
 				Set<String> userlist = new TreeSet<String>(ticket.getParticipants());
-				for (RegistrantAccessPermission rp : app().repositories().getUserAccessPermissions(getRepositoryModel())) {
-					if (rp.permission.atLeast(AccessPermission.PUSH) && !rp.isTeam()) {
-						userlist.add(rp.registrant);
+				if (UserModel.ANONYMOUS.canPush(getRepositoryModel())
+						|| AuthorizationControl.AUTHENTICATED == getRepositoryModel().authorizationControl) {
+					// 	authorization is ANONYMOUS or AUTHENTICATED (i.e. all users can be set responsible)
+					userlist.addAll(app().users().getAllUsernames());
+				} else {
+					// authorization is by NAMED users (users with PUSH permission can be set responsible)
+					for (RegistrantAccessPermission rp : app().repositories().getUserAccessPermissions(getRepositoryModel())) {
+						if (rp.permission.atLeast(AccessPermission.PUSH)) {
+							userlist.add(rp.registrant);
+						}
 					}
 				}
 				List<TicketResponsible> responsibles = new ArrayList<TicketResponsible>();
@@ -734,16 +741,17 @@
 		 */
 		if (currentPatchset == null) {
 			// no patchset available
-			String repoUrl = getRepositoryUrl(user, repository);
-			if (ticket.isOpen() && app().tickets().isAcceptingNewPatchsets(repository) && !StringUtils.isEmpty(repoUrl)) {
+			RepositoryUrl repoUrl = getRepositoryUrl(user, repository);
+			boolean canPropose = repoUrl != null && repoUrl.permission.atLeast(AccessPermission.CLONE) && !UserModel.ANONYMOUS.equals(user);
+			if (ticket.isOpen() && app().tickets().isAcceptingNewPatchsets(repository) && canPropose) {
 				// ticket & repo will accept a proposal patchset
 				// show the instructions for proposing a patchset
 				Fragment changeIdFrag = new Fragment("patchset", "proposeFragment", this);
 				changeIdFrag.add(new Label("proposeInstructions", MarkdownUtils.transformMarkdown(getString("gb.proposeInstructions"))).setEscapeModelStrings(false));
 				changeIdFrag.add(new Label("ptWorkflow", MessageFormat.format(getString("gb.proposeWith"), "Barnum")));
-				changeIdFrag.add(new Label("ptWorkflowSteps", getProposeWorkflow("propose_pt.md", repoUrl, ticket.number)).setEscapeModelStrings(false));
+				changeIdFrag.add(new Label("ptWorkflowSteps", getProposeWorkflow("propose_pt.md", repoUrl.url, ticket.number)).setEscapeModelStrings(false));
 				changeIdFrag.add(new Label("gitWorkflow", MessageFormat.format(getString("gb.proposeWith"), "Git")));
-				changeIdFrag.add(new Label("gitWorkflowSteps", getProposeWorkflow("propose_git.md", repoUrl, ticket.number)).setEscapeModelStrings(false));
+				changeIdFrag.add(new Label("gitWorkflowSteps", getProposeWorkflow("propose_git.md", repoUrl.url, ticket.number)).setEscapeModelStrings(false));
 				add(changeIdFrag);
 			} else {
 				// explain why you can't propose a patchset
@@ -757,6 +765,12 @@
 					reason = getString("gb.repositoryIsFrozen");
 				} else if (!repository.acceptNewPatchsets) {
 					reason = getString("gb.repositoryDoesNotAcceptPatchsets");
+				} else if (!canPropose) {
+					if (UserModel.ANONYMOUS.equals(user)) {
+						reason = getString("gb.anonymousCanNotPropose");
+					} else {
+						reason = getString("gb.youDoNotHaveClonePermission");
+					}
 				} else {
 					reason = getString("gb.serverDoesNotAcceptPatchsets");
 				}
@@ -768,12 +782,19 @@
 			Fragment patchsetFrag = new Fragment("patchset", "patchsetFragment", this);
 			patchsetFrag.add(new Label("commitsInPatchset", MessageFormat.format(getString("gb.commitsInPatchsetN"), currentPatchset.number)));
 
-			// current revision
-			MarkupContainer panel = createPatchsetPanel("panel", repository, user);
-			patchsetFrag.add(panel);
-			addUserAttributions(patchsetFrag, currentRevision, avatarWidth);
-			addUserAttributions(panel, currentRevision, 0);
-			addDateAttributions(panel, currentRevision);
+			patchsetFrag.add(createMergePanel(user, repository));
+
+			if (ticket.isOpen()) {
+				// current revision
+				MarkupContainer panel = createPatchsetPanel("panel", repository, user);
+				patchsetFrag.add(panel);
+				addUserAttributions(patchsetFrag, currentRevision, avatarWidth);
+				addUserAttributions(panel, currentRevision, 0);
+				addDateAttributions(panel, currentRevision);
+			} else {
+				// current revision
+				patchsetFrag.add(new Label("panel").setVisible(false));
+			}
 
 			// commits
 			List<RevCommit> commits = JGitUtils.getRevLog(getRepository(), currentPatchset.base, currentPatchset.tip);
@@ -1135,7 +1156,6 @@
 				WicketUtils.setChangeTypeCssClass(changeType, entry.changeType);
 				setChangeTypeTooltip(changeType, entry.changeType);
 				item.add(changeType);
-				item.add(new DiffStatPanel("diffStat", entry.insertions, entry.deletions, true));
 
 				boolean hasSubmodule = false;
 				String submodulePath = null;
@@ -1161,7 +1181,7 @@
 					String displayPath = entry.path;
 					String path = entry.path;
 					if (entry.isSymlink()) {
-						RevCommit commit = JGitUtils.getCommit(getRepository(), Constants.R_TICKETS_PATCHSETS + ticket.number);
+						RevCommit commit = JGitUtils.getCommit(getRepository(), PatchsetCommand.getTicketBranch(ticket.number));
 						path = JGitUtils.getStringContent(getRepository(), commit.getTree(), path);
 						displayPath = entry.path + " -> " + path;
 					}
@@ -1178,6 +1198,7 @@
 						item.add(new LinkPanel("pathName", "list", displayPath, BlobDiffPage.class,
 								WicketUtils.newPathParameter(repositoryName, currentPatchset.tip, path), true));
 					}
+					item.add(new DiffStatPanel("diffStat", entry.insertions, entry.deletions, true));
 				}
 
 				// quick links
@@ -1207,7 +1228,6 @@
 
 		addPtCheckoutInstructions(user, repository, panel);
 		addGitCheckoutInstructions(user, repository, panel);
-		panel.add(createMergePanel(user, repository));
 
 		return panel;
 	}
@@ -1476,19 +1496,14 @@
 	 * @param repository
 	 * @return the primary repository url
 	 */
-	protected String getRepositoryUrl(UserModel user, RepositoryModel repository) {
+	protected RepositoryUrl getRepositoryUrl(UserModel user, RepositoryModel repository) {
 		HttpServletRequest req = ((WebRequest) getRequest()).getHttpServletRequest();
 		List<RepositoryUrl> urls = app().gitblit().getRepositoryUrls(req, user, repository);
 		if (ArrayUtils.isEmpty(urls)) {
 			return null;
 		}
-		String primaryurl = urls.get(0).url;
-		String url = primaryurl;
-		try {
-			url = new URIish(primaryurl).setUser(null).toString();
-		} catch (Exception e) {
-		}
-		return url;
+		RepositoryUrl primary = urls.get(0);
+		return primary;
 	}
 
 	/**

--
Gitblit v1.9.1