Hybris95
2014-04-22 3f5b8f5d9203aa7ffb7fbe9cdbaf9dba3da6cae6
src/main/java/com/gitblit/tickets/TicketNotifier.java
@@ -174,52 +174,13 @@
      fieldExclusions.addAll(Arrays.asList(Field.watchers, Field.voters));
      StringBuilder sb = new StringBuilder();
      boolean newTicket = false;
      boolean newTicket = lastChange.isStatusChange() && Status.New == lastChange.getStatus();
      boolean isFastForward = true;
      List<RevCommit> commits = null;
      DiffStat diffstat = null;
      String pattern;
      if (lastChange.isStatusChange()) {
         Status state = lastChange.getStatus();
         switch (state) {
         case New:
            // new ticket
            newTicket = true;
            fieldExclusions.add(Field.status);
            fieldExclusions.add(Field.title);
            fieldExclusions.add(Field.body);
            if (lastChange.hasPatchset()) {
               pattern = "**{0}** is proposing a change.";
            } else {
               pattern = "**{0}** created this ticket.";
            }
            sb.append(MessageFormat.format(pattern, user.getDisplayName()));
            break;
         default:
            // some form of resolved
            if (lastChange.hasField(Field.mergeSha)) {
               // closed by push (merged patchset)
               pattern = "**{0}** closed this ticket by pushing {1} to {2}.";
               // identify patch that closed the ticket
               String merged = ticket.mergeSha;
               for (Patchset patchset : ticket.getPatchsets()) {
                  if (patchset.tip.equals(ticket.mergeSha)) {
                     merged = patchset.toString();
                     break;
                  }
               }
               sb.append(MessageFormat.format(pattern, user.getDisplayName(), merged, ticket.mergeTo));
            } else {
               // workflow status change by user
               pattern = "**{0}** changed the status of this ticket to **{1}**.";
               sb.append(MessageFormat.format(pattern, user.getDisplayName(), lastChange.getStatus().toString().toUpperCase()));
            }
            break;
         }
         sb.append(HARD_BRK);
      } else if (lastChange.hasPatchset()) {
      if (lastChange.hasPatchset()) {
         // patchset uploaded
         Patchset patchset = lastChange.patchset;
         String base = "";
@@ -243,19 +204,32 @@
         } catch (Exception e) {
            Logger.getLogger(getClass()).error("failed to get changed paths", e);
         } finally {
            repo.close();
            if (repo != null) {
               repo.close();
            }
         }
         // describe the patchset
         String compareUrl = ticketService.getCompareUrl(ticket, base, patchset.tip);
         if (patchset.isFF()) {
            pattern = "**{0}** added {1} {2} to patchset {3}.";
            sb.append(MessageFormat.format(pattern, user.getDisplayName(), patchset.added, patchset.added == 1 ? "commit" : "commits", patchset.number));
         if (newTicket) {
            // new proposal
            pattern = "**{0}** is proposing a change.";
            sb.append(MessageFormat.format(pattern, user.getDisplayName()));
            fieldExclusions.add(Field.status);
            fieldExclusions.add(Field.title);
            fieldExclusions.add(Field.body);
         } else {
            pattern = "**{0}** uploaded patchset {1}. *({2})*";
            sb.append(MessageFormat.format(pattern, user.getDisplayName(), patchset.number, patchset.type.toString().toUpperCase()));
            // describe the patchset
            if (patchset.isFF()) {
               pattern = "**{0}** added {1} {2} to patchset {3}.";
               sb.append(MessageFormat.format(pattern, user.getDisplayName(), patchset.added, patchset.added == 1 ? "commit" : "commits", patchset.number));
            } else {
               pattern = "**{0}** uploaded patchset {1}. *({2})*";
               sb.append(MessageFormat.format(pattern, user.getDisplayName(), patchset.number, patchset.type.toString().toUpperCase()));
            }
         }
         sb.append(HARD_BRK);
         sb.append(MessageFormat.format("{0} {1}, {2} {3}, <span style=\"color:darkgreen;\">+{4} insertions</span>, <span style=\"color:darkred;\">-{5} deletions</span> from {6}. [compare]({7})",
               commits.size(), commits.size() == 1 ? "commit" : "commits",
               diffstat.paths.size(),
@@ -275,6 +249,32 @@
            break;
         default:
            break;
         }
         sb.append(HARD_BRK);
      } else if (lastChange.isStatusChange()) {
         if (newTicket) {
            fieldExclusions.add(Field.status);
            fieldExclusions.add(Field.title);
            fieldExclusions.add(Field.body);
            pattern = "**{0}** created this ticket.";
            sb.append(MessageFormat.format(pattern, user.getDisplayName()));
         } else if (lastChange.hasField(Field.mergeSha)) {
            // closed by merged
            pattern = "**{0}** closed this ticket by merging {1} to {2}.";
            // identify patchset that closed the ticket
            String merged = ticket.mergeSha;
            for (Patchset patchset : ticket.getPatchsets()) {
               if (patchset.tip.equals(ticket.mergeSha)) {
                  merged = patchset.toString();
                  break;
               }
            }
            sb.append(MessageFormat.format(pattern, user.getDisplayName(), merged, ticket.mergeTo));
         } else {
            // workflow status change by user
            pattern = "**{0}** changed the status of this ticket to **{1}**.";
            sb.append(MessageFormat.format(pattern, user.getDisplayName(), lastChange.getStatus().toString().toUpperCase()));
         }
         sb.append(HARD_BRK);
      } else if (lastChange.hasReview()) {
@@ -491,6 +491,7 @@
      instructions = instructions.replace("${ticketRef}", ticketBranch);
      instructions = instructions.replace("${patchsetRef}", patchsetBranch);
      instructions = instructions.replace("${reviewBranch}", reviewBranch);
      instructions = instructions.replace("${ticketBranch}", ticketBranch);
      return instructions;
   }
@@ -521,11 +522,18 @@
      //
      // Direct TO recipients
      // reporter & responsible
      //
      Set<String> tos = new TreeSet<String>();
      tos.add(ticket.createdBy);
      if (!StringUtils.isEmpty(ticket.responsible)) {
         tos.add(ticket.responsible);
      }
      Set<String> toAddresses = new TreeSet<String>();
      for (String name : ticket.getParticipants()) {
      for (String name : tos) {
         UserModel user = userManager.getUserModel(name);
         if (user != null) {
         if (user != null && !user.disabled) {
            if (!StringUtils.isEmpty(user.emailAddress)) {
               if (user.canView(repository)) {
                  toAddresses.add(user.emailAddress);
@@ -543,6 +551,11 @@
      // CC recipients
      //
      Set<String> ccs = new TreeSet<String>();
      // repository owners
      if (!ArrayUtils.isEmpty(repository.owners)) {
         tos.addAll(repository.owners);
      }
      // cc users mentioned in last comment
      Change lastChange = ticket.changes.get(ticket.changes.size() - 1);
@@ -563,7 +576,7 @@
      Set<String> ccAddresses = new TreeSet<String>();
      for (String name : ccs) {
         UserModel user = userManager.getUserModel(name);
         if (user != null) {
         if (user != null && !user.disabled) {
            if (!StringUtils.isEmpty(user.emailAddress)) {
               if (user.canView(repository)) {
                  ccAddresses.add(user.emailAddress);