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) {