From 2670fd427cd4aad49ccdb6dde66271fdffff86f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sa=C5=A1a=20=C5=BDivkov?= Date: Mon, 24 Feb 2014 17:03:40 +0100 Subject: [PATCH] Add getPackFile to ReceivePack to make PostReceiveHook more usable Having access to the pack file that was created by the ReceivePack may be useful for post receive hooks. For example, a hook may want to check the size of the received pack and the created index. Change-Id: I4d51758e4565d32c9f8892242947eb72644b847d Signed-off-by: Matthias Sohn --- org.eclipse.jgit/.settings/.api_filters | 8 ++++++++ .../jgit/internal/storage/file/PackLock.java | 9 +++++++++ .../eclipse/jgit/transport/BaseReceivePack.java | 9 ++++++++- .../org/eclipse/jgit/transport/ReceivePack.java | 15 ++++++++++++++- 4 files changed, 39 insertions(+), 2 deletions(-) diff --git a/org.eclipse.jgit/.settings/.api_filters b/org.eclipse.jgit/.settings/.api_filters index 87a931c87..68673c0b9 100644 --- a/org.eclipse.jgit/.settings/.api_filters +++ b/org.eclipse.jgit/.settings/.api_filters @@ -8,6 +8,14 @@ + + + + + + + + diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/PackLock.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/PackLock.java index b671b0341..c4ccc6676 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/PackLock.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/PackLock.java @@ -54,6 +54,7 @@ import org.eclipse.jgit.util.FileUtils; public class PackLock { private final File keepFile; private final FS fs; + private final File packFile; /** * Create a new lock for a pack file. @@ -68,6 +69,7 @@ public class PackLock { final String n = packFile.getName(); keepFile = new File(p, n.substring(0, n.length() - 5) + ".keep"); //$NON-NLS-1$ this.fs = fs; + this.packFile = packFile; } /** @@ -100,4 +102,11 @@ public class PackLock { public void unlock() throws IOException { FileUtils.delete(keepFile); } + + /** + * @return the pack file being held by this lock + */ + public File getPackFile() { + return packFile; + } } diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/BaseReceivePack.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/BaseReceivePack.java index 67ab9ef3a..f1cebc8f7 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/BaseReceivePack.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/BaseReceivePack.java @@ -51,6 +51,7 @@ import static org.eclipse.jgit.transport.SideBandOutputStream.CH_DATA; import static org.eclipse.jgit.transport.SideBandOutputStream.CH_PROGRESS; import static org.eclipse.jgit.transport.SideBandOutputStream.MAX_BUF; +import java.io.File; import java.io.EOFException; import java.io.IOException; import java.io.InputStream; @@ -804,14 +805,20 @@ public abstract class BaseReceivePack { /** * Unlock the pack written by this object. * + * @return the pack file that was unlocked, {@code null} if there was no + * lock * @throws IOException * the pack could not be unlocked. + * @since 3.3 */ - protected void unlockPack() throws IOException { + protected File unlockPack() throws IOException { if (packLock != null) { + File packFile = packLock.getPackFile(); packLock.unlock(); packLock = null; + return packFile; } + return null; } /** diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/ReceivePack.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/ReceivePack.java index 4d931dd5d..7524c12c1 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/ReceivePack.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/ReceivePack.java @@ -45,6 +45,7 @@ package org.eclipse.jgit.transport; import static org.eclipse.jgit.transport.GitProtocolConstants.CAPABILITY_REPORT_STATUS; +import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; @@ -70,6 +71,9 @@ public class ReceivePack extends BaseReceivePack { private boolean echoCommandFailures; + /** The pack file that was created by this receive pack */ + private File packFile; + /** * Create a new pack receive for an open repository. * @@ -167,6 +171,15 @@ public class ReceivePack extends BaseReceivePack { } } + /** + * @return the pack file that was created by the + * {@link #receive(InputStream, OutputStream, OutputStream)} method + * @since 3.3 + */ + public File getPackFile() { + return packFile; + } + @Override protected void enableCapabilities() { reportStatus = isCapabilityEnabled(CAPABILITY_REPORT_STATUS); @@ -203,7 +216,7 @@ public class ReceivePack extends BaseReceivePack { preReceive.onPreReceive(this, filterCommands(Result.NOT_ATTEMPTED)); executeCommands(); } - unlockPack(); + packFile = unlockPack(); if (reportStatus) { if (echoCommandFailures && msgOut != null) {