]> source.dussan.org Git - jgit.git/commitdiff
Add getPackFile to ReceivePack to make PostReceiveHook more usable 46/22446/4
authorSaša Živkov <sasa.zivkov@sap.com>
Mon, 24 Feb 2014 16:03:40 +0000 (17:03 +0100)
committerMatthias Sohn <matthias.sohn@sap.com>
Tue, 25 Feb 2014 17:14:39 +0000 (18:14 +0100)
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 <matthias.sohn@sap.com>
org.eclipse.jgit/.settings/.api_filters
org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/PackLock.java
org.eclipse.jgit/src/org/eclipse/jgit/transport/BaseReceivePack.java
org.eclipse.jgit/src/org/eclipse/jgit/transport/ReceivePack.java

index 87a931c8791ee66fd01371144fc9bcd7481d11b9..68673c0b904c7192a47b2718d75ab7d55bc0d5db 100644 (file)
@@ -8,6 +8,14 @@
             </message_arguments>
         </filter>
     </resource>
+    <resource path="src/org/eclipse/jgit/transport/BaseReceivePack.java" type="org.eclipse.jgit.transport.BaseReceivePack">
+        <filter comment="Method is only used by those subclassing BaseReceivePack, minor version are allowed to break implementer API according to OSGi semantic versioning (http://www.osgi.org/wiki/uploads/Links/SemanticVersioning.pdf)" id="338792546">
+            <message_arguments>
+                <message_argument value="org.eclipse.jgit.transport.BaseReceivePack"/>
+                <message_argument value="unlockPack()"/>
+            </message_arguments>
+        </filter>
+    </resource>
     <resource path="src/org/eclipse/jgit/transport/TransportHttp.java" type="org.eclipse.jgit.transport.TransportHttp">
         <filter comment="Method is only used by implementers of TransportHttp's API, minor version are allowed to break implementer API according to OSGi semantic versioning (http://www.osgi.org/wiki/uploads/Links/SemanticVersioning.pdf)" id="338792546">
             <message_arguments>
index b671b03412be8262fb43adf869add51a5e2210f9..c4ccc66768118456e66933637d6758ab08449c81 100644 (file)
@@ -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;
+       }
 }
index 67ab9ef3a636fbd897975e41fd4601a7f6312119..f1cebc8f753bd05f6789db5d94e10d3a8c750baf 100644 (file)
@@ -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;
        }
 
        /**
index 4d931dd5df48ff58ee330b77e9049aa710a7a326..7524c12c152df66005a31ac8bc14effda838805b 100644 (file)
@@ -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) {