The class AtomicObjectOutputStream should be available to all lfs related classes, not only to the server side. Move the class from org.eclipse.jgit.lfs.server.fs to org.eclipse.jgit.lfs.internal to achieve that. Change-Id: I028e1c9ec7c21f316340b21d558b9a6b77e2060dtags/v4.6.0.201612231935-r
org.eclipse.jgit.internal;version="[4.6.0,4.7.0)", | org.eclipse.jgit.internal;version="[4.6.0,4.7.0)", | ||||
org.eclipse.jgit.internal.storage.file;version="[4.6.0,4.7.0)", | org.eclipse.jgit.internal.storage.file;version="[4.6.0,4.7.0)", | ||||
org.eclipse.jgit.lfs.errors;version="[4.6.0,4.7.0)", | org.eclipse.jgit.lfs.errors;version="[4.6.0,4.7.0)", | ||||
org.eclipse.jgit.lfs.internal;version="[4.6.0,4.7.0)", | |||||
org.eclipse.jgit.lfs.lib;version="[4.6.0,4.7.0)", | org.eclipse.jgit.lfs.lib;version="[4.6.0,4.7.0)", | ||||
org.eclipse.jgit.nls;version="[4.6.0,4.7.0)", | org.eclipse.jgit.nls;version="[4.6.0,4.7.0)", | ||||
org.eclipse.jgit.transport.http;version="[4.6.0,4.7.0)", | org.eclipse.jgit.transport.http;version="[4.6.0,4.7.0)", |
corruptLongObject=The content hash ''{0}'' of the long object ''{1}'' doesn''t match its id, the corrupt object will be deleted. | |||||
failedToCalcSignature=Failed to calculate a request signature: {0} | failedToCalcSignature=Failed to calculate a request signature: {0} | ||||
invalidPathInfo=Invalid pathInfo ''{0}'' does not match ''/'{'SHA-256'}''' | invalidPathInfo=Invalid pathInfo ''{0}'' does not match ''/'{'SHA-256'}''' | ||||
objectNotFound=Object ''{0}'' not found | objectNotFound=Object ''{0}'' not found |
import java.util.Collections; | import java.util.Collections; | ||||
import org.eclipse.jgit.annotations.Nullable; | import org.eclipse.jgit.annotations.Nullable; | ||||
import org.eclipse.jgit.lfs.internal.AtomicObjectOutputStream; | |||||
import org.eclipse.jgit.lfs.lib.AnyLongObjectId; | import org.eclipse.jgit.lfs.lib.AnyLongObjectId; | ||||
import org.eclipse.jgit.lfs.lib.Constants; | import org.eclipse.jgit.lfs.lib.Constants; | ||||
import org.eclipse.jgit.lfs.server.LargeFileRepository; | import org.eclipse.jgit.lfs.server.LargeFileRepository; |
import org.apache.http.HttpStatus; | import org.apache.http.HttpStatus; | ||||
import org.eclipse.jgit.lfs.errors.CorruptLongObjectException; | import org.eclipse.jgit.lfs.errors.CorruptLongObjectException; | ||||
import org.eclipse.jgit.lfs.internal.AtomicObjectOutputStream; | |||||
import org.eclipse.jgit.lfs.lib.AnyLongObjectId; | import org.eclipse.jgit.lfs.lib.AnyLongObjectId; | ||||
import org.eclipse.jgit.lfs.lib.Constants; | import org.eclipse.jgit.lfs.lib.Constants; | ||||
} | } | ||||
// @formatter:off | // @formatter:off | ||||
/***/ public String corruptLongObject; | |||||
/***/ public String failedToCalcSignature; | /***/ public String failedToCalcSignature; | ||||
/***/ public String invalidPathInfo; | /***/ public String invalidPathInfo; | ||||
/***/ public String objectNotFound; | /***/ public String objectNotFound; |
Bundle-Vendor: %provider_name | Bundle-Vendor: %provider_name | ||||
Export-Package: org.eclipse.jgit.lfs;version="4.6.0", | Export-Package: org.eclipse.jgit.lfs;version="4.6.0", | ||||
org.eclipse.jgit.lfs.errors;version="4.6.0", | org.eclipse.jgit.lfs.errors;version="4.6.0", | ||||
org.eclipse.jgit.lfs.internal;version="4.6.0";x-friends:="org.eclipse.jgit.lfs.test", | |||||
org.eclipse.jgit.lfs.internal;version="4.6.0";x-friends:="org.eclipse.jgit.lfs.test,org.eclipse.jgit.lfs.server.fs,org.eclipse.jgit.lfs.server", | |||||
org.eclipse.jgit.lfs.lib;version="4.6.0" | org.eclipse.jgit.lfs.lib;version="4.6.0" | ||||
Bundle-RequiredExecutionEnvironment: JavaSE-1.7 | Bundle-RequiredExecutionEnvironment: JavaSE-1.7 | ||||
Import-Package: org.eclipse.jgit.annotations;version="[4.6.0,4.7.0)";resolution:=optional, | Import-Package: org.eclipse.jgit.annotations;version="[4.6.0,4.7.0)";resolution:=optional, |
corruptLongObject=The content hash ''{0}'' of the long object ''{1}'' doesn''t match its id, the corrupt object will be deleted. | |||||
incorrectLONG_OBJECT_ID_LENGTH=Incorrect LONG_OBJECT_ID_LENGTH. | incorrectLONG_OBJECT_ID_LENGTH=Incorrect LONG_OBJECT_ID_LENGTH. | ||||
inconsistentMediafileLength=mediafile {0} has unexpected length; expected {1} but found {2}. | inconsistentMediafileLength=mediafile {0} has unexpected length; expected {1} but found {2}. | ||||
invalidLongId=Invalid id: {0} | invalidLongId=Invalid id: {0} |
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF | ||||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
*/ | */ | ||||
package org.eclipse.jgit.lfs.server.fs; | |||||
package org.eclipse.jgit.lfs.internal; | |||||
import java.io.IOException; | import java.io.IOException; | ||||
import java.io.OutputStream; | import java.io.OutputStream; | ||||
import org.eclipse.jgit.lfs.lib.AnyLongObjectId; | import org.eclipse.jgit.lfs.lib.AnyLongObjectId; | ||||
import org.eclipse.jgit.lfs.lib.Constants; | import org.eclipse.jgit.lfs.lib.Constants; | ||||
import org.eclipse.jgit.lfs.lib.LongObjectId; | import org.eclipse.jgit.lfs.lib.LongObjectId; | ||||
import org.eclipse.jgit.lfs.server.internal.LfsServerText; | |||||
/** | /** | ||||
* Output stream writing content to a {@link LockFile} which is committed on | * Output stream writing content to a {@link LockFile} which is committed on | ||||
* close(). The stream checks if the hash of the stream content matches the | * close(). The stream checks if the hash of the stream content matches the | ||||
* id. | * id. | ||||
*/ | */ | ||||
class AtomicObjectOutputStream extends OutputStream { | |||||
public class AtomicObjectOutputStream extends OutputStream { | |||||
private LockFile locked; | private LockFile locked; | ||||
private AnyLongObjectId id; | private AnyLongObjectId id; | ||||
AtomicObjectOutputStream(Path path, AnyLongObjectId id) | |||||
/** | |||||
* @param path | |||||
* @param id | |||||
* @throws IOException | |||||
*/ | |||||
public AtomicObjectOutputStream(Path path, AnyLongObjectId id) | |||||
throws IOException { | throws IOException { | ||||
locked = new LockFile(path.toFile()); | locked = new LockFile(path.toFile()); | ||||
locked.lock(); | locked.lock(); | ||||
if (!contentHash.equals(id)) { | if (!contentHash.equals(id)) { | ||||
abort(); | abort(); | ||||
throw new CorruptLongObjectException(id, contentHash, | throw new CorruptLongObjectException(id, contentHash, | ||||
MessageFormat.format(LfsServerText.get().corruptLongObject, | |||||
MessageFormat.format(LfsText.get().corruptLongObject, | |||||
contentHash, id)); | contentHash, id)); | ||||
} | } | ||||
} | } | ||||
void abort() { | |||||
/** | |||||
* Aborts the stream. Temporary file will be deleted | |||||
*/ | |||||
public void abort() { | |||||
locked.unlock(); | locked.unlock(); | ||||
aborted = true; | aborted = true; | ||||
} | } |
} | } | ||||
// @formatter:off | // @formatter:off | ||||
/***/ public String corruptLongObject; | |||||
/***/ public String inconsistentMediafileLength; | /***/ public String inconsistentMediafileLength; | ||||
/***/ public String incorrectLONG_OBJECT_ID_LENGTH; | /***/ public String incorrectLONG_OBJECT_ID_LENGTH; | ||||
/***/ public String invalidLongId; | /***/ public String invalidLongId; |
org.eclipse.jgit.junit, | org.eclipse.jgit.junit, | ||||
org.eclipse.jgit.junit.http, | org.eclipse.jgit.junit.http, | ||||
org.eclipse.jgit.http.server, | org.eclipse.jgit.http.server, | ||||
org.eclipse.jgit.lfs.server, | |||||
org.eclipse.jgit.lfs, | |||||
org.eclipse.jgit.pgm, | org.eclipse.jgit.pgm, | ||||
org.eclipse.jgit.pgm.test", | org.eclipse.jgit.pgm.test", | ||||
org.eclipse.jgit.internal.storage.pack;version="4.6.0";x-friends:="org.eclipse.jgit.junit,org.eclipse.jgit.test,org.eclipse.jgit.pgm", | org.eclipse.jgit.internal.storage.pack;version="4.6.0";x-friends:="org.eclipse.jgit.junit,org.eclipse.jgit.test,org.eclipse.jgit.pgm", |