Paul Martin
2016-04-27 c2188a840bc4153ae92112b04b2e06a90d3944aa
src/main/java/com/gitblit/tickets/TicketNotifier.java
@@ -135,6 +135,7 @@
         StringBuilder html = new StringBuilder();
         html.append("<head>");
         html.append(readStyle());
         html.append(readViewTicketAction(ticket));
         html.append("</head>");
         html.append("<body>");
         html.append(MarkdownUtils.transformGFM(settings, markdown, ticket.repository));
@@ -204,7 +205,9 @@
         } catch (Exception e) {
            Logger.getLogger(getClass()).error("failed to get changed paths", e);
         } finally {
            repo.close();
            if (repo != null) {
               repo.close();
            }
         }
         String compareUrl = ticketService.getCompareUrl(ticket, base, patchset.tip);
@@ -314,6 +317,19 @@
         // comment update
         sb.append(MessageFormat.format("**{0}** commented on this ticket.", user.getDisplayName()));
         sb.append(HARD_BRK);
      } else if (lastChange.hasReference()) {
         // reference update
         String type = "?";
         switch (lastChange.reference.getSourceType()) {
            case Commit: { type = "commit"; } break;
            case Ticket: { type = "ticket"; } break;
            default: { } break;
         }
         sb.append(MessageFormat.format("**{0}** referenced this ticket in {1} {2}", type, lastChange.toString()));
         sb.append(HARD_BRK);
      } else {
         // general update
         pattern = "**{0}** has updated this ticket.";
@@ -543,7 +559,6 @@
            }
         }
      }
      mailing.setRecipients(toAddresses);
      //
      // CC recipients
@@ -552,7 +567,7 @@
      // repository owners
      if (!ArrayUtils.isEmpty(repository.owners)) {
         tos.addAll(repository.owners);
         ccs.addAll(repository.owners);
      }
      // cc users mentioned in last comment
@@ -593,6 +608,14 @@
      }
      ccAddresses.addAll(settings.getStrings(Keys.mail.mailingLists));
      // respect the author's email preference
      UserModel lastAuthor = userManager.getUserModel(lastChange.author);
      if (lastAuthor != null && !lastAuthor.getPreferences().isEmailMeOnMyTicketChanges()) {
         toAddresses.remove(lastAuthor.emailAddress);
         ccAddresses.remove(lastAuthor.emailAddress);
      }
      mailing.setRecipients(toAddresses);
      mailing.setCCs(ccAddresses);
   }
@@ -604,6 +627,12 @@
      return sb.toString();
   }
   protected String readViewTicketAction(TicketModel ticket) {
      String action = readResource("viewTicket.html");
      action = action.replace("${url}", ticketService.getTicketUrl(ticket));
      return action;
   }
   protected String readResource(String resource) {
      StringBuilder sb = new StringBuilder();
      InputStream is = null;