Merge "Break the dependency on RevObject when creating a newObjectToPack()."

This commit is contained in:
Shawn Pearce 2013-03-04 20:12:35 -05:00 committed by Gerrit Code Review @ Eclipse.org
commit 234b4e0432
8 changed files with 25 additions and 35 deletions

View File

@ -94,7 +94,7 @@ private static byte[] getDelta(ObjectReader reader, RevObject obj)
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

View 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

View File

@ -83,7 +83,6 @@
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 long getObjectSize(AnyObjectId objectId, int typeHint)
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>() {

View 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

View File

@ -68,7 +68,6 @@
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 @@ public long getObjectSize(AnyObjectId objectId, int typeHint)
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,

View File

@ -49,9 +49,9 @@
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.

View File

@ -47,7 +47,6 @@
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 ObjectToPack(AnyObjectId src, final int type) {
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

View File

@ -1826,13 +1826,18 @@ public void addObject(final RevObject object)
}
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);
}