diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/storage/pack/ObjectToPack.java b/org.eclipse.jgit/src/org/eclipse/jgit/storage/pack/ObjectToPack.java
index 773ce44fd..cad3aaeec 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/storage/pack/ObjectToPack.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/storage/pack/ObjectToPack.java
@@ -83,6 +83,9 @@ public class ObjectToPack extends PackedObjectInfo {
*/
private int flags;
+ /** Hash of the object's tree path. */
+ private int pathHash;
+
/**
* Construct for the specified object id.
*
@@ -222,6 +225,14 @@ public class ObjectToPack extends PackedObjectInfo {
setCRC(weight);
}
+ int getPathHash() {
+ return pathHash;
+ }
+
+ void setPathHash(int hc) {
+ pathHash = hc;
+ }
+
/**
* Remember a specific representation for reuse at a later time.
*
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/storage/pack/PackWriter.java b/org.eclipse.jgit/src/org/eclipse/jgit/storage/pack/PackWriter.java
index 2fecc6875..5ecef832a 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/storage/pack/PackWriter.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/storage/pack/PackWriter.java
@@ -181,7 +181,7 @@ public class PackWriter {
private final ObjectIdSubclassMap objectsMap = new ObjectIdSubclassMap();
// edge objects for thin packs
- private final ObjectIdSubclassMap edgeObjects = new ObjectIdSubclassMap();
+ private final ObjectIdSubclassMap edgeObjects = new ObjectIdSubclassMap();
private int compressionLevel;
@@ -813,11 +813,11 @@ public class PackWriter {
RevObject o;
while ((o = walker.next()) != null) {
- addObject(o);
+ addObject(o, 0);
countingMonitor.update(1);
}
while ((o = walker.nextObject()) != null) {
- addObject(o);
+ addObject(o, walker.getPathHashCode());
countingMonitor.update(1);
}
countingMonitor.endTask();
@@ -837,9 +837,21 @@ public class PackWriter {
*/
public void addObject(final RevObject object)
throws IncorrectObjectTypeException {
+ addObject(object, 0);
+ }
+
+ private void addObject(final RevObject object, final int pathHashCode)
+ throws IncorrectObjectTypeException {
if (object.has(RevFlag.UNINTERESTING)) {
- edgeObjects.add(object);
- thin = true;
+ switch (object.getType()) {
+ case Constants.OBJ_TREE:
+ case Constants.OBJ_BLOB:
+ ObjectToPack otp = new ObjectToPack(object);
+ otp.setPathHash(pathHashCode);
+ edgeObjects.add(otp);
+ thin = true;
+ break;
+ }
return;
}
@@ -848,6 +860,8 @@ public class PackWriter {
otp = reuseSupport.newObjectToPack(object);
else
otp = new ObjectToPack(object);
+ otp.setPathHash(pathHashCode);
+
try {
objectsLists[object.getType()].add(otp);
} catch (ArrayIndexOutOfBoundsException x) {