]> source.dussan.org Git - jgit.git/commitdiff
Move AtomicObjectOutputStream to lfs/internal 88/76588/8
authorChristian Halstrick <christian.halstrick@sap.com>
Tue, 5 Jul 2016 07:05:59 +0000 (09:05 +0200)
committerMatthias Sohn <matthias.sohn@sap.com>
Tue, 20 Sep 2016 08:58:20 +0000 (10:58 +0200)
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: I028e1c9ec7c21f316340b21d558b9a6b77e2060d

org.eclipse.jgit.lfs.server/META-INF/MANIFEST.MF
org.eclipse.jgit.lfs.server/resources/org/eclipse/jgit/lfs/server/internal/LfsServerText.properties
org.eclipse.jgit.lfs.server/src/org/eclipse/jgit/lfs/server/fs/AtomicObjectOutputStream.java [deleted file]
org.eclipse.jgit.lfs.server/src/org/eclipse/jgit/lfs/server/fs/FileLfsRepository.java
org.eclipse.jgit.lfs.server/src/org/eclipse/jgit/lfs/server/fs/ObjectUploadListener.java
org.eclipse.jgit.lfs.server/src/org/eclipse/jgit/lfs/server/internal/LfsServerText.java
org.eclipse.jgit.lfs/META-INF/MANIFEST.MF
org.eclipse.jgit.lfs/resources/org/eclipse/jgit/lfs/internal/LfsText.properties
org.eclipse.jgit.lfs/src/org/eclipse/jgit/lfs/internal/AtomicObjectOutputStream.java [new file with mode: 0644]
org.eclipse.jgit.lfs/src/org/eclipse/jgit/lfs/internal/LfsText.java
org.eclipse.jgit/META-INF/MANIFEST.MF

index 42a615a9f5db37422b75cccea8481dbc6ae1a70f..54eca40217ffaec1fb84cbcc3df67d02c378d3eb 100644 (file)
@@ -28,6 +28,7 @@ Import-Package: com.google.gson;version="[2.2.4,3.0.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.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.nls;version="[4.6.0,4.7.0)",
  org.eclipse.jgit.transport.http;version="[4.6.0,4.7.0)",
index f97acaccccd84564ac6a8db7747d993f0b2ad467..b2b487eefc847b9849bdfa3b454c668582e8fb07 100644 (file)
@@ -1,4 +1,3 @@
-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}
 invalidPathInfo=Invalid pathInfo ''{0}'' does not match ''/'{'SHA-256'}'''
 objectNotFound=Object ''{0}'' not found
diff --git a/org.eclipse.jgit.lfs.server/src/org/eclipse/jgit/lfs/server/fs/AtomicObjectOutputStream.java b/org.eclipse.jgit.lfs.server/src/org/eclipse/jgit/lfs/server/fs/AtomicObjectOutputStream.java
deleted file mode 100644 (file)
index ecc7c1f..0000000
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- * Copyright (C) 2015, Matthias Sohn <matthias.sohn@sap.com>
- * and other copyright owners as documented in the project's IP log.
- *
- * This program and the accompanying materials are made available
- * under the terms of the Eclipse Distribution License v1.0 which
- * accompanies this distribution, is reproduced below, and is
- * available at http://www.eclipse.org/org/documents/edl-v10.php
- *
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or
- * without modification, are permitted provided that the following
- * conditions are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- *
- * - Redistributions in binary form must reproduce the above
- *   copyright notice, this list of conditions and the following
- *   disclaimer in the documentation and/or other materials provided
- *   with the distribution.
- *
- * - Neither the name of the Eclipse Foundation, Inc. nor the
- *   names of its contributors may be used to endorse or promote
- *   products derived from this software without specific prior
- *   written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
- * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.eclipse.jgit.lfs.server.fs;
-
-import java.io.IOException;
-import java.io.OutputStream;
-import java.nio.file.Path;
-import java.security.DigestOutputStream;
-import java.text.MessageFormat;
-
-import org.eclipse.jgit.internal.storage.file.LockFile;
-import org.eclipse.jgit.lfs.errors.CorruptLongObjectException;
-import org.eclipse.jgit.lfs.lib.AnyLongObjectId;
-import org.eclipse.jgit.lfs.lib.Constants;
-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
- * close(). The stream checks if the hash of the stream content matches the
- * id.
- */
-class AtomicObjectOutputStream extends OutputStream {
-
-       private LockFile locked;
-
-       private DigestOutputStream out;
-
-       private boolean aborted;
-
-       private AnyLongObjectId id;
-
-       AtomicObjectOutputStream(Path path, AnyLongObjectId id)
-                       throws IOException {
-               locked = new LockFile(path.toFile());
-               locked.lock();
-               this.id = id;
-               out = new DigestOutputStream(locked.getOutputStream(),
-                               Constants.newMessageDigest());
-       }
-
-       @Override
-       public void write(int b) throws IOException {
-               out.write(b);
-       }
-
-       @Override
-       public void write(byte[] b) throws IOException {
-               out.write(b);
-       }
-
-       @Override
-       public void write(byte[] b, int off, int len) throws IOException {
-               out.write(b, off, len);
-       }
-
-       @Override
-       public void close() throws IOException {
-               out.close();
-               if (!aborted) {
-                       verifyHash();
-                       locked.commit();
-               }
-       }
-
-       private void verifyHash() {
-               AnyLongObjectId contentHash = LongObjectId
-                               .fromRaw(out.getMessageDigest().digest());
-               if (!contentHash.equals(id)) {
-                       abort();
-                       throw new CorruptLongObjectException(id, contentHash,
-                                       MessageFormat.format(LfsServerText.get().corruptLongObject,
-                                                       contentHash, id));
-               }
-       }
-
-       void abort() {
-               locked.unlock();
-               aborted = true;
-       }
-}
\ No newline at end of file
index dd70a364e4b0a60ecb0f87b217200193a6e5a336..a05fa01424ccb7d03ed2de95c323a91467ec76f0 100644 (file)
@@ -53,6 +53,7 @@ import java.nio.file.StandardOpenOption;
 import java.util.Collections;
 
 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.Constants;
 import org.eclipse.jgit.lfs.server.LargeFileRepository;
index d44b3db5de08ca5d987e299d45b5b2481f43d446..bb3174308190823268d627fbeb6168c5e776d2be 100644 (file)
@@ -59,6 +59,7 @@ import javax.servlet.http.HttpServletResponse;
 
 import org.apache.http.HttpStatus;
 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.Constants;
 
index c5ad53a54138601a05b99ad534e1271bb3839eac..2e088fde8d61cb73399c55c5a6fb897e8bfa84f9 100644 (file)
@@ -58,7 +58,6 @@ public class LfsServerText extends TranslationBundle {
        }
 
        // @formatter:off
-       /***/ public String corruptLongObject;
        /***/ public String failedToCalcSignature;
        /***/ public String invalidPathInfo;
        /***/ public String objectNotFound;
index c8ba3e1bc3e071ff23af8abd2ce05223505a48be..35a7c2237e7354f75cbd5327ad0001ffd03e3d23 100644 (file)
@@ -7,7 +7,7 @@ Bundle-Localization: plugin
 Bundle-Vendor: %provider_name
 Export-Package: org.eclipse.jgit.lfs;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"
 Bundle-RequiredExecutionEnvironment: JavaSE-1.7
 Import-Package: org.eclipse.jgit.annotations;version="[4.6.0,4.7.0)";resolution:=optional,
index 25c101f0b0c4c46ad50d6d5be57f78fddb562984..5e52a782f07d1d72a9272ded198bad24cd0ce420 100644 (file)
@@ -1,3 +1,4 @@
+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.
 inconsistentMediafileLength=mediafile {0} has unexpected length; expected {1} but found {2}.
 invalidLongId=Invalid id: {0}
diff --git a/org.eclipse.jgit.lfs/src/org/eclipse/jgit/lfs/internal/AtomicObjectOutputStream.java b/org.eclipse.jgit.lfs/src/org/eclipse/jgit/lfs/internal/AtomicObjectOutputStream.java
new file mode 100644 (file)
index 0000000..7e050b1
--- /dev/null
@@ -0,0 +1,128 @@
+/*
+ * Copyright (C) 2015, Matthias Sohn <matthias.sohn@sap.com>
+ * and other copyright owners as documented in the project's IP log.
+ *
+ * This program and the accompanying materials are made available
+ * under the terms of the Eclipse Distribution License v1.0 which
+ * accompanies this distribution, is reproduced below, and is
+ * available at http://www.eclipse.org/org/documents/edl-v10.php
+ *
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or
+ * without modification, are permitted provided that the following
+ * conditions are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ *
+ * - Redistributions in binary form must reproduce the above
+ *   copyright notice, this list of conditions and the following
+ *   disclaimer in the documentation and/or other materials provided
+ *   with the distribution.
+ *
+ * - Neither the name of the Eclipse Foundation, Inc. nor the
+ *   names of its contributors may be used to endorse or promote
+ *   products derived from this software without specific prior
+ *   written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package org.eclipse.jgit.lfs.internal;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.nio.file.Path;
+import java.security.DigestOutputStream;
+import java.text.MessageFormat;
+
+import org.eclipse.jgit.internal.storage.file.LockFile;
+import org.eclipse.jgit.lfs.errors.CorruptLongObjectException;
+import org.eclipse.jgit.lfs.lib.AnyLongObjectId;
+import org.eclipse.jgit.lfs.lib.Constants;
+import org.eclipse.jgit.lfs.lib.LongObjectId;
+
+/**
+ * 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
+ * id.
+ */
+public class AtomicObjectOutputStream extends OutputStream {
+
+       private LockFile locked;
+
+       private DigestOutputStream out;
+
+       private boolean aborted;
+
+       private AnyLongObjectId id;
+
+       /**
+        * @param path
+        * @param id
+        * @throws IOException
+        */
+       public AtomicObjectOutputStream(Path path, AnyLongObjectId id)
+                       throws IOException {
+               locked = new LockFile(path.toFile());
+               locked.lock();
+               this.id = id;
+               out = new DigestOutputStream(locked.getOutputStream(),
+                               Constants.newMessageDigest());
+       }
+
+       @Override
+       public void write(int b) throws IOException {
+               out.write(b);
+       }
+
+       @Override
+       public void write(byte[] b) throws IOException {
+               out.write(b);
+       }
+
+       @Override
+       public void write(byte[] b, int off, int len) throws IOException {
+               out.write(b, off, len);
+       }
+
+       @Override
+       public void close() throws IOException {
+               out.close();
+               if (!aborted) {
+                       verifyHash();
+                       locked.commit();
+               }
+       }
+
+       private void verifyHash() {
+               AnyLongObjectId contentHash = LongObjectId
+                               .fromRaw(out.getMessageDigest().digest());
+               if (!contentHash.equals(id)) {
+                       abort();
+                       throw new CorruptLongObjectException(id, contentHash,
+                                       MessageFormat.format(LfsText.get().corruptLongObject,
+                                                       contentHash, id));
+               }
+       }
+
+       /**
+        * Aborts the stream. Temporary file will be deleted
+        */
+       public void abort() {
+               locked.unlock();
+               aborted = true;
+       }
+}
\ No newline at end of file
index 0aad5c9dacf8afdf84aa55524a9020bdcc931fd2..c76df39354b38d7f3261c4cf4beca229c12e9c1b 100644 (file)
@@ -58,6 +58,7 @@ public class LfsText extends TranslationBundle {
        }
 
        // @formatter:off
+       /***/ public String corruptLongObject;
        /***/ public String inconsistentMediafileLength;
        /***/ public String incorrectLONG_OBJECT_ID_LENGTH;
        /***/ public String invalidLongId;
index 829edd56c4ea1472fc04857993fa0b7cb0b6c91e..a1304da2971c6967d92f82fb0965bd37fb6c3fc6 100644 (file)
@@ -69,7 +69,7 @@ Export-Package: org.eclipse.jgit.annotations;version="4.6.0",
    org.eclipse.jgit.junit,
    org.eclipse.jgit.junit.http,
    org.eclipse.jgit.http.server,
-   org.eclipse.jgit.lfs.server,
+   org.eclipse.jgit.lfs,
    org.eclipse.jgit.pgm,
    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",