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