From cd7e4f9186f2ace4416780a7dd6341e01e23a45f Mon Sep 17 00:00:00 2001 From: Paul Martin Date: Sun, 3 Apr 2016 20:30:22 +0100 Subject: Fix for #962 - Delete patchset ability --- src/main/java/com/gitblit/models/TicketModel.java | 45 ++++++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) (limited to 'src/main/java/com/gitblit/models') diff --git a/src/main/java/com/gitblit/models/TicketModel.java b/src/main/java/com/gitblit/models/TicketModel.java index fd0b09eb..7495448f 100644 --- a/src/main/java/com/gitblit/models/TicketModel.java +++ b/src/main/java/com/gitblit/models/TicketModel.java @@ -107,6 +107,30 @@ public class TicketModel implements Serializable, Comparable { TicketModel ticket; List effectiveChanges = new ArrayList(); Map comments = new HashMap(); + Map latestRevisions = new HashMap(); + + int latestPatchsetNumber = -1; + + List deletedPatchsets = new ArrayList(); + + for (Change change : changes) { + if (change.patchset != null) { + if (change.patchset.isDeleted()) { + deletedPatchsets.add(change.patchset.number); + } else { + Integer latestRev = latestRevisions.get(change.patchset.number); + + if (latestRev == null || change.patchset.rev > latestRev) { + latestRevisions.put(change.patchset.number, change.patchset.rev); + } + + if (change.patchset.number > latestPatchsetNumber) { + latestPatchsetNumber = change.patchset.number; + } + } + } + } + for (Change change : changes) { if (change.comment != null) { if (comments.containsKey(change.comment.id)) { @@ -122,6 +146,19 @@ public class TicketModel implements Serializable, Comparable { effectiveChanges.add(change); comments.put(change.comment.id, change); } + } else if (change.patchset != null) { + //All revisions of a deleted patchset are not displayed + if (!deletedPatchsets.contains(change.patchset.number)) { + + Integer latestRev = latestRevisions.get(change.patchset.number); + + if ( (change.patchset.number < latestPatchsetNumber) + && (change.patchset.rev == latestRev)) { + change.patchset.canDelete = true; + } + + effectiveChanges.add(change); + } } else { effectiveChanges.add(change); } @@ -1033,10 +1070,16 @@ public class TicketModel implements Serializable, Comparable { public int added; public PatchsetType type; + public transient boolean canDelete = false; + public boolean isFF() { return PatchsetType.FastForward == type; } + public boolean isDeleted() { + return PatchsetType.Delete == type; + } + @Override public int hashCode() { return toString().hashCode(); @@ -1287,7 +1330,7 @@ public class TicketModel implements Serializable, Comparable { } public static enum PatchsetType { - Proposal, FastForward, Rebase, Squash, Rebase_Squash, Amend; + Proposal, FastForward, Rebase, Squash, Rebase_Squash, Amend, Delete; public boolean isRewrite() { return (this != FastForward) && (this != Proposal); -- cgit v1.2.3