소스 검색

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 <matthias.sohn@sap.com>
tags/v3.3.0.201403021825-r
Saša Živkov 10 년 전
부모
커밋
2670fd427c

+ 8
- 0
org.eclipse.jgit/.settings/.api_filters 파일 보기

@@ -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>

+ 9
- 0
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;
}
}

+ 8
- 1
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;
}

/**

+ 14
- 1
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) {

Loading…
취소
저장