]> source.dussan.org Git - jgit.git/commitdiff
PackIndex: Make it an interface 74/1194474/3
authorIvan Frade <ifrade@google.com>
Thu, 28 Mar 2024 22:11:05 +0000 (15:11 -0700)
committerIvan Frade <ifrade@google.com>
Wed, 8 May 2024 20:25:35 +0000 (13:25 -0700)
As we work on different backends for PackIndex, it is much easier to
extend an interface than an abstract class.

Note that PackIndex is alredy acting as an interface, offering barely
any functionality.

Change-Id: Icd0db0e96a097631c2b9c3b05e5700f601f606d5

org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/PackIndex.java
org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/PackIndexV1.java
org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/PackIndexV2.java

index a23bc4f0a53395467b57036a7718100568e84a7a..c0540d5a4c14a162859e399455749b1b99d2d61b 100644 (file)
@@ -42,8 +42,8 @@ import org.eclipse.jgit.util.io.SilentFileInputStream;
  * by ObjectId.
  * </p>
  */
-public abstract class PackIndex
-               implements Iterable<PackIndex.MutableEntry>, ObjectIdSet {
+public interface PackIndex
+               extends Iterable<PackIndex.MutableEntry>, ObjectIdSet {
        /**
         * Open an existing pack <code>.idx</code> file for reading.
         * <p>
@@ -61,7 +61,7 @@ public abstract class PackIndex
         *             the file exists but could not be read due to security errors,
         *             unrecognized data version, or unexpected data corruption.
         */
-       public static PackIndex open(File idxFile) throws IOException {
+       static PackIndex open(File idxFile) throws IOException {
                try (SilentFileInputStream fd = new SilentFileInputStream(
                                idxFile)) {
                        return read(fd);
@@ -92,7 +92,7 @@ public abstract class PackIndex
         * @throws org.eclipse.jgit.errors.CorruptObjectException
         *             the stream does not contain a valid pack index.
         */
-       public static PackIndex read(InputStream fd) throws IOException,
+       static PackIndex read(InputStream fd) throws IOException,
                        CorruptObjectException {
                final byte[] hdr = new byte[8];
                IO.readFully(fd, hdr, 0, hdr.length);
@@ -123,12 +123,12 @@ public abstract class PackIndex
         *            the object to look for. Must not be null.
         * @return true if the object is listed in this index; false otherwise.
         */
-       public boolean hasObject(AnyObjectId id) {
+       default boolean hasObject(AnyObjectId id) {
                return findOffset(id) != -1;
        }
 
        @Override
-       public boolean contains(AnyObjectId id) {
+       default boolean contains(AnyObjectId id) {
                return findOffset(id) != -1;
        }
 
@@ -144,7 +144,7 @@ public abstract class PackIndex
         * </p>
         */
        @Override
-       public abstract Iterator<MutableEntry> iterator();
+       Iterator<MutableEntry> iterator();
 
        /**
         * Obtain the total number of objects described by this index.
@@ -152,7 +152,7 @@ public abstract class PackIndex
         * @return number of objects in this index, and likewise in the associated
         *         pack that this index was generated from.
         */
-       public abstract long getObjectCount();
+       long getObjectCount();
 
        /**
         * Obtain the total number of objects needing 64 bit offsets.
@@ -160,7 +160,7 @@ public abstract class PackIndex
         * @return number of objects in this index using a 64 bit offset; that is an
         *         object positioned after the 2 GB position within the file.
         */
-       public abstract long getOffset64Count();
+       long getOffset64Count();
 
        /**
         * Get ObjectId for the n-th object entry returned by {@link #iterator()}.
@@ -182,7 +182,7 @@ public abstract class PackIndex
         *            is 0, the second is 1, etc.
         * @return the ObjectId for the corresponding entry.
         */
-       public abstract ObjectId getObjectId(long nthPosition);
+       ObjectId getObjectId(long nthPosition);
 
        /**
         * Get ObjectId for the n-th object entry returned by {@link #iterator()}.
@@ -206,7 +206,7 @@ public abstract class PackIndex
         *            negative, but still valid.
         * @return the ObjectId for the corresponding entry.
         */
-       public final ObjectId getObjectId(int nthPosition) {
+       default ObjectId getObjectId(int nthPosition) {
                if (nthPosition >= 0)
                        return getObjectId((long) nthPosition);
                final int u31 = nthPosition >>> 1;
@@ -225,7 +225,7 @@ public abstract class PackIndex
         *            etc. Positions past 2**31-1 are negative, but still valid.
         * @return the offset in a pack for the corresponding entry.
         */
-       protected abstract long getOffset(long nthPosition);
+       long getOffset(long nthPosition);
 
        /**
         * Locate the file offset position for the requested object.
@@ -236,7 +236,7 @@ public abstract class PackIndex
         *         object does not exist in this index and is thus not stored in the
         *         associated pack.
         */
-       public abstract long findOffset(AnyObjectId objId);
+       long findOffset(AnyObjectId objId);
 
        /**
         * Locate the position of this id in the list of object-ids in the index
@@ -247,7 +247,7 @@ public abstract class PackIndex
         *         of ids stored in this index; -1 if the object does not exist in
         *         this index and is thus not stored in the associated pack.
         */
-       public abstract int findPosition(AnyObjectId objId);
+       int findPosition(AnyObjectId objId);
 
        /**
         * Retrieve stored CRC32 checksum of the requested object raw-data
@@ -261,7 +261,7 @@ public abstract class PackIndex
         * @throws java.lang.UnsupportedOperationException
         *             when this index doesn't support CRC32 checksum
         */
-       public abstract long findCRC32(AnyObjectId objId)
+       long findCRC32(AnyObjectId objId)
                        throws MissingObjectException, UnsupportedOperationException;
 
        /**
@@ -269,7 +269,7 @@ public abstract class PackIndex
         *
         * @return true if CRC32 is stored, false otherwise
         */
-       public abstract boolean hasCRC32Support();
+       boolean hasCRC32Support();
 
        /**
         * Find objects matching the prefix abbreviation.
@@ -285,7 +285,7 @@ public abstract class PackIndex
         * @throws java.io.IOException
         *             the index cannot be read.
         */
-       public abstract void resolve(Set<ObjectId> matches, AbbreviatedObjectId id,
+       void resolve(Set<ObjectId> matches, AbbreviatedObjectId id,
                        int matchLimit) throws IOException;
 
        /**
@@ -294,14 +294,14 @@ public abstract class PackIndex
         * @return the checksum of the pack; caller must not modify it
         * @since 5.5
         */
-       public abstract byte[] getChecksum();
+       byte[] getChecksum();
 
        /**
         * Represent mutable entry of pack index consisting of object id and offset
         * in pack (both mutable).
         *
         */
-       public static class MutableEntry {
+       class MutableEntry {
                final MutableObjectId idBuffer = new MutableObjectId();
 
                long offset;
@@ -353,7 +353,10 @@ public abstract class PackIndex
                }
        }
 
-       static abstract class EntriesIterator implements Iterator<MutableEntry> {
+       /**
+        * Base implementation of the iterator over index entries.
+        */
+       abstract class EntriesIterator implements Iterator<MutableEntry> {
                protected final MutableEntry entry = initEntry();
 
                private final long objectCount;
index 3496a2a20c5347285a9baf4bc2ec0d238a48792a..d7c83785d802a1c7fe05acd4421d17b95bb9d5cb 100644 (file)
@@ -29,7 +29,7 @@ import org.eclipse.jgit.lib.ObjectId;
 import org.eclipse.jgit.util.IO;
 import org.eclipse.jgit.util.NB;
 
-class PackIndexV1 extends PackIndex {
+class PackIndexV1 implements PackIndex {
        private static final int IDX_HDR_LEN = 256 * 4;
 
        private static final int RECORD_SIZE = 4 + Constants.OBJECT_ID_LENGTH;
@@ -121,7 +121,7 @@ class PackIndexV1 extends PackIndex {
        }
 
        @Override
-       protected long getOffset(long nthPosition) {
+       public long getOffset(long nthPosition) {
                final int levelOne = findLevelOne(nthPosition);
                final int levelTwo = getLevelTwo(nthPosition, levelOne);
                final int p = (4 + Constants.OBJECT_ID_LENGTH) * levelTwo;
index 12dfeb669527d8c5c105c4208e6af9e12b979bb9..caf8b711806f989f89d484f879a6534dc55b2dd5 100644 (file)
@@ -28,7 +28,7 @@ import org.eclipse.jgit.util.IO;
 import org.eclipse.jgit.util.NB;
 
 /** Support for the pack index v2 format. */
-class PackIndexV2 extends PackIndex {
+class PackIndexV2 implements PackIndex {
        private static final long IS_O64 = 1L << 31;
 
        private static final int FANOUT = 256;