]> source.dussan.org Git - jgit.git/commitdiff
Break the dependency on RevObject when creating a newObjectToPack(). 38/7938/10
authorColby Ranger <cranger@google.com>
Mon, 27 Aug 2012 23:08:42 +0000 (16:08 -0700)
committerColby Ranger <cranger@google.com>
Mon, 4 Mar 2013 22:43:22 +0000 (14:43 -0800)
Update the ObjectReuseAsIs API to support creating new
ObjectToPack with only the AnyObjectId and Git object type. This is
needed to support the future pack index bitmaps, which only contain
this information and do not want the overhead of creating a temporary
object for every ObjectId.

Change-Id: I906360b471412688bf429ecef74fd988f47875dc

org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/debug/ShowPackDelta.java
org.eclipse.jgit/src/org/eclipse/jgit/storage/dfs/DfsObjectToPack.java
org.eclipse.jgit/src/org/eclipse/jgit/storage/dfs/DfsReader.java
org.eclipse.jgit/src/org/eclipse/jgit/storage/file/LocalObjectToPack.java
org.eclipse.jgit/src/org/eclipse/jgit/storage/file/WindowCursor.java
org.eclipse.jgit/src/org/eclipse/jgit/storage/pack/ObjectReuseAsIs.java
org.eclipse.jgit/src/org/eclipse/jgit/storage/pack/ObjectToPack.java
org.eclipse.jgit/src/org/eclipse/jgit/storage/pack/PackWriter.java

index 338929a1bac0985ad8b02724acccaac3a9814796..837ca2cb1ff022cee4163ac9ca10c5ae52d1c332 100644 (file)
@@ -94,7 +94,7 @@ class ShowPackDelta extends TextBuiltin {
                        throws IOException, MissingObjectException,
                        StoredObjectRepresentationNotAvailableException {
                ObjectReuseAsIs asis = (ObjectReuseAsIs) reader;
-               ObjectToPack target = asis.newObjectToPack(obj);
+               ObjectToPack target = asis.newObjectToPack(obj, obj.getType());
 
                PackWriter pw = new PackWriter(reader) {
                        @Override
index c5243d99456f85109e218ee789c4776e98df082e..7efa96668e24222f3c43ac384f5eec19faf88436 100644 (file)
@@ -43,7 +43,7 @@
 
 package org.eclipse.jgit.storage.dfs;
 
-import org.eclipse.jgit.revwalk.RevObject;
+import org.eclipse.jgit.lib.AnyObjectId;
 import org.eclipse.jgit.storage.pack.ObjectToPack;
 import org.eclipse.jgit.storage.pack.StoredObjectRepresentation;
 
@@ -61,8 +61,8 @@ class DfsObjectToPack extends ObjectToPack {
        /** Length of the data section of the object. */
        long length;
 
-       DfsObjectToPack(RevObject obj) {
-               super(obj);
+       DfsObjectToPack(AnyObjectId src, final int type) {
+               super(src, type);
        }
 
        @Override
index 393fa3fce2d3b9e28aa4aaa643e130909ebde3ff..e22e13eaf947f3873c7ee855c1b34d7849b7164a 100644 (file)
@@ -83,7 +83,6 @@ import org.eclipse.jgit.lib.ObjectReader;
 import org.eclipse.jgit.lib.ProgressMonitor;
 import org.eclipse.jgit.revwalk.ObjectWalk;
 import org.eclipse.jgit.revwalk.RevCommit;
-import org.eclipse.jgit.revwalk.RevObject;
 import org.eclipse.jgit.revwalk.RevWalk;
 import org.eclipse.jgit.storage.pack.CachedPack;
 import org.eclipse.jgit.storage.pack.ObjectReuseAsIs;
@@ -433,8 +432,8 @@ public final class DfsReader extends ObjectReader implements ObjectReuseAsIs {
                throw new MissingObjectException(objectId.copy(), typeHint);
        }
 
-       public DfsObjectToPack newObjectToPack(RevObject obj) {
-               return new DfsObjectToPack(obj);
+       public DfsObjectToPack newObjectToPack(AnyObjectId objectId, int type) {
+               return new DfsObjectToPack(objectId, type);
        }
 
        private static final Comparator<DfsObjectRepresentation> REPRESENTATION_SORT = new Comparator<DfsObjectRepresentation>() {
index c7ef2c91332461d51e72c5a2c0f8b7e5a900fa69..c7d822c97625ffdda2158f858857bc7c7d9e302f 100644 (file)
@@ -43,7 +43,7 @@
 
 package org.eclipse.jgit.storage.file;
 
-import org.eclipse.jgit.revwalk.RevObject;
+import org.eclipse.jgit.lib.AnyObjectId;
 import org.eclipse.jgit.storage.pack.ObjectToPack;
 import org.eclipse.jgit.storage.pack.StoredObjectRepresentation;
 
@@ -58,8 +58,8 @@ class LocalObjectToPack extends ObjectToPack {
        /** Length of the data section of the object. */
        long length;
 
-       LocalObjectToPack(RevObject obj) {
-               super(obj);
+       LocalObjectToPack(AnyObjectId src, final int type) {
+               super(src, type);
        }
 
        @Override
index 5555a3c40480283cd171cfb3707e80463f304b30..350f981b251ea8f14255d2c3e090caa2f0dd28d8 100644 (file)
@@ -68,7 +68,6 @@ import org.eclipse.jgit.lib.ObjectId;
 import org.eclipse.jgit.lib.ObjectLoader;
 import org.eclipse.jgit.lib.ObjectReader;
 import org.eclipse.jgit.lib.ProgressMonitor;
-import org.eclipse.jgit.revwalk.RevObject;
 import org.eclipse.jgit.storage.pack.CachedPack;
 import org.eclipse.jgit.storage.pack.ObjectReuseAsIs;
 import org.eclipse.jgit.storage.pack.ObjectToPack;
@@ -148,8 +147,8 @@ final class WindowCursor extends ObjectReader implements ObjectReuseAsIs {
                return sz;
        }
 
-       public LocalObjectToPack newObjectToPack(RevObject obj) {
-               return new LocalObjectToPack(obj);
+       public LocalObjectToPack newObjectToPack(AnyObjectId objectId, int type) {
+               return new LocalObjectToPack(objectId, type);
        }
 
        public void selectObjectRepresentation(PackWriter packer,
index 795b004e82f83f9b1521ac5cd1d9602a54d72b1f..ed0294ed301dffcf4fe1526780412ec3d040dc7f 100644 (file)
@@ -49,9 +49,9 @@ import java.util.List;
 
 import org.eclipse.jgit.errors.MissingObjectException;
 import org.eclipse.jgit.errors.StoredObjectRepresentationNotAvailableException;
+import org.eclipse.jgit.lib.AnyObjectId;
 import org.eclipse.jgit.lib.ObjectReader;
 import org.eclipse.jgit.lib.ProgressMonitor;
-import org.eclipse.jgit.revwalk.RevObject;
 
 /**
  * Extension of {@link ObjectReader} that supports reusing objects in packs.
@@ -71,13 +71,13 @@ public interface ObjectReuseAsIs {
         * object state, such as to remember what file and offset contains the
         * object's pack encoded data.
         *
-        * @param obj
-        *            identity of the object that will be packed. The object's
-        *            parsed status is undefined here. Implementers must not rely on
-        *            the object being parsed.
+        * @param objectId
+        *            the id of the object that will be packed.
+        * @param type
+        *            the Git type of the object that will be packed.
         * @return a new instance for this object.
         */
-       public ObjectToPack newObjectToPack(RevObject obj);
+       public ObjectToPack newObjectToPack(AnyObjectId objectId, int type);
 
        /**
         * Select the best object representation for a packer.
index 1b8a9bf600994058f9364ce5819f1dfa95e23833..b42d4a5e4e1eb8b8ffa87660c999b9d43859a320 100644 (file)
@@ -47,7 +47,6 @@ package org.eclipse.jgit.storage.pack;
 import org.eclipse.jgit.lib.AnyObjectId;
 import org.eclipse.jgit.lib.Constants;
 import org.eclipse.jgit.lib.ObjectId;
-import org.eclipse.jgit.revwalk.RevObject;
 import org.eclipse.jgit.transport.PackedObjectInfo;
 
 /**
@@ -120,18 +119,6 @@ public class ObjectToPack extends PackedObjectInfo {
                flags = type << TYPE_SHIFT;
        }
 
-       /**
-        * Construct for the specified object.
-        *
-        * @param obj
-        *            identity of the object that will be packed. The object's
-        *            parsed status is undefined here. Implementers must not rely on
-        *            the object being parsed.
-        */
-       public ObjectToPack(RevObject obj) {
-               this(obj, obj.getType());
-       }
-
        /**
         * @return delta base object id if object is going to be packed in delta
         *         representation; null otherwise - if going to be packed as a
index 1cf17812892c5911115f9e0a82ce411184a4fc09..77ebaf618b06361d44b2bd43874a1561408b9fcd 100644 (file)
@@ -1826,13 +1826,18 @@ public class PackWriter {
        }
 
        private void addObject(final RevObject object, final int pathHashCode) {
+               addObject(object, object.getType(), pathHashCode);
+       }
+
+       private void addObject(
+                       final AnyObjectId src, final int type, final int pathHashCode) {
                final ObjectToPack otp;
                if (reuseSupport != null)
-                       otp = reuseSupport.newObjectToPack(object);
+                       otp = reuseSupport.newObjectToPack(src, type);
                else
-                       otp = new ObjectToPack(object);
+                       otp = new ObjectToPack(src, type);
                otp.setPathHash(pathHashCode);
-               objectsLists[object.getType()].add(otp);
+               objectsLists[type].add(otp);
                objectsMap.add(otp);
        }