src/main/java/com/gitblit/tickets/ITicketService.java
@@ -714,6 +714,7 @@ } Repository db = null; try { TicketMilestone tm = getMilestone(repository, milestone); db = repositoryManager.getRepository(repository.name); StoredConfig config = db.getConfig(); config.unsetSection(MILESTONE, milestone); @@ -721,6 +722,14 @@ milestonesCache.remove(repository.name); for (QueryResult qr : tm.tickets) { if (qr.isOpen()) { // reset the milestone only for open tickets Change change = new Change(createdBy); change.setField(Field.milestone, ""); TicketModel ticket = updateTicket(repository, qr.number, change); } } return true; } catch (IOException e) { log.error("failed to delete milestone " + milestone + " in " + repository, e); src/main/java/com/gitblit/tickets/QueryResult.java
@@ -74,6 +74,14 @@ return type != null && Type.Proposal == type; } public boolean isOpen() { return !status.isClosed(); } public boolean isClosed() { return status.isClosed(); } public boolean isMerged() { return Status.Merged == status && !StringUtils.isEmpty(mergeSha); } src/main/java/com/gitblit/wicket/pages/EditMilestonePage.html
@@ -27,7 +27,7 @@ <div class="row"> <div class="span12"> <div class="form-actions"><input class="btn btn-appmenu" type="submit" value="Save" wicket:message="value:gb.save" wicket:id="save" /> <input class="btn" type="submit" value="Cancel" wicket:message="value:gb.cancel" wicket:id="cancel" /></div> <div class="form-actions"><input class="btn btn-appmenu" type="submit" value="Save" wicket:message="value:gb.save" wicket:id="save" /> <input class="btn" type="submit" value="Cancel" wicket:message="value:gb.cancel" wicket:id="cancel" /> <input class="btn btn-danger" type="submit" value="Delete" wicket:message="value:gb.delete" wicket:id="delete" /></div> </div> </div> </form> src/main/java/com/gitblit/wicket/pages/EditMilestonePage.java
@@ -28,13 +28,13 @@ import org.apache.wicket.markup.html.form.TextField; import org.apache.wicket.model.IModel; import org.apache.wicket.model.Model; import org.parboiled.common.StringUtils; import com.gitblit.models.RepositoryModel; import com.gitblit.models.TicketModel; import com.gitblit.models.TicketModel.Status; import com.gitblit.models.UserModel; import com.gitblit.tickets.TicketMilestone; import com.gitblit.utils.StringUtils; import com.gitblit.wicket.GitBlitWebSession; import com.gitblit.wicket.WicketUtils; @@ -152,6 +152,23 @@ cancel.setDefaultFormProcessing(false); form.add(cancel); Button delete = new Button("delete") { private static final long serialVersionUID = 1L; @Override public void onSubmit() { UserModel currentUser = GitBlitWebSession.get().getUser(); String createdBy = currentUser.username; if (app().tickets().deleteMilestone(getRepositoryModel(), oldName, createdBy)) { setResponsePage(TicketsPage.class, WicketUtils.newRepositoryParameter(repositoryName)); } else { // TODO error processing } } }; delete.setDefaultFormProcessing(false); form.add(delete); } @Override src/main/java/com/gitblit/wicket/pages/NewMilestonePage.java
@@ -29,6 +29,8 @@ import com.gitblit.models.RepositoryModel; import com.gitblit.models.UserModel; import com.gitblit.tickets.TicketMilestone; import com.gitblit.utils.StringUtils; import com.gitblit.utils.TimeUtils; import com.gitblit.wicket.GitBlitWebSession; import com.gitblit.wicket.WicketUtils; @@ -74,6 +76,10 @@ protected void onSubmit() { String name = nameModel.getObject(); if (StringUtils.isEmpty(name)) { return; } Date due = dueModel.getObject(); UserModel currentUser = GitBlitWebSession.get().getUser(); @@ -92,7 +98,7 @@ add(form); nameModel = Model.of(""); dueModel = Model.of(new Date()); dueModel = Model.of(new Date(System.currentTimeMillis() + TimeUtils.ONEDAY)); form.add(new TextField<String>("name", nameModel)); form.add(new DateTextField("due", dueModel, "yyyy-MM-dd"));