From 2d10e4ef95f3bd317883a702a7b991b1ac77ae62 Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Thu, 26 Feb 2015 11:20:23 -0500
Subject: [PATCH] Merged #242 "issue-545: Enforce repository permissions in patch page"

---
 src/main/java/com/gitblit/models/TicketModel.java |   41 ++++++++++++++++++++++++++++++++++-------
 1 files changed, 34 insertions(+), 7 deletions(-)

diff --git a/src/main/java/com/gitblit/models/TicketModel.java b/src/main/java/com/gitblit/models/TicketModel.java
index 5fd1ed9..a4880ea 100644
--- a/src/main/java/com/gitblit/models/TicketModel.java
+++ b/src/main/java/com/gitblit/models/TicketModel.java
@@ -35,6 +35,7 @@
 import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.NoSuchElementException;
 import java.util.Set;
 import java.util.TreeSet;
 import java.util.regex.Matcher;
@@ -636,7 +637,7 @@
 		}
 
 		public boolean hasComment() {
-			return comment != null && !comment.isDeleted();
+			return comment != null && !comment.isDeleted() && comment.text != null;
 		}
 
 		public Comment comment(String text) {
@@ -785,7 +786,21 @@
 			for (String item : items) {
 				list.add(prefix + item);
 			}
-			setField(field, join(list, ","));
+			if (hasField(field)) {
+				String flat = getString(field);
+				if (isEmpty(flat)) {
+					// field is empty, use this list
+					setField(field, join(list, ","));
+				} else {
+					// merge this list into the existing field list
+					Set<String> set = new TreeSet<String>(Arrays.asList(flat.split(",")));
+					set.addAll(list);
+					setField(field, join(set, ","));
+				}
+			} else {
+				// does not have a list for this field
+				setField(field, join(list, ","));
+			}
 		}
 
 		public String getId() {
@@ -1138,7 +1153,8 @@
 	}
 
 	public static enum Score {
-		approved(2), looks_good(1), not_reviewed(0), needs_improvement(-1), vetoed(-2);
+		approved(2), looks_good(1), not_reviewed(0), needs_improvement(-1), vetoed(
+				-2);
 
 		final int value;
 
@@ -1153,6 +1169,15 @@
 		@Override
 		public String toString() {
 			return name().toLowerCase().replace('_', ' ');
+		}
+
+		public static Score fromScore(int score) {
+			for (Score s : values()) {
+				if (s.getValue() == score) {
+					return s;
+				}
+			}
+			throw new NoSuchElementException(String.valueOf(score));
 		}
 	}
 
@@ -1201,13 +1226,15 @@
 	}
 
 	public static enum Status {
-		New, Open, Resolved, Fixed, Merged, Wontfix, Declined, Duplicate, Invalid, On_Hold;
+		New, Open, Closed, Resolved, Fixed, Merged, Wontfix, Declined, Duplicate, Invalid, Abandoned, On_Hold, No_Change_Required;
 
-		public static Status [] requestWorkflow = { Open, Resolved, Declined, Duplicate, Invalid, On_Hold };
+		public static Status [] requestWorkflow = { Open, Resolved, Declined, Duplicate, Invalid, Abandoned, On_Hold, No_Change_Required };
 
-		public static Status [] bugWorkflow = { Open, Fixed, Wontfix, Duplicate, Invalid, On_Hold };
+		public static Status [] bugWorkflow = { Open, Fixed, Wontfix, Duplicate, Invalid, Abandoned, On_Hold, No_Change_Required };
 
-		public static Status [] proposalWorkflow = { Open, Resolved, Declined, On_Hold};
+		public static Status [] proposalWorkflow = { Open, Resolved, Declined, Abandoned, On_Hold, No_Change_Required };
+
+		public static Status [] milestoneWorkflow = { Open, Closed, Abandoned, On_Hold };
 
 		@Override
 		public String toString() {

--
Gitblit v1.9.1