From 66a5e2c8a12243557d39ba9e562f52d52e991781 Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Tue, 11 Mar 2014 12:36:30 -0400
Subject: [PATCH] Exclude ticket branches when forking a canonical repository
---
src/main/java/com/gitblit/wicket/pages/TicketPage.java | 63 ++++++++++++++++++++++---------
1 files changed, 44 insertions(+), 19 deletions(-)
diff --git a/src/main/java/com/gitblit/wicket/pages/TicketPage.java b/src/main/java/com/gitblit/wicket/pages/TicketPage.java
index 69f4fe7..80b5576 100644
--- a/src/main/java/com/gitblit/wicket/pages/TicketPage.java
+++ b/src/main/java/com/gitblit/wicket/pages/TicketPage.java
@@ -327,7 +327,7 @@
* UPDATE FORM (DISCUSSION TAB)
*/
if (user.canEdit(ticket, repository) && app().tickets().isAcceptingTicketUpdates(repository)) {
- if (ticket.isOpen()) {
+ if (user.canAdmin(ticket, repository) && ticket.isOpen()) {
/*
* OPEN TICKET
*/
@@ -520,7 +520,7 @@
WicketUtils.setCssClass(votersCount, "badge badge-info");
}
add(votersCount);
- if (user.isAuthenticated) {
+ if (user.isAuthenticated && app().tickets().isAcceptingTicketUpdates(repository)) {
Model<String> model;
if (ticket.isVoter(user.username)) {
model = Model.of(getString("gb.removeVote"));
@@ -560,7 +560,7 @@
WicketUtils.setCssClass(watchersCount, "badge badge-info");
}
add(watchersCount);
- if (user.isAuthenticated) {
+ if (user.isAuthenticated && app().tickets().isAcceptingTicketUpdates(repository)) {
Model<String> model;
if (ticket.isWatching(user.username)) {
model = Model.of(getString("gb.stopWatching"));
@@ -731,15 +731,36 @@
* PATCHSET TAB
*/
if (currentPatchset == null) {
- // no patchset yet, show propose fragment
- String repoUrl = getRepositoryUrl(user, repository);
- 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("gitWorkflow", MessageFormat.format(getString("gb.proposeWith"), "Git")));
- changeIdFrag.add(new Label("gitWorkflowSteps", getProposeWorkflow("propose_git.md", repoUrl, ticket.number)).setEscapeModelStrings(false));
- add(changeIdFrag);
+ // no patchset available
+ if (ticket.isOpen() && app().tickets().isAcceptingNewPatchsets(repository)) {
+ // ticket & repo will accept a proposal patchset
+ // show the instructions for proposing a patchset
+ String repoUrl = getRepositoryUrl(user, repository);
+ 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("gitWorkflow", MessageFormat.format(getString("gb.proposeWith"), "Git")));
+ changeIdFrag.add(new Label("gitWorkflowSteps", getProposeWorkflow("propose_git.md", repoUrl, ticket.number)).setEscapeModelStrings(false));
+ add(changeIdFrag);
+ } else {
+ // explain why you can't propose a patchset
+ Fragment fragment = new Fragment("patchset", "canNotProposeFragment", this);
+ String reason = "";
+ if (ticket.isClosed()) {
+ reason = getString("gb.ticketIsClosed");
+ } else if (repository.isMirror) {
+ reason = getString("gb.repositoryIsMirror");
+ } else if (repository.isFrozen) {
+ reason = getString("gb.repositoryIsFrozen");
+ } else if (!repository.acceptNewPatchsets) {
+ reason = getString("gb.repositoryDoesNotAcceptPatchsets");
+ } else {
+ reason = getString("gb.serverDoesNotAcceptPatchsets");
+ }
+ fragment.add(new Label("reason", reason));
+ add(fragment);
+ }
} else {
// show current patchset
Fragment patchsetFrag = new Fragment("patchset", "patchsetFragment", this);
@@ -967,7 +988,11 @@
md = md.replace("${ticketId}", "" + ticketId);
md = md.replace("${patchset}", "" + 1);
md = md.replace("${reviewBranch}", Repository.shortenRefName(PatchsetCommand.getTicketBranch(ticketId)));
- md = md.replace("${integrationBranch}", Repository.shortenRefName(getRepositoryModel().HEAD));
+ String integrationBranch = Repository.shortenRefName(getRepositoryModel().mergeTo);
+ if (!StringUtils.isEmpty(ticket.mergeTo)) {
+ integrationBranch = ticket.mergeTo;
+ }
+ md = md.replace("${integrationBranch}", integrationBranch);
return MarkdownUtils.transformMarkdown(md);
}
@@ -1044,7 +1069,7 @@
panel.add(reviewsView);
- if (ticket.isOpen() && user.canReviewPatchset(repository)) {
+ if (ticket.isOpen() && user.canReviewPatchset(repository) && app().tickets().isAcceptingTicketUpdates(repository)) {
// can only review open tickets
Review myReview = null;
for (Change change : ticket.getReviews(currentPatchset)) {
@@ -1178,8 +1203,8 @@
};
panel.add(pathsView);
- addPtReviewInstructions(user, repository, panel);
- addGitReviewInstructions(user, repository, panel);
+ addPtCheckoutInstructions(user, repository, panel);
+ addGitCheckoutInstructions(user, repository, panel);
panel.add(createMergePanel(user, repository));
return panel;
@@ -1253,13 +1278,13 @@
return x;
}
- protected void addGitReviewInstructions(UserModel user, RepositoryModel repository, MarkupContainer panel) {
+ protected void addGitCheckoutInstructions(UserModel user, RepositoryModel repository, MarkupContainer panel) {
panel.add(new Label("gitStep1", MessageFormat.format(getString("gb.stepN"), 1)));
panel.add(new Label("gitStep2", MessageFormat.format(getString("gb.stepN"), 2)));
String ticketBranch = Repository.shortenRefName(PatchsetCommand.getTicketBranch(ticket.number));
- String step1 = "git fetch";
+ String step1 = "git fetch origin";
String step2 = MessageFormat.format("git checkout {0} && git pull --ff-only\nOR\ngit checkout {0} && git reset --hard origin/{0}", ticketBranch);
panel.add(new Label("gitPreStep1", step1));
@@ -1269,7 +1294,7 @@
panel.add(createCopyFragment("gitCopyStep2", step2.replace("\n", " && ")));
}
- protected void addPtReviewInstructions(UserModel user, RepositoryModel repository, MarkupContainer panel) {
+ protected void addPtCheckoutInstructions(UserModel user, RepositoryModel repository, MarkupContainer panel) {
String step1 = MessageFormat.format("pt checkout {0,number,0}", ticket.number);
panel.add(new Label("ptPreStep", step1));
panel.add(createCopyFragment("ptCopyStep", step1));
--
Gitblit v1.9.1