From 4baed92559bc38f421fb8ea3dd6e177db886d780 Mon Sep 17 00:00:00 2001 From: Florian Zschocke Date: Wed, 7 Dec 2022 20:33:38 +0100 Subject: [PATCH] fix: Fix broken pushes to tickets The update of JGit broke pushes to tickets. The ReceiveCommand now requires all three arguments, oldId, newId and name, to be not null. The ticket code handling pushes to tickets left name and old id as null in certain cases. This is fixed by always providing values. --- .../java/com/gitblit/git/PatchsetCommand.java | 2 +- .../java/com/gitblit/git/PatchsetReceivePack.java | 15 ++++++++------- src/main/java/com/gitblit/models/TicketModel.java | 1 + 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/gitblit/git/PatchsetCommand.java b/src/main/java/com/gitblit/git/PatchsetCommand.java index 21d2ac45..829ece1d 100644 --- a/src/main/java/com/gitblit/git/PatchsetCommand.java +++ b/src/main/java/com/gitblit/git/PatchsetCommand.java @@ -106,7 +106,7 @@ public class PatchsetCommand extends ReceiveCommand { public PatchsetCommand(String username, Patchset patchset) { super(patchset.isFF() ? ObjectId.fromString(patchset.parent) : ObjectId.zeroId(), - ObjectId.fromString(patchset.tip), null); + ObjectId.fromString(patchset.tip), getPatchsetBranch(patchset.ticketId, patchset.number)); this.change = new Change(username); this.change.patchset = patchset; } diff --git a/src/main/java/com/gitblit/git/PatchsetReceivePack.java b/src/main/java/com/gitblit/git/PatchsetReceivePack.java index 4a09139a..c44c95ef 100644 --- a/src/main/java/com/gitblit/git/PatchsetReceivePack.java +++ b/src/main/java/com/gitblit/git/PatchsetReceivePack.java @@ -774,6 +774,7 @@ public class PatchsetReceivePack extends GitblitReceivePack { // assign new id long ticketId = ticketService.assignNewId(repository); + patchset.ticketId = ticketId; // create the patchset command psCmd = new PatchsetCommand(user.username, patchset); @@ -1102,6 +1103,7 @@ public class PatchsetReceivePack extends GitblitReceivePack { newPatchset.tip = tip; newPatchset.base = mergeBase; newPatchset.commits = totalCommits; + newPatchset.ticketId = ticket == null ? 0 : ticket.number; Patchset currPatchset = ticket == null ? null : ticket.getCurrentPatchset(); if (currPatchset == null) { @@ -1196,12 +1198,10 @@ public class PatchsetReceivePack extends GitblitReceivePack { } private RefUpdate updateRef(String ref, ObjectId newId, PatchsetType type) { - ObjectId ticketRefId = ObjectId.zeroId(); + ObjectId ticketRefId = null; try { ticketRefId = getRepository().resolve(ref); - } catch (Exception e) { - // ignore - } + } catch (Exception ignored) {} try { RefUpdate ru = getRepository().updateRef(ref, false); @@ -1217,7 +1217,7 @@ public class PatchsetReceivePack extends GitblitReceivePack { break; } - ru.setExpectedOldObjectId(ticketRefId); + ru.setExpectedOldObjectId((ticketRefId == null) ? ObjectId.zeroId() : ticketRefId); ru.setNewObjectId(newId); RefUpdate.Result result = ru.update(getRevWalk()); if (result == RefUpdate.Result.LOCK_FAILURE) { @@ -1254,7 +1254,8 @@ public class PatchsetReceivePack extends GitblitReceivePack { ru.getResult(), ru.getName())); return; } - ReceiveCommand cmd = new ReceiveCommand(ru.getOldObjectId(), ru.getNewObjectId(), ru.getName(), type); + ObjectId oldId = (ru.getOldObjectId() == null) ? ObjectId.zeroId() : ru.getOldObjectId(); + ReceiveCommand cmd = new ReceiveCommand(oldId, ru.getNewObjectId(), ru.getName(), type); RefLogUtils.updateRefLog(user, getRepository(), Arrays.asList(cmd)); } @@ -1331,4 +1332,4 @@ public class PatchsetReceivePack extends GitblitReceivePack { public void sendAll() { ticketNotifier.sendAll(); } -} +} diff --git a/src/main/java/com/gitblit/models/TicketModel.java b/src/main/java/com/gitblit/models/TicketModel.java index 65e29dc0..a60cdc44 100644 --- a/src/main/java/com/gitblit/models/TicketModel.java +++ b/src/main/java/com/gitblit/models/TicketModel.java @@ -1163,6 +1163,7 @@ public class TicketModel implements Serializable, Comparable { private static final long serialVersionUID = 1L; + public long ticketId; public int number; public int rev; public String tip; -- 2.39.5