{"thread":{"id":"13767","subject":"[JGIT PATCH 01/12] Format PackFile class","startedAt":"2008-06-02T21:24:31Z","lastAt":"2008-06-10T21:09:51Z","messageCount":24,"participants":["Marek Zawirski","Johannes Schindelin","Robin Rosenberg","Shawn O. Pearce"],"isPatch":true,"patchVersion":1,"patchTotal":12},"messages":[{"id":"78407","messageId":"1212441883-12990-1-git-send-email-marek.zawirski@gmail.com","threadId":"13767","inReplyTo":null,"subject":"[JGIT PATCH 00/12] Extensions in core needed by PackWriter","fromName":"Marek Zawirski","fromEmail":"marek.zawirski@gmail.com","sentAt":"2008-06-02T21:24:31Z","receivedAt":"2008-06-02T21:24:31Z","isPatch":true,"sender":{"key":"marek.zawirski@gmail.com","avatar":null},"body":"Hello,\n\nHere is my first GSoC series - some work from the last week.\nIt's actually not a PackWriter, but some changes in existing jgit core\nrelated to PackWriting. Some of these added methods/refactors are not yet\nused within this series, but are used in my dirty branch in PackWriter\nwhich is under-development, even somewhat usable.\n\nSeries start with formatting stuff, as some old files were not\nappropriatelly formatted.\n\nThis series is also available at my corechanges branch:\nhttp://repo.or.cz/w/egit/zawir.git?a=shortlog;h=refs/heads/corechanges\nIt's based on Shawn's bsd branch, with new BSD-style license, but I can\nrebase if really needed.\n\nIf you want to track some PackWriter (itself) development you may want to\nhave a look at my dirty branch:\nhttp://repo.or.cz/w/egit/zawir.git?a=shortlog;h=refs/heads/dirty\n\nThat's all. Although Shawn already reviewed some old version of this patches,\nI'm still interested in your comments.\n\nMarek Zawirski (12):\n  Format PackFile class\n  Format PackIndex class\n  Format PackIndexV1 class\n  Add getType() method to RevObject hierarchy\n  Replace instanceof in WalkFetchConnection with getType()\n  Move PackFile.SIGNATURE to Constants.PACK_SIGNATURE\n  Add overload of fromRaw() in MutableObjectId accepting int[]\n  Copying constructor of MutableObjectId\n  Add getSize() method to ObjectIdSubclassMap\n  Add getObjectCount() method to PackFile\n  Entries iterator in PackIndex and indirectly PackFile\n  Add PackIndex specific tests, currently only iterators tests\n\n .../tst/org/spearce/jgit/lib/PackIndexTest.java    |  152 ++++++++++++++++++++\n .../tst/org/spearce/jgit/lib/PackIndexV1Test.java  |   54 +++++++\n .../tst/org/spearce/jgit/lib/PackIndexV2Test.java  |   54 +++++++\n ...-34be9032ac282b11fa9babdc2b2a93ca996c9c2f.idxV2 |  Bin 0 -> 1296 bytes\n ...-df2982f284bbabb6bdb59ee3fcc6eb0983e20371.idxV2 |  Bin 0 -> 2976 bytes\n .../src/org/spearce/jgit/lib/Constants.java        |    8 +\n .../src/org/spearce/jgit/lib/MutableObjectId.java  |   50 +++++++\n .../org/spearce/jgit/lib/ObjectIdSubclassMap.java  |    9 ++\n .../src/org/spearce/jgit/lib/PackFile.java         |   55 +++++--\n .../src/org/spearce/jgit/lib/PackIndex.java        |   86 +++++++++++-\n .../src/org/spearce/jgit/lib/PackIndexV1.java      |   45 +++++-\n .../src/org/spearce/jgit/lib/PackIndexV2.java      |   36 +++++\n .../src/org/spearce/jgit/revwalk/RevBlob.java      |    6 +\n .../src/org/spearce/jgit/revwalk/RevCommit.java    |    5 +\n .../src/org/spearce/jgit/revwalk/RevObject.java    |    8 +\n .../src/org/spearce/jgit/revwalk/RevTag.java       |    5 +\n .../src/org/spearce/jgit/revwalk/RevTree.java      |    6 +\n .../src/org/spearce/jgit/transport/IndexPack.java  |    8 +-\n .../jgit/transport/WalkFetchConnection.java        |   36 +++--\n 19 files changed, 576 insertions(+), 47 deletions(-)\n create mode 100644 org.spearce.jgit.test/tst/org/spearce/jgit/lib/PackIndexTest.java\n create mode 100644 org.spearce.jgit.test/tst/org/spearce/jgit/lib/PackIndexV1Test.java\n create mode 100644 org.spearce.jgit.test/tst/org/spearce/jgit/lib/PackIndexV2Test.java\n create mode 100644 org.spearce.jgit.test/tst/pack-34be9032ac282b11fa9babdc2b2a93ca996c9c2f.idxV2\n create mode 100644 org.spearce.jgit.test/tst/pack-df2982f284bbabb6bdb59ee3fcc6eb0983e20371.idxV2\n"},{"id":"78405","messageId":"1212441883-12990-2-git-send-email-marek.zawirski@gmail.com","threadId":"13767","inReplyTo":"1212441883-12990-1-git-send-email-marek.zawirski@gmail.com","subject":"[JGIT PATCH 01/12] Format PackFile class","fromName":"Marek Zawirski","fromEmail":"marek.zawirski@gmail.com","sentAt":"2008-06-02T21:24:32Z","receivedAt":"2008-06-02T21:24:32Z","isPatch":true,"sender":{"key":"marek.zawirski@gmail.com","avatar":null},"body":"Signed-off-by: Marek Zawirski <marek.zawirski@gmail.com>\n---\n .../src/org/spearce/jgit/lib/PackFile.java         |   14 ++++++--------\n 1 files changed, 6 insertions(+), 8 deletions(-)\n\ndiff --git a/org.spearce.jgit/src/org/spearce/jgit/lib/PackFile.java b/org.spearce.jgit/src/org/spearce/jgit/lib/PackFile.java\nindex 23a175c..ccff47d 100644\n--- a/org.spearce.jgit/src/org/spearce/jgit/lib/PackFile.java\n+++ b/org.spearce.jgit/src/org/spearce/jgit/lib/PackFile.java\n@@ -45,9 +45,9 @@ import java.util.zip.DataFormatException;\n import org.spearce.jgit.util.NB;\n \n /**\n- * A Git version 2 pack file representation. A pack file contains\n- * Git objects in delta packed format yielding high compression of\n- * lots of object where some objects are similar.\n+ * A Git version 2 pack file representation. A pack file contains Git objects in\n+ * delta packed format yielding high compression of lots of object where some\n+ * objects are similar.\n  */\n public class PackFile {\n \tprivate static final byte[] SIGNATURE = { 'P', 'A', 'C', 'K' };\n@@ -58,7 +58,7 @@ public class PackFile {\n \n \t/**\n \t * Construct a reader for an existing, pre-indexed packfile.\n-\t *\n+\t * \n \t * @param parentRepo\n \t *            Git repository holding this pack file\n \t * @param idxFile\n@@ -188,13 +188,11 @@ public class PackFile {\n \t\tif (idx.getObjectCount() != objectCnt)\n \t\t\tthrow new IOException(\"Pack index\"\n \t\t\t\t\t+ \" object count mismatch; expected \" + objectCnt\n-\t\t\t\t\t+ \" found \" + idx.getObjectCount() + \": \"\n-\t\t\t\t\t+ pack.getName());\n+\t\t\t\t\t+ \" found \" + idx.getObjectCount() + \": \" + pack.getName());\n \t}\n \n \tprivate PackedObjectLoader reader(final WindowCursor curs,\n-\t\t\tfinal long objOffset)\n-\t\t\tthrows IOException {\n+\t\t\tfinal long objOffset) throws IOException {\n \t\tlong pos = objOffset;\n \t\tint p = 0;\n \t\tfinal byte[] ib = curs.tempId;\n-- \n1.5.5.1\n"},{"id":"78406","messageId":"1212441883-12990-3-git-send-email-marek.zawirski@gmail.com","threadId":"13767","inReplyTo":"1212441883-12990-2-git-send-email-marek.zawirski@gmail.com","subject":"[JGIT PATCH 02/12] Format PackIndex class","fromName":"Marek Zawirski","fromEmail":"marek.zawirski@gmail.com","sentAt":"2008-06-02T21:24:33Z","receivedAt":"2008-06-02T21:24:33Z","isPatch":true,"sender":{"key":"marek.zawirski@gmail.com","avatar":null},"body":"Signed-off-by: Marek Zawirski <marek.zawirski@gmail.com>\n---\n .../src/org/spearce/jgit/lib/PackIndex.java        |    6 +++---\n 1 files changed, 3 insertions(+), 3 deletions(-)\n\ndiff --git a/org.spearce.jgit/src/org/spearce/jgit/lib/PackIndex.java b/org.spearce.jgit/src/org/spearce/jgit/lib/PackIndex.java\nindex 5834ca6..104c361 100644\n--- a/org.spearce.jgit/src/org/spearce/jgit/lib/PackIndex.java\n+++ b/org.spearce.jgit/src/org/spearce/jgit/lib/PackIndex.java\n@@ -61,7 +61,7 @@ public abstract class PackIndex {\n \t * implementation for that format will be constructed and returned to the\n \t * caller. The file may or may not be held open by the returned instance.\n \t * </p>\n-\t *\n+\t * \n \t * @param idxFile\n \t *            existing pack .idx to read.\n \t * @return access implementation for the requested file.\n@@ -118,7 +118,7 @@ public abstract class PackIndex {\n \n \t/**\n \t * Obtain the total number of objects described by this index.\n-\t *\n+\t * \n \t * @return number of objects in this index, and likewise in the associated\n \t *         pack that this index was generated from.\n \t */\n@@ -126,7 +126,7 @@ public abstract class PackIndex {\n \n \t/**\n \t * Locate the file offset position for the requested object.\n-\t *\n+\t * \n \t * @param objId\n \t *            name of the object to locate within the pack.\n \t * @return offset of the object's header and compressed content; -1 if the\n-- \n1.5.5.1\n"},{"id":"78408","messageId":"1212441883-12990-4-git-send-email-marek.zawirski@gmail.com","threadId":"13767","inReplyTo":"1212441883-12990-3-git-send-email-marek.zawirski@gmail.com","subject":"[JGIT PATCH 03/12] Format PackIndexV1 class","fromName":"Marek Zawirski","fromEmail":"marek.zawirski@gmail.com","sentAt":"2008-06-02T21:24:34Z","receivedAt":"2008-06-02T21:24:34Z","isPatch":true,"sender":{"key":"marek.zawirski@gmail.com","avatar":null},"body":"Signed-off-by: Marek Zawirski <marek.zawirski@gmail.com>\n---\n .../src/org/spearce/jgit/lib/PackIndexV1.java      |   14 +++++++-------\n 1 files changed, 7 insertions(+), 7 deletions(-)\n\ndiff --git a/org.spearce.jgit/src/org/spearce/jgit/lib/PackIndexV1.java b/org.spearce.jgit/src/org/spearce/jgit/lib/PackIndexV1.java\nindex 84f13d2..cfd18da 100644\n--- a/org.spearce.jgit/src/org/spearce/jgit/lib/PackIndexV1.java\n+++ b/org.spearce.jgit/src/org/spearce/jgit/lib/PackIndexV1.java\n@@ -64,9 +64,9 @@ class PackIndexV1 extends PackIndex {\n \t\tfor (int k = 0; k < idxHeader.length; k++) {\n \t\t\tint n;\n \t\t\tif (k == 0) {\n-\t\t\t\tn = (int)(idxHeader[k]);\n+\t\t\t\tn = (int) (idxHeader[k]);\n \t\t\t} else {\n-\t\t\t\tn = (int)(idxHeader[k]-idxHeader[k-1]);\n+\t\t\t\tn = (int) (idxHeader[k] - idxHeader[k - 1]);\n \t\t\t}\n \t\t\tif (n > 0) {\n \t\t\t\tidxdata[k] = new byte[n * (Constants.OBJECT_ID_LENGTH + 4)];\n@@ -94,11 +94,11 @@ class PackIndexV1 extends PackIndex {\n \t\t\tif (cmp < 0)\n \t\t\t\thigh = mid;\n \t\t\telse if (cmp == 0) {\n-\t\t\t\tint b0 = data[pos-4] & 0xff;\n-\t\t\t\tint b1 = data[pos-3] & 0xff;\n-\t\t\t\tint b2 = data[pos-2] & 0xff;\n-\t\t\t\tint b3 = data[pos-1] & 0xff;\n-\t\t\t\treturn (((long)b0) << 24) | ( b1 << 16 ) | ( b2 << 8 ) | (b3);\n+\t\t\t\tint b0 = data[pos - 4] & 0xff;\n+\t\t\t\tint b1 = data[pos - 3] & 0xff;\n+\t\t\t\tint b2 = data[pos - 2] & 0xff;\n+\t\t\t\tint b3 = data[pos - 1] & 0xff;\n+\t\t\t\treturn (((long) b0) << 24) | (b1 << 16) | (b2 << 8) | (b3);\n \t\t\t} else\n \t\t\t\tlow = mid + 1;\n \t\t} while (low < high);\n-- \n1.5.5.1\n"},{"id":"78415","messageId":"1212441883-12990-5-git-send-email-marek.zawirski@gmail.com","threadId":"13767","inReplyTo":"1212441883-12990-4-git-send-email-marek.zawirski@gmail.com","subject":"[JGIT PATCH 04/12] Add getType() method to RevObject hierarchy","fromName":"Marek Zawirski","fromEmail":"marek.zawirski@gmail.com","sentAt":"2008-06-02T21:24:35Z","receivedAt":"2008-06-02T21:24:35Z","isPatch":true,"sender":{"key":"marek.zawirski@gmail.com","avatar":null},"body":"This let us avoid using instanceof.\n\nSigned-off-by: Marek Zawirski <marek.zawirski@gmail.com>\n---\n .../src/org/spearce/jgit/revwalk/RevBlob.java      |    6 ++++++\n .../src/org/spearce/jgit/revwalk/RevCommit.java    |    5 +++++\n .../src/org/spearce/jgit/revwalk/RevObject.java    |    8 ++++++++\n .../src/org/spearce/jgit/revwalk/RevTag.java       |    5 +++++\n .../src/org/spearce/jgit/revwalk/RevTree.java      |    6 ++++++\n 5 files changed, 30 insertions(+), 0 deletions(-)\n\ndiff --git a/org.spearce.jgit/src/org/spearce/jgit/revwalk/RevBlob.java b/org.spearce.jgit/src/org/spearce/jgit/revwalk/RevBlob.java\nindex f6d34f4..66cdc02 100644\n--- a/org.spearce.jgit/src/org/spearce/jgit/revwalk/RevBlob.java\n+++ b/org.spearce.jgit/src/org/spearce/jgit/revwalk/RevBlob.java\n@@ -38,6 +38,7 @@\n package org.spearce.jgit.revwalk;\n \n import org.spearce.jgit.lib.AnyObjectId;\n+import org.spearce.jgit.lib.Constants;\n \n /** A binary file, or a symbolic link. */\n public class RevBlob extends RevObject {\n@@ -55,4 +56,9 @@ public class RevBlob extends RevObject {\n \tvoid parse(final RevWalk walk) {\n \t\tflags |= PARSED;\n \t}\n+\t\n+\t@Override\n+\tpublic int getType() {\n+\t\treturn Constants.OBJ_BLOB;\n+\t}\n }\ndiff --git a/org.spearce.jgit/src/org/spearce/jgit/revwalk/RevCommit.java b/org.spearce.jgit/src/org/spearce/jgit/revwalk/RevCommit.java\nindex 0aa7098..77f1d1a 100644\n--- a/org.spearce.jgit/src/org/spearce/jgit/revwalk/RevCommit.java\n+++ b/org.spearce.jgit/src/org/spearce/jgit/revwalk/RevCommit.java\n@@ -135,6 +135,11 @@ public class RevCommit extends RevObject {\n \t\tbuffer = raw;\n \t\tflags |= PARSED;\n \t}\n+\t\n+\t@Override\n+\tpublic int getType() {\n+\t\treturn Constants.OBJ_COMMIT;\n+\t}\n \n \tstatic void carryFlags(RevCommit c, final int carry) {\n \t\tfor (;;) {\ndiff --git a/org.spearce.jgit/src/org/spearce/jgit/revwalk/RevObject.java b/org.spearce.jgit/src/org/spearce/jgit/revwalk/RevObject.java\nindex 86c50b5..451205c 100644\n--- a/org.spearce.jgit/src/org/spearce/jgit/revwalk/RevObject.java\n+++ b/org.spearce.jgit/src/org/spearce/jgit/revwalk/RevObject.java\n@@ -42,6 +42,7 @@ import java.io.IOException;\n import org.spearce.jgit.errors.IncorrectObjectTypeException;\n import org.spearce.jgit.errors.MissingObjectException;\n import org.spearce.jgit.lib.AnyObjectId;\n+import org.spearce.jgit.lib.Constants;\n import org.spearce.jgit.lib.ObjectId;\n \n /** Base object type accessed during revision walking. */\n@@ -56,6 +57,13 @@ public abstract class RevObject extends ObjectId {\n \n \tabstract void parse(RevWalk walk) throws MissingObjectException,\n \t\t\tIncorrectObjectTypeException, IOException;\n+\t\n+\t/**\n+\t * Get Git object type. See {@link Constants}.\n+\t * \n+\t * @return object type\n+\t */\n+\tpublic abstract int getType();\n \n \t/**\n \t * Get the name of this object.\ndiff --git a/org.spearce.jgit/src/org/spearce/jgit/revwalk/RevTag.java b/org.spearce.jgit/src/org/spearce/jgit/revwalk/RevTag.java\nindex 668819c..bbb18ee 100644\n--- a/org.spearce.jgit/src/org/spearce/jgit/revwalk/RevTag.java\n+++ b/org.spearce.jgit/src/org/spearce/jgit/revwalk/RevTag.java\n@@ -96,6 +96,11 @@ public class RevTag extends RevObject {\n \t\tflags |= PARSED;\n \t}\n \n+\t@Override\n+\tpublic int getType() {\n+\t\treturn Constants.OBJ_TAG;\n+\t}\n+\t\n \t/**\n \t * Parse this tag buffer for display.\n \t * \ndiff --git a/org.spearce.jgit/src/org/spearce/jgit/revwalk/RevTree.java b/org.spearce.jgit/src/org/spearce/jgit/revwalk/RevTree.java\nindex 7ad9be0..e1cd4b5 100644\n--- a/org.spearce.jgit/src/org/spearce/jgit/revwalk/RevTree.java\n+++ b/org.spearce.jgit/src/org/spearce/jgit/revwalk/RevTree.java\n@@ -38,6 +38,7 @@\n package org.spearce.jgit.revwalk;\n \n import org.spearce.jgit.lib.AnyObjectId;\n+import org.spearce.jgit.lib.Constants;\n \n /** A reference to a tree of subtrees/files. */\n public class RevTree extends RevObject {\n@@ -55,4 +56,9 @@ public class RevTree extends RevObject {\n \tvoid parse(final RevWalk walk) {\n \t\tflags |= PARSED;\n \t}\n+\t\n+\t@Override\n+\tpublic int getType() {\n+\t\treturn Constants.OBJ_TREE;\n+\t}\n }\n-- \n1.5.5.1\n"},{"id":"78412","messageId":"1212441883-12990-6-git-send-email-marek.zawirski@gmail.com","threadId":"13767","inReplyTo":"1212441883-12990-5-git-send-email-marek.zawirski@gmail.com","subject":"[JGIT PATCH 05/12] Replace instanceof in WalkFetchConnection with getType()","fromName":"Marek Zawirski","fromEmail":"marek.zawirski@gmail.com","sentAt":"2008-06-02T21:24:36Z","receivedAt":"2008-06-02T21:24:36Z","isPatch":true,"sender":{"key":"marek.zawirski@gmail.com","avatar":null},"body":"Signed-off-by: Marek Zawirski <marek.zawirski@gmail.com>\n---\n .../jgit/transport/WalkFetchConnection.java        |   36 +++++++++++--------\n 1 files changed, 21 insertions(+), 15 deletions(-)\n\ndiff --git a/org.spearce.jgit/src/org/spearce/jgit/transport/WalkFetchConnection.java b/org.spearce.jgit/src/org/spearce/jgit/transport/WalkFetchConnection.java\nindex 4edeb93..45c2ded 100644\n--- a/org.spearce.jgit/src/org/spearce/jgit/transport/WalkFetchConnection.java\n+++ b/org.spearce.jgit/src/org/spearce/jgit/transport/WalkFetchConnection.java\n@@ -66,7 +66,6 @@ import org.spearce.jgit.lib.Ref;\n import org.spearce.jgit.lib.Repository;\n import org.spearce.jgit.lib.UnpackedObjectLoader;\n import org.spearce.jgit.revwalk.DateRevQueue;\n-import org.spearce.jgit.revwalk.RevBlob;\n import org.spearce.jgit.revwalk.RevCommit;\n import org.spearce.jgit.revwalk.RevFlag;\n import org.spearce.jgit.revwalk.RevObject;\n@@ -251,20 +250,22 @@ class WalkFetchConnection extends FetchConnection {\n \t\t//\n \t\tobj.dispose();\n \n-\t\tif (obj instanceof RevBlob)\n-\t\t\tprocessBlob(obj);\n-\n-\t\telse if (obj instanceof RevTree)\n+\t\tswitch (obj.getType()) {\n+\t\tcase Constants.OBJ_BLOB:\n+\t\t\tprocessBlob(obj);\t\n+\t\t\tbreak;\n+\t\tcase Constants.OBJ_TREE:\n \t\t\tprocessTree(obj);\n-\n-\t\telse if (obj instanceof RevCommit)\n+\t\t\tbreak;\n+\t\tcase Constants.OBJ_COMMIT:\n \t\t\tprocessCommit(obj);\n-\n-\t\telse if (obj instanceof RevTag)\n+\t\t\tbreak;\n+\t\tcase Constants.OBJ_TAG:\n \t\t\tprocessTag(obj);\n-\n-\t\telse\n+\t\t\tbreak;\n+\t\tdefault:\n \t\t\tthrow new TransportException(\"Unknown object type \" + obj.getId());\n+\t\t}\n \n \t\t// If we had any prior errors fetching this object they are\n \t\t// now resolved, as the object was parsed successfully.\n@@ -632,19 +633,24 @@ class WalkFetchConnection extends FetchConnection {\n \t}\n \n \tprivate void markLocalObjComplete(RevObject obj) throws IOException {\n-\t\twhile (obj instanceof RevTag) {\n+\t\twhile (obj.getType() == Constants.OBJ_TAG) {\n \t\t\tobj.add(COMPLETE);\n \t\t\tobj.dispose();\n \t\t\tobj = ((RevTag) obj).getObject();\n \t\t\trevWalk.parse(obj);\n \t\t}\n \n-\t\tif (obj instanceof RevBlob)\n+\t\tswitch (obj.getType()) {\n+\t\tcase Constants.OBJ_BLOB:\n \t\t\tobj.add(COMPLETE);\n-\t\telse if (obj instanceof RevCommit)\n+\t\t\tbreak;\n+\t\tcase Constants.OBJ_COMMIT:\t\t\t\n \t\t\tpushLocalCommit((RevCommit) obj);\n-\t\telse if (obj instanceof RevTree)\n+\t\t\tbreak;\n+\t\tcase Constants.OBJ_TREE:\n \t\t\tmarkTreeComplete((RevTree) obj);\n+\t\t\tbreak;\n+\t\t}\n \t}\n \n \tprivate void markLocalCommitsComplete(final int until)\n-- \n1.5.5.1\n"},{"id":"78410","messageId":"1212441883-12990-7-git-send-email-marek.zawirski@gmail.com","threadId":"13767","inReplyTo":"1212441883-12990-6-git-send-email-marek.zawirski@gmail.com","subject":"[JGIT PATCH 06/12] Move PackFile.SIGNATURE to Constants.PACK_SIGNATURE","fromName":"Marek Zawirski","fromEmail":"marek.zawirski@gmail.com","sentAt":"2008-06-02T21:24:37Z","receivedAt":"2008-06-02T21:24:37Z","isPatch":true,"sender":{"key":"marek.zawirski@gmail.com","avatar":null},"body":"Move to avoid redundancy in reading and writing packfiles in 3 places.\nIt seems to be a better place for format-related constant.\n\nSigned-off-by: Marek Zawirski <marek.zawirski@gmail.com>\n---\n .../src/org/spearce/jgit/lib/Constants.java        |    8 ++++++++\n .../src/org/spearce/jgit/lib/PackFile.java         |   12 +++++-------\n .../src/org/spearce/jgit/transport/IndexPack.java  |    8 +++-----\n 3 files changed, 16 insertions(+), 12 deletions(-)\n\ndiff --git a/org.spearce.jgit/src/org/spearce/jgit/lib/Constants.java b/org.spearce.jgit/src/org/spearce/jgit/lib/Constants.java\nindex d1e8a41..7c2cef9 100644\n--- a/org.spearce.jgit/src/org/spearce/jgit/lib/Constants.java\n+++ b/org.spearce.jgit/src/org/spearce/jgit/lib/Constants.java\n@@ -188,6 +188,14 @@ public final class Constants {\n \t */\n \tpublic static final int OBJ_REF_DELTA = 7;\n \n+\t/**\n+\t * Pack file signature that occurs at file header - identifies file as Git\n+\t * packfile formatted.\n+\t * <p>\n+\t * <b>This constant is fixed and is defined by the Git packfile format.</b>\n+\t */\n+\tpublic static final byte[] PACK_SIGNATURE = { 'P', 'A', 'C', 'K' };\n+\t\n \t/** Native character encoding for commit messages, file names... */\n \tpublic static final String CHARACTER_ENCODING = \"UTF-8\";\n \ndiff --git a/org.spearce.jgit/src/org/spearce/jgit/lib/PackFile.java b/org.spearce.jgit/src/org/spearce/jgit/lib/PackFile.java\nindex ccff47d..b1fbc2a 100644\n--- a/org.spearce.jgit/src/org/spearce/jgit/lib/PackFile.java\n+++ b/org.spearce.jgit/src/org/spearce/jgit/lib/PackFile.java\n@@ -50,8 +50,6 @@ import org.spearce.jgit.util.NB;\n  * objects are similar.\n  */\n public class PackFile {\n-\tprivate static final byte[] SIGNATURE = { 'P', 'A', 'C', 'K' };\n-\n \tprivate final WindowedFile pack;\n \n \tprivate final PackIndex idx;\n@@ -165,17 +163,17 @@ public class PackFile {\n \tprivate void readPackHeader() throws IOException {\n \t\tfinal WindowCursor curs = new WindowCursor();\n \t\tlong position = 0;\n-\t\tfinal byte[] sig = new byte[SIGNATURE.length];\n+\t\tfinal byte[] sig = new byte[Constants.PACK_SIGNATURE.length];\n \t\tfinal byte[] intbuf = new byte[4];\n \t\tfinal long vers;\n \n-\t\tif (pack.read(position, sig, curs) != SIGNATURE.length)\n+\t\tif (pack.read(position, sig, curs) != Constants.PACK_SIGNATURE.length)\n \t\t\tthrow new IOException(\"Not a PACK file.\");\n-\t\tfor (int k = 0; k < SIGNATURE.length; k++) {\n-\t\t\tif (sig[k] != SIGNATURE[k])\n+\t\tfor (int k = 0; k < Constants.PACK_SIGNATURE.length; k++) {\n+\t\t\tif (sig[k] != Constants.PACK_SIGNATURE[k])\n \t\t\t\tthrow new IOException(\"Not a PACK file.\");\n \t\t}\n-\t\tposition += SIGNATURE.length;\n+\t\tposition += Constants.PACK_SIGNATURE.length;\n \n \t\tpack.readFully(position, intbuf, curs);\n \t\tvers = NB.decodeUInt32(intbuf, 0);\ndiff --git a/org.spearce.jgit/src/org/spearce/jgit/transport/IndexPack.java b/org.spearce.jgit/src/org/spearce/jgit/transport/IndexPack.java\nindex 0b5c962..bec211c 100644\n--- a/org.spearce.jgit/src/org/spearce/jgit/transport/IndexPack.java\n+++ b/org.spearce.jgit/src/org/spearce/jgit/transport/IndexPack.java\n@@ -74,8 +74,6 @@ public class IndexPack {\n \t/** Progress message when computing names of delta compressed objects. */\n \tpublic static final String PROGRESS_RESOLVE_DELTA = \"Resolving deltas\";\n \n-\tprivate static final byte[] SIGNATURE = { 'P', 'A', 'C', 'K' };\n-\n \tprivate static final int BUFFER_SIZE = 2048;\n \n \t/**\n@@ -477,10 +475,10 @@ public class IndexPack {\n \t}\n \n \tprivate void readPackHeader() throws IOException {\n-\t\tfinal int hdrln = SIGNATURE.length + 4 + 4;\n+\t\tfinal int hdrln = Constants.PACK_SIGNATURE.length + 4 + 4;\n \t\tfinal int p = fillFromInput(hdrln);\n-\t\tfor (int k = 0; k < SIGNATURE.length; k++)\n-\t\t\tif (buf[p + k] != SIGNATURE[k])\n+\t\tfor (int k = 0; k < Constants.PACK_SIGNATURE.length; k++)\n+\t\t\tif (buf[p + k] != Constants.PACK_SIGNATURE[k])\n \t\t\t\tthrow new IOException(\"Not a PACK file.\");\n \n \t\tfinal long vers = NB.decodeUInt32(buf, p + 4);\n-- \n1.5.5.1\n"},{"id":"78409","messageId":"1212441883-12990-8-git-send-email-marek.zawirski@gmail.com","threadId":"13767","inReplyTo":"1212441883-12990-7-git-send-email-marek.zawirski@gmail.com","subject":"[JGIT PATCH 07/12] Add overload of fromRaw() in MutableObjectId accepting int[]","fromName":"Marek Zawirski","fromEmail":"marek.zawirski@gmail.com","sentAt":"2008-06-02T21:24:38Z","receivedAt":"2008-06-02T21:24:38Z","isPatch":true,"sender":{"key":"marek.zawirski@gmail.com","avatar":null},"body":"Signed-off-by: Marek Zawirski <marek.zawirski@gmail.com>\n---\n .../src/org/spearce/jgit/lib/MutableObjectId.java  |   29 ++++++++++++++++++++\n 1 files changed, 29 insertions(+), 0 deletions(-)\n\ndiff --git a/org.spearce.jgit/src/org/spearce/jgit/lib/MutableObjectId.java b/org.spearce.jgit/src/org/spearce/jgit/lib/MutableObjectId.java\nindex b23d36c..954380b 100644\n--- a/org.spearce.jgit/src/org/spearce/jgit/lib/MutableObjectId.java\n+++ b/org.spearce.jgit/src/org/spearce/jgit/lib/MutableObjectId.java\n@@ -74,6 +74,35 @@ public class MutableObjectId extends AnyObjectId {\n \t}\n \n \t/**\n+\t * Convert an ObjectId from binary representation expressed in integers.\n+\t * \n+\t * @param ints\n+\t *            the raw int buffer to read from. At least 5 integers must be\n+\t *            available within this integers array.\n+\t */\n+\tpublic void fromRaw(final int[] ints) {\n+\t\tfromRaw(ints, 0);\n+\t}\n+\n+\t/**\n+\t * Convert an ObjectId from binary representation expressed in integers.\n+\t * \n+\t * @param ints\n+\t *            the raw int buffer to read from. At least 5 integers after p\n+\t *            must be available within this integers array.\n+\t * @param p\n+\t *            position to read the first integer of data from.\n+\t * \n+\t */\n+\tpublic void fromRaw(final int[] ints, final int p) {\n+\t\tw1 = ints[p];\n+\t\tw2 = ints[p + 1];\n+\t\tw3 = ints[p + 2];\n+\t\tw4 = ints[p + 3];\n+\t\tw5 = ints[p + 4];\n+\t}\n+\n+\t/**\n \t * Convert an ObjectId from hex characters (US-ASCII).\n \t * \n \t * @param buf\n-- \n1.5.5.1\n"},{"id":"78414","messageId":"1212441883-12990-9-git-send-email-marek.zawirski@gmail.com","threadId":"13767","inReplyTo":"1212441883-12990-8-git-send-email-marek.zawirski@gmail.com","subject":"[JGIT PATCH 08/12] Copying constructor of MutableObjectId","fromName":"Marek Zawirski","fromEmail":"marek.zawirski@gmail.com","sentAt":"2008-06-02T21:24:39Z","receivedAt":"2008-06-02T21:24:39Z","isPatch":true,"sender":{"key":"marek.zawirski@gmail.com","avatar":null},"body":"Signed-off-by: Marek Zawirski <marek.zawirski@gmail.com>\n---\n .../src/org/spearce/jgit/lib/MutableObjectId.java  |   21 ++++++++++++++++++++\n 1 files changed, 21 insertions(+), 0 deletions(-)\n\ndiff --git a/org.spearce.jgit/src/org/spearce/jgit/lib/MutableObjectId.java b/org.spearce.jgit/src/org/spearce/jgit/lib/MutableObjectId.java\nindex 954380b..f88d8cb 100644\n--- a/org.spearce.jgit/src/org/spearce/jgit/lib/MutableObjectId.java\n+++ b/org.spearce.jgit/src/org/spearce/jgit/lib/MutableObjectId.java\n@@ -46,6 +46,27 @@ import org.spearce.jgit.util.NB;\n  */\n public class MutableObjectId extends AnyObjectId {\n \t/**\n+\t * Empty constructor. Initialize object with default (zeros) value.\n+\t */\n+\tpublic MutableObjectId() {\n+\t\tsuper();\n+\t}\n+\n+\t/**\n+\t * Copying constructor.\n+\t * \n+\t * @param src\n+\t *            original entry, to copy id from\n+\t */\n+\tMutableObjectId(MutableObjectId src) {\n+\t\tthis.w1 = src.w1;\n+\t\tthis.w2 = src.w2;\n+\t\tthis.w3 = src.w3;\n+\t\tthis.w4 = src.w4;\n+\t\tthis.w5 = src.w5;\n+\t}\n+\n+\t/**\n \t * Convert an ObjectId from raw binary representation.\n \t * \n \t * @param bs\n-- \n1.5.5.1\n"},{"id":"78413","messageId":"1212441883-12990-10-git-send-email-marek.zawirski@gmail.com","threadId":"13767","inReplyTo":"1212441883-12990-9-git-send-email-marek.zawirski@gmail.com","subject":"[JGIT PATCH 09/12] Add getSize() method to ObjectIdSubclassMap","fromName":"Marek Zawirski","fromEmail":"marek.zawirski@gmail.com","sentAt":"2008-06-02T21:24:40Z","receivedAt":"2008-06-02T21:24:40Z","isPatch":true,"sender":{"key":"marek.zawirski@gmail.com","avatar":null},"body":"Method is based on already existing field.\n\nSigned-off-by: Marek Zawirski <marek.zawirski@gmail.com>\n---\n .../org/spearce/jgit/lib/ObjectIdSubclassMap.java  |    9 +++++++++\n 1 files changed, 9 insertions(+), 0 deletions(-)\n\ndiff --git a/org.spearce.jgit/src/org/spearce/jgit/lib/ObjectIdSubclassMap.java b/org.spearce.jgit/src/org/spearce/jgit/lib/ObjectIdSubclassMap.java\nindex 79ef5b6..76bc9d9 100644\n--- a/org.spearce.jgit/src/org/spearce/jgit/lib/ObjectIdSubclassMap.java\n+++ b/org.spearce.jgit/src/org/spearce/jgit/lib/ObjectIdSubclassMap.java\n@@ -107,6 +107,15 @@ public class ObjectIdSubclassMap<V extends ObjectId> {\n \t\tsize++;\n \t}\n \n+\t/**\n+\t * Returns number of objects in map.\n+\t * \n+\t * @return number of objects in map\n+\t */\n+\tpublic int size() {\n+\t\treturn size;\n+\t}\n+\n \tprivate final int index(final AnyObjectId id) {\n \t\treturn (id.w1 >>> 1) % obj_hash.length;\n \t}\n-- \n1.5.5.1\n"},{"id":"78411","messageId":"1212441883-12990-11-git-send-email-marek.zawirski@gmail.com","threadId":"13767","inReplyTo":"1212441883-12990-10-git-send-email-marek.zawirski@gmail.com","subject":"[JGIT PATCH 10/12] Add getObjectCount() method to PackFile","fromName":"Marek Zawirski","fromEmail":"marek.zawirski@gmail.com","sentAt":"2008-06-02T21:24:41Z","receivedAt":"2008-06-02T21:24:41Z","isPatch":true,"sender":{"key":"marek.zawirski@gmail.com","avatar":null},"body":"Method relies on PackIndex getObjectCount(). Exposed only to package.\n\nSigned-off-by: Marek Zawirski <marek.zawirski@gmail.com>\n---\n .../src/org/spearce/jgit/lib/PackFile.java         |   10 ++++++++++\n 1 files changed, 10 insertions(+), 0 deletions(-)\n\ndiff --git a/org.spearce.jgit/src/org/spearce/jgit/lib/PackFile.java b/org.spearce.jgit/src/org/spearce/jgit/lib/PackFile.java\nindex b1fbc2a..84562aa 100644\n--- a/org.spearce.jgit/src/org/spearce/jgit/lib/PackFile.java\n+++ b/org.spearce.jgit/src/org/spearce/jgit/lib/PackFile.java\n@@ -145,6 +145,16 @@ public class PackFile {\n \t\tpack.close();\n \t}\n \n+\t/**\n+\t * Obtain the total number of objects available in this pack. This method\n+\t * relies on pack index, giving number of effectively available objects.\n+\t * \n+\t * @return number of objects in index of this pack, likewise in this pack\n+\t */\n+\tlong getObjectCount() {\n+\t\treturn idx.getObjectCount();\n+\t}\n+\n \tfinal UnpackedObjectCache.Entry readCache(final long position) {\n \t\treturn UnpackedObjectCache.get(pack, position);\n \t}\n-- \n1.5.5.1\n"},{"id":"78416","messageId":"1212441883-12990-12-git-send-email-marek.zawirski@gmail.com","threadId":"13767","inReplyTo":"1212441883-12990-11-git-send-email-marek.zawirski@gmail.com","subject":"[JGIT PATCH 11/12] Entries iterator in PackIndex and indirectly PackFile","fromName":"Marek Zawirski","fromEmail":"marek.zawirski@gmail.com","sentAt":"2008-06-02T21:24:42Z","receivedAt":"2008-06-02T21:24:42Z","isPatch":true,"sender":{"key":"marek.zawirski@gmail.com","avatar":null},"body":"New iterators operate on MutableEntry to achieve high performance.\nInformation about objects (and its offset) in pack is needed in several\nplaces in original git, and it will be also useful here.\n\nSigned-off-by: Marek Zawirski <marek.zawirski@gmail.com>\n---\n .../src/org/spearce/jgit/lib/PackFile.java         |   19 +++++-\n .../src/org/spearce/jgit/lib/PackIndex.java        |   80 +++++++++++++++++++-\n .../src/org/spearce/jgit/lib/PackIndexV1.java      |   31 ++++++++\n .../src/org/spearce/jgit/lib/PackIndexV2.java      |   36 +++++++++\n 4 files changed, 164 insertions(+), 2 deletions(-)\n\ndiff --git a/org.spearce.jgit/src/org/spearce/jgit/lib/PackFile.java b/org.spearce.jgit/src/org/spearce/jgit/lib/PackFile.java\nindex 84562aa..1b2c167 100644\n--- a/org.spearce.jgit/src/org/spearce/jgit/lib/PackFile.java\n+++ b/org.spearce.jgit/src/org/spearce/jgit/lib/PackFile.java\n@@ -40,6 +40,7 @@ package org.spearce.jgit.lib;\n \n import java.io.File;\n import java.io.IOException;\n+import java.util.Iterator;\n import java.util.zip.DataFormatException;\n \n import org.spearce.jgit.util.NB;\n@@ -49,7 +50,7 @@ import org.spearce.jgit.util.NB;\n  * delta packed format yielding high compression of lots of object where some\n  * objects are similar.\n  */\n-public class PackFile {\n+public class PackFile implements Iterable<PackIndex.MutableEntry> {\n \tprivate final WindowedFile pack;\n \n \tprivate final PackIndex idx;\n@@ -146,6 +147,22 @@ public class PackFile {\n \t}\n \n \t/**\n+\t * Provide iterator over entries in associated pack index, that should also\n+\t * exist in this pack file. Objects returned by such iterator are mutable\n+\t * during iteration.\n+\t * <p>\n+\t * Iterator returns objects in SHA-1 lexicographical order.\n+\t * </p>\n+\t * \n+\t * @return iterator over entries of associated pack index\n+\t * \n+\t * @see PackIndex#iterator()\n+\t */\n+\tpublic Iterator<PackIndex.MutableEntry> iterator() {\n+\t\treturn idx.iterator();\n+\t}\n+\n+\t/**\n \t * Obtain the total number of objects available in this pack. This method\n \t * relies on pack index, giving number of effectively available objects.\n \t * \ndiff --git a/org.spearce.jgit/src/org/spearce/jgit/lib/PackIndex.java b/org.spearce.jgit/src/org/spearce/jgit/lib/PackIndex.java\nindex 104c361..3935d4f 100644\n--- a/org.spearce.jgit/src/org/spearce/jgit/lib/PackIndex.java\n+++ b/org.spearce.jgit/src/org/spearce/jgit/lib/PackIndex.java\n@@ -1,5 +1,6 @@\n /*\n  * Copyright (C) 2008, Shawn O. Pearce <spearce@spearce.org>\n+ * Copyright (C) 2008, Marek Zawirski <marek.zawirski@gmail.com>\n  *\n  * All rights reserved.\n  *\n@@ -41,6 +42,7 @@ import java.io.File;\n import java.io.FileInputStream;\n import java.io.FileNotFoundException;\n import java.io.IOException;\n+import java.util.Iterator;\n \n import org.spearce.jgit.util.NB;\n \n@@ -53,7 +55,7 @@ import org.spearce.jgit.util.NB;\n  * by ObjectId.\n  * </p>\n  */\n-public abstract class PackIndex {\n+public abstract class PackIndex implements Iterable<PackIndex.MutableEntry> {\n \t/**\n \t * Open an existing pack <code>.idx</code> file for reading.\n \t * <p>\n@@ -117,6 +119,19 @@ public abstract class PackIndex {\n \t}\n \n \t/**\n+\t * Provide iterator that gives access to index entries. Note, that iterator\n+\t * returns reference to mutable object, the same reference in each call -\n+\t * for performance reason. If client needs immutable objects, it must copy\n+\t * returned object on its own.\n+\t * <p>\n+\t * Iterator returns objects in SHA-1 lexicographical order.\n+\t * </p>\n+\t * \n+\t * @return iterator over pack index entries\n+\t */\n+\tpublic abstract Iterator<MutableEntry> iterator();\n+\n+\t/**\n \t * Obtain the total number of objects described by this index.\n \t * \n \t * @return number of objects in this index, and likewise in the associated\n@@ -134,4 +149,67 @@ public abstract class PackIndex {\n \t *         associated pack.\n \t */\n \tabstract long findOffset(AnyObjectId objId);\n+\n+\t/**\n+\t * Represent mutable entry of pack index consisting of object id and offset\n+\t * in pack (both mutable).\n+\t * \n+\t */\n+\tpublic static class MutableEntry extends MutableObjectId {\n+\t\tprivate long offset;\n+\n+\t\t/**\n+\t\t * Empty constructor. Object fields should be filled in later.\n+\t\t */\n+\t\tpublic MutableEntry() {\n+\t\t\tsuper();\n+\t\t}\n+\n+\t\t/**\n+\t\t * Returns offset for this index object entry\n+\t\t * \n+\t\t * @return offset of this object in a pack file\n+\t\t */\n+\t\tpublic long getOffset() {\n+\t\t\treturn offset;\n+\t\t}\n+\n+\t\tvoid setOffset(long offset) {\n+\t\t\tthis.offset = offset;\n+\t\t}\n+\n+\t\tprivate MutableEntry(MutableEntry src) {\n+\t\t\tsuper(src);\n+\t\t\tthis.offset = src.offset;\n+\t\t}\n+\n+\t\t/**\n+\t\t * Returns mutable copy of this mutable entry.\n+\t\t * \n+\t\t * @return copy of this mutable entry\n+\t\t */\n+\t\tpublic MutableEntry cloneEntry() {\n+\t\t\treturn new MutableEntry(this);\n+\t\t}\n+\t}\n+\n+\tprotected abstract class EntriesIterator implements Iterator<MutableEntry> {\n+\t\tprotected MutableEntry objectId = new MutableEntry();\n+\n+\t\tprotected long returnedNumber = 0;\n+\n+\t\tpublic boolean hasNext() {\n+\t\t\treturn returnedNumber < getObjectCount();\n+\t\t}\n+\n+\t\t/**\n+\t\t * Implementation must update {@link #returnedNumber} before returning\n+\t\t * element.\n+\t\t */\n+\t\tpublic abstract MutableEntry next();\n+\n+\t\tpublic void remove() {\n+\t\t\tthrow new UnsupportedOperationException();\n+\t\t}\n+\t}\n }\ndiff --git a/org.spearce.jgit/src/org/spearce/jgit/lib/PackIndexV1.java b/org.spearce.jgit/src/org/spearce/jgit/lib/PackIndexV1.java\nindex cfd18da..b8d9de3 100644\n--- a/org.spearce.jgit/src/org/spearce/jgit/lib/PackIndexV1.java\n+++ b/org.spearce.jgit/src/org/spearce/jgit/lib/PackIndexV1.java\n@@ -40,6 +40,8 @@ package org.spearce.jgit.lib;\n \n import java.io.IOException;\n import java.io.InputStream;\n+import java.util.Iterator;\n+import java.util.NoSuchElementException;\n \n import org.spearce.jgit.errors.CorruptObjectException;\n import org.spearce.jgit.util.NB;\n@@ -104,4 +106,33 @@ class PackIndexV1 extends PackIndex {\n \t\t} while (low < high);\n \t\treturn -1;\n \t}\n+\n+\tpublic Iterator<MutableEntry> iterator() {\n+\t\treturn new IndexV1Iterator();\n+\t}\n+\n+\tprivate class IndexV1Iterator extends EntriesIterator {\n+\t\tprivate int levelOne;\n+\n+\t\tprivate int levelTwo;\n+\n+\t\tpublic MutableEntry next() {\n+\t\t\tfor (; levelOne < idxdata.length; levelOne++) {\n+\t\t\t\tif (idxdata[levelOne] == null)\n+\t\t\t\t\tcontinue;\n+\n+\t\t\t\tif (levelTwo < idxdata[levelOne].length) {\n+\t\t\t\t\tlong offset = NB.decodeUInt32(idxdata[levelOne], levelTwo);\n+\t\t\t\t\tobjectId.setOffset(offset);\n+\t\t\t\t\tobjectId.fromRaw(idxdata[levelOne], levelTwo + 4);\n+\t\t\t\t\tlevelTwo += Constants.OBJECT_ID_LENGTH + 4;\n+\t\t\t\t\treturnedNumber++;\n+\t\t\t\t\treturn objectId;\n+\t\t\t\t} else {\n+\t\t\t\t\tlevelTwo = 0;\n+\t\t\t\t}\n+\t\t\t}\n+\t\t\tthrow new NoSuchElementException();\n+\t\t}\n+\t}\n }\ndiff --git a/org.spearce.jgit/src/org/spearce/jgit/lib/PackIndexV2.java b/org.spearce.jgit/src/org/spearce/jgit/lib/PackIndexV2.java\nindex b1b4d73..9a695ef 100644\n--- a/org.spearce.jgit/src/org/spearce/jgit/lib/PackIndexV2.java\n+++ b/org.spearce.jgit/src/org/spearce/jgit/lib/PackIndexV2.java\n@@ -40,6 +40,8 @@ package org.spearce.jgit.lib;\n import java.io.EOFException;\n import java.io.IOException;\n import java.io.InputStream;\n+import java.util.Iterator;\n+import java.util.NoSuchElementException;\n \n import org.spearce.jgit.util.NB;\n \n@@ -174,4 +176,38 @@ class PackIndexV2 extends PackIndex {\n \t\t} while (low < high);\n \t\treturn -1;\n \t}\n+\n+\tpublic Iterator<MutableEntry> iterator() {\n+\t\treturn new EntriesIteratorV2();\n+\t}\n+\n+\tprivate class EntriesIteratorV2 extends EntriesIterator {\n+\t\tprivate int levelOne;\n+\n+\t\tprivate int levelTWo;\n+\n+\t\tpublic MutableEntry next() {\n+\t\t\tfor (; levelOne < names.length; levelOne++) {\n+\t\t\t\tif (levelTWo < names[levelOne].length) {\n+\t\t\t\t\tobjectId.fromRaw(names[levelOne], levelTWo);\n+\t\t\t\t\tint arrayIdx = levelTWo / (Constants.OBJECT_ID_LENGTH / 4)\n+\t\t\t\t\t\t\t* 4;\n+\t\t\t\t\tlong offset = NB.decodeUInt32(offset32[levelOne], arrayIdx);\n+\t\t\t\t\tif ((offset & IS_O64) != 0) {\n+\t\t\t\t\t\tarrayIdx = (8 * (int) (offset & ~IS_O64));\n+\t\t\t\t\t\toffset = NB.decodeUInt64(offset64, arrayIdx);\n+\t\t\t\t\t}\n+\t\t\t\t\tobjectId.setOffset(offset);\n+\n+\t\t\t\t\tlevelTWo += Constants.OBJECT_ID_LENGTH / 4;\n+\t\t\t\t\treturnedNumber++;\n+\t\t\t\t\treturn objectId;\n+\t\t\t\t} else {\n+\t\t\t\t\tlevelTWo = 0;\n+\t\t\t\t}\n+\t\t\t}\n+\t\t\tthrow new NoSuchElementException();\n+\t\t}\n+\t}\n+\n }\n-- \n1.5.5.1\n"},{"id":"78417","messageId":"1212441883-12990-13-git-send-email-marek.zawirski@gmail.com","threadId":"13767","inReplyTo":"1212441883-12990-12-git-send-email-marek.zawirski@gmail.com","subject":"[JGIT PATCH 12/12] Add PackIndex specific tests, currently only iterators tests","fromName":"Marek Zawirski","fromEmail":"marek.zawirski@gmail.com","sentAt":"2008-06-02T21:24:43Z","receivedAt":"2008-06-02T21:24:43Z","isPatch":true,"sender":{"key":"marek.zawirski@gmail.com","avatar":null},"body":"Abstract PackIndexTest added, with specializations for v1 and v2\nindexes. New dedicated indexes files for v2 tests created.\n\nSigned-off-by: Marek Zawirski <marek.zawirski@gmail.com>\n---\n .../tst/org/spearce/jgit/lib/PackIndexTest.java    |  152 ++++++++++++++++++++\n .../tst/org/spearce/jgit/lib/PackIndexV1Test.java  |   54 +++++++\n .../tst/org/spearce/jgit/lib/PackIndexV2Test.java  |   54 +++++++\n ...-34be9032ac282b11fa9babdc2b2a93ca996c9c2f.idxV2 |  Bin 0 -> 1296 bytes\n ...-df2982f284bbabb6bdb59ee3fcc6eb0983e20371.idxV2 |  Bin 0 -> 2976 bytes\n 5 files changed, 260 insertions(+), 0 deletions(-)\n create mode 100644 org.spearce.jgit.test/tst/org/spearce/jgit/lib/PackIndexTest.java\n create mode 100644 org.spearce.jgit.test/tst/org/spearce/jgit/lib/PackIndexV1Test.java\n create mode 100644 org.spearce.jgit.test/tst/org/spearce/jgit/lib/PackIndexV2Test.java\n create mode 100644 org.spearce.jgit.test/tst/pack-34be9032ac282b11fa9babdc2b2a93ca996c9c2f.idxV2\n create mode 100644 org.spearce.jgit.test/tst/pack-df2982f284bbabb6bdb59ee3fcc6eb0983e20371.idxV2\n\ndiff --git a/org.spearce.jgit.test/tst/org/spearce/jgit/lib/PackIndexTest.java b/org.spearce.jgit.test/tst/org/spearce/jgit/lib/PackIndexTest.java\nnew file mode 100644\nindex 0000000..c682153\n--- /dev/null\n+++ b/org.spearce.jgit.test/tst/org/spearce/jgit/lib/PackIndexTest.java\n@@ -0,0 +1,152 @@\n+/*\n+ * Copyright (C) 2008, Marek Zawirski <marek.zawirski@gmail.com>\n+ *\n+ * All rights reserved.\n+ *\n+ * Redistribution and use in source and binary forms, with or\n+ * without modification, are permitted provided that the following\n+ * conditions are met:\n+ *\n+ * - Redistributions of source code must retain the above copyright\n+ *   notice, this list of conditions and the following disclaimer.\n+ *\n+ * - Redistributions in binary form must reproduce the above\n+ *   copyright notice, this list of conditions and the following\n+ *   disclaimer in the documentation and/or other materials provided\n+ *   with the distribution.\n+ *\n+ * - Neither the name of the Git Development Community nor the\n+ *   names of its contributors may be used to endorse or promote\n+ *   products derived from this software without specific prior\n+ *   written permission.\n+ *\n+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND\n+ * CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES,\n+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR\n+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n+ */\n+\n+package org.spearce.jgit.lib;\n+\n+import java.io.File;\n+import java.util.Iterator;\n+import java.util.NoSuchElementException;\n+\n+import org.spearce.jgit.lib.PackIndex.MutableEntry;\n+\n+public abstract class PackIndexTest extends RepositoryTestCase {\n+\n+\tPackIndex smallIdx;\n+\n+\tPackIndex denseIdx;\n+\n+\tpublic void setUp() throws Exception {\n+\t\tsuper.setUp();\n+\t\tsmallIdx = PackIndex.open(getFileForPack34be9032());\n+\t\tdenseIdx = PackIndex.open(getFileForPackdf2982f28());\n+\t}\n+\n+\t/**\n+\t * Return file with appropriate index version for prepared pack.\n+\t * \n+\t * @return file with index\n+\t */\n+\tpublic abstract File getFileForPack34be9032();\n+\n+\t/**\n+\t * Return file with appropriate index version for prepared pack.\n+\t * \n+\t * @return file with index\n+\t */\n+\tpublic abstract File getFileForPackdf2982f28();\n+\n+\t/**\n+\t * Test contracts of Iterator methods and this implementation remove()\n+\t * limitations.\n+\t */\n+\tpublic void testIteratorMethodsContract() {\n+\t\tIterator<PackIndex.MutableEntry> iter = smallIdx.iterator();\n+\t\twhile (iter.hasNext()) {\n+\t\t\titer.next();\n+\t\t}\n+\n+\t\ttry {\n+\t\t\titer.next();\n+\t\t\tfail(\"next() unexpectedly returned element\");\n+\t\t} catch (NoSuchElementException x) {\n+\t\t\t// expected\n+\t\t}\n+\n+\t\ttry {\n+\t\t\titer.remove();\n+\t\t\tfail(\"remove() shouldn't be implemented\");\n+\t\t} catch (UnsupportedOperationException x) {\n+\t\t\t// expected\n+\t\t}\n+\t}\n+\n+\t/**\n+\t * Test results of iterator comparing to content of well-known (prepared)\n+\t * small index.\n+\t */\n+\tpublic void testIteratorReturnedValues1() {\n+\t\tIterator<PackIndex.MutableEntry> iter = smallIdx.iterator();\n+\t\tassertEquals(\"4b825dc642cb6eb9a060e54bf8d69288fbee4904\", iter.next()\n+\t\t\t\t.toString());\n+\t\tassertEquals(\"540a36d136cf413e4b064c2b0e0a4db60f77feab\", iter.next()\n+\t\t\t\t.toString());\n+\t\tassertEquals(\"5b6e7c66c276e7610d4a73c70ec1a1f7c1003259\", iter.next()\n+\t\t\t\t.toString());\n+\t\tassertEquals(\"6ff87c4664981e4397625791c8ea3bbb5f2279a3\", iter.next()\n+\t\t\t\t.toString());\n+\t\tassertEquals(\"82c6b885ff600be425b4ea96dee75dca255b69e7\", iter.next()\n+\t\t\t\t.toString());\n+\t\tassertEquals(\"902d5476fa249b7abc9d84c611577a81381f0327\", iter.next()\n+\t\t\t\t.toString());\n+\t\tassertEquals(\"aabf2ffaec9b497f0950352b3e582d73035c2035\", iter.next()\n+\t\t\t\t.toString());\n+\t\tassertEquals(\"c59759f143fb1fe21c197981df75a7ee00290799\", iter.next()\n+\t\t\t\t.toString());\n+\t\tassertFalse(iter.hasNext());\n+\t}\n+\n+\t/**\n+\t * Compare offset from iterator entries with output of findOffset() method.\n+\t */\n+\tpublic void testCompareEntriesOffsetsWithFindOffsets() {\n+\t\tfor (MutableEntry me : smallIdx) {\n+\t\t\tassertEquals(smallIdx.findOffset(me), me.getOffset());\n+\t\t}\n+\t\tfor (MutableEntry me : denseIdx) {\n+\t\t\tassertEquals(denseIdx.findOffset(me), me.getOffset());\n+\t\t}\n+\t}\n+\n+\t/**\n+\t * Test partial results of iterator comparing to content of well-known\n+\t * (prepared) dense index, that may need multi-level indexing.\n+\t */\n+\tpublic void testIteratorReturnedValues2() {\n+\t\tIterator<PackIndex.MutableEntry> iter = denseIdx.iterator();\n+\t\twhile (!iter.next().toString().equals(\n+\t\t\t\t\"0a3d7772488b6b106fb62813c4d6d627918d9181\")) {\n+\t\t\t// just iterating\n+\t\t}\n+\t\tassertEquals(\"1004d0d7ac26fbf63050a234c9b88a46075719d3\", iter.next()\n+\t\t\t\t.toString()); // same level-1\n+\t\tassertEquals(\"10da5895682013006950e7da534b705252b03be6\", iter.next()\n+\t\t\t\t.toString()); // same level-1\n+\t\tassertEquals(\"1203b03dc816ccbb67773f28b3c19318654b0bc8\", iter.next()\n+\t\t\t\t.toString());\n+\t}\n+\n+}\ndiff --git a/org.spearce.jgit.test/tst/org/spearce/jgit/lib/PackIndexV1Test.java b/org.spearce.jgit.test/tst/org/spearce/jgit/lib/PackIndexV1Test.java\nnew file mode 100644\nindex 0000000..dda3ef4\n--- /dev/null\n+++ b/org.spearce.jgit.test/tst/org/spearce/jgit/lib/PackIndexV1Test.java\n@@ -0,0 +1,54 @@\n+/*\n+ * Copyright (C) 2008, Marek Zawirski <marek.zawirski@gmail.com>\n+ *\n+ * All rights reserved.\n+ *\n+ * Redistribution and use in source and binary forms, with or\n+ * without modification, are permitted provided that the following\n+ * conditions are met:\n+ *\n+ * - Redistributions of source code must retain the above copyright\n+ *   notice, this list of conditions and the following disclaimer.\n+ *\n+ * - Redistributions in binary form must reproduce the above\n+ *   copyright notice, this list of conditions and the following\n+ *   disclaimer in the documentation and/or other materials provided\n+ *   with the distribution.\n+ *\n+ * - Neither the name of the Git Development Community nor the\n+ *   names of its contributors may be used to endorse or promote\n+ *   products derived from this software without specific prior\n+ *   written permission.\n+ *\n+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND\n+ * CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES,\n+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR\n+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n+ */\n+\n+package org.spearce.jgit.lib;\n+\n+import java.io.File;\n+\n+public class PackIndexV1Test extends PackIndexTest {\n+\t@Override\n+\tpublic File getFileForPack34be9032() {\n+\t\treturn new File(new File(\"tst\"),\n+\t\t\t\t\"pack-34be9032ac282b11fa9babdc2b2a93ca996c9c2f.idx\");\n+\t}\n+\n+\t@Override\n+\tpublic File getFileForPackdf2982f28() {\n+\t\treturn new File(new File(\"tst\"),\n+\t\t\t\t\"pack-df2982f284bbabb6bdb59ee3fcc6eb0983e20371.idx\");\n+\t}\n+}\ndiff --git a/org.spearce.jgit.test/tst/org/spearce/jgit/lib/PackIndexV2Test.java b/org.spearce.jgit.test/tst/org/spearce/jgit/lib/PackIndexV2Test.java\nnew file mode 100644\nindex 0000000..8267e48\n--- /dev/null\n+++ b/org.spearce.jgit.test/tst/org/spearce/jgit/lib/PackIndexV2Test.java\n@@ -0,0 +1,54 @@\n+/*\n+ * Copyright (C) 2008, Marek Zawirski <marek.zawirski@gmail.com>\n+ *\n+ * All rights reserved.\n+ *\n+ * Redistribution and use in source and binary forms, with or\n+ * without modification, are permitted provided that the following\n+ * conditions are met:\n+ *\n+ * - Redistributions of source code must retain the above copyright\n+ *   notice, this list of conditions and the following disclaimer.\n+ *\n+ * - Redistributions in binary form must reproduce the above\n+ *   copyright notice, this list of conditions and the following\n+ *   disclaimer in the documentation and/or other materials provided\n+ *   with the distribution.\n+ *\n+ * - Neither the name of the Git Development Community nor the\n+ *   names of its contributors may be used to endorse or promote\n+ *   products derived from this software without specific prior\n+ *   written permission.\n+ *\n+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND\n+ * CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES,\n+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR\n+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n+ */\n+\n+package org.spearce.jgit.lib;\n+\n+import java.io.File;\n+\n+public class PackIndexV2Test extends PackIndexTest {\n+\t@Override\n+\tpublic File getFileForPack34be9032() {\n+\t\treturn new File(new File(\"tst\"),\n+\t\t\t\t\"pack-34be9032ac282b11fa9babdc2b2a93ca996c9c2f.idxV2\");\n+\t}\n+\n+\t@Override\n+\tpublic File getFileForPackdf2982f28() {\n+\t\treturn new File(new File(\"tst\"),\n+\t\t\t\t\"pack-df2982f284bbabb6bdb59ee3fcc6eb0983e20371.idxV2\");\n+\t}\n+}\ndiff --git a/org.spearce.jgit.test/tst/pack-34be9032ac282b11fa9babdc2b2a93ca996c9c2f.idxV2 b/org.spearce.jgit.test/tst/pack-34be9032ac282b11fa9babdc2b2a93ca996c9c2f.idxV2\nnew file mode 100644\nindex 0000000000000000000000000000000000000000..1d45fa811a1855a9ac71e5237c8aa91e502e8224\nGIT binary patch\nliteral 1296\nzcmexg;-AdGz`z8=qk#AjU<4{9gh6473o`@dsEJvC=1~i?0?i@^vjO$d1G59|p%>-=\nz+BG7ucT?;!r_*^m7bHCO{&8(m$M1KZEFoNG7tPK)+Ih42X!CLTZsRZiw>mnnChbt!\nz^F&^+;^TY=7k)p;U=*4EqsA>|hMe>Cr0|I+URm#sSE^jxbZkfK{{-$Qs#{)7yZ1cy\nzlxlS5^9i~kWxrHrSM8bGa!fG1s?kE8S$)-h{a<fpd)9LXm}=Wa=oT}_D3~6d9{JJv\nzxBMd+$;!t2rOV$jXtK{dw9P4^Xl?kR{{l-YO*Yluad-asB!%0wTTA?O9Jh7!G6n{@\nzG+>qt24*>6K48)T#v2b%%mOHO4anZ)^4)OqwtbqDxeqp+n<8~%>Q9^4X-{K**qkZ&\nS;_1>JC~?!}g1(aBk0JolEO)B_\n\nliteral 0\nHcmV?d00001\n\ndiff --git a/org.spearce.jgit.test/tst/pack-df2982f284bbabb6bdb59ee3fcc6eb0983e20371.idxV2 b/org.spearce.jgit.test/tst/pack-df2982f284bbabb6bdb59ee3fcc6eb0983e20371.idxV2\nnew file mode 100644\nindex 0000000000000000000000000000000000000000..ccbf00e34fb8de324c5fe3f584b80bdb99e02df0\nGIT binary patch\nliteral 2976\nzcmb`Jc{J4PAIHCTgRx}KHdlq1j4d}LNmof_JF>(LG1<A6$h2TI4Oy~9nKYP^t!63=\nzYLulYB3n$iD0_*r=DPIzIH%6(bbj4#=iKL<*Lgn6`+1(vf6x0<nAKqfK{$agivxo1\nz!390;@4yT7RrtPwA7a$MKmas?-$4lK{|{lPe~k#_{{^CO&-YjZy`MoG^k0yGSn@ka\nzL0$SYGO({A`vc^lFApgE2PncFt0)1=z=qGLz^?WWY=qt_>Yveo{aZFc?Pt&gJr2<N\nz0XooMMfWGr1MTK-(1(1LUjc(3U<m!MF@pRHTOs~}F~r-x!36SEw*N~^LAT0|pTrFG\nz-?9^G{|INbPN!$C4Z>L`Ws~j~98nzpsR)Iq>AhXc=~_`Kak}JiK`rYFrUEtfaQGrI\nzQ>~Q1zD&jZnaZI`iWV@A2-$tsPc*1PO}wF}M>RDmHAa-X{aLBX(!7>+zFspk!JN-Q\nzwo{btnCXoXM|`YD*>;w}wzhPmku_X&<0h$=nj;Y=YPasE%XnD|Hc9?9K4QadJg}@V\nzIY%xwsdbJreIT_sf#lkIH*B5_tu|Cx(CMO#)hj*gKDOjLxRSBy9t9hzXV$)VS`l-t\nzZ1kvsg(CGXp0MaTRx(4=Yf=f9N$K^8?7p)vM9k;xFEZDS<{hzm>6<GTviPtI8yjY7\nzP!barFPpLTvy#rqY!?%`Cf9-NL=O9=7J02gdPtY)^S@U(@r=g5$M-5X>|*a28f_fr\nzdnNw1CX$2UXWK?19Dik@qro^~*ph0#n3&ZbX``c7Gjq?P@uSW5z-Vr!6jNFxNM=xY\nzETYOjuh6aEl0?O16mj=o5qnwg<;3I2GIy$R5X*S?n@79l=1VHS1la~U1^bHKeO(oQ\nzQI))93R844<xFPBp$)}zp`+9cpJQi=RGGR1WO4H_H%tMuyGMW6qUElT-Rq;~aW&c-\nzJQyyQ*iCj*HOO4*y4g7TLEhe5o*tvUoMz`4`;OYYo)CLo^FE5F!Jk;vPNj@IRZi31\nz-`V$SUf5uT?tfOCAn&EB?Q}dIpJGZNWlkqO3#h7lyI_BAaxs)&T0c}EH_wOK5GWCj\nz33Lz>c`{qI4rAu8m>p7}d@5GWAb%yxZHDx?=CMgy<4VlSg_t3a{^MaM4xS<2kf|ls\nzE=?uX-HFwjC29@uxaJBr<`+iD%)dxq&x~cX$Kl7V50UVdkzrOB_5LUniius)j0_FW\nz32P9=Pz9>rP<~B_k|et3iO0Mg-}?vE)U&nN&X_lJXqZUc6SZ8tc8%MC(?{mZ&T(?Z\nz&wCO(-kZs_HrFj<rI~6HMkA9}tmxB$b^O=;%Sty~eP$)g(6|}3eq}vL#YLBqqcJM?\nzf{<9{xNbVknClwp$%FC}(aSV0WC@Kw=5?jM-T{~7i&KApvnogj-Gi&>OAYF<IMJ74\nzT`k#_ZWpul!E4TJ1dEoY7fq&;Q$<{5%=Tgvj3dWbA80;}9)aiW+{HC<lJUnc_dHZ(\nzm4|CN)F+%zu=FoJYkxI5d%)t*-Q4iP_TT@?CwH`L8|}sI)(pN*2zqy$YVZP8V2F}C\nzo-}^eP`zVXiTs8%llklnZD1HZ<Wm}m>(?BU;h(nau1x7HJ$Z8Hee&;1yVSe)MCzQt\nz*EUQ{m9{I3@GcBJw|;Xlf5-d&cN+<+H?F61JNO3Ho93*O)1V~lQiHM<m#WU3BF@%T\nz3mNw=;rtG9Q;R>G&Zw^N+x=1hU8c|l@%{67vmkmDipt9QP1gv|Vf0cyRAQ=8q@?c_\nzCE#9gSt5U&P>d9tba0cGlc8T#tNMLH?s&Vk(nQ%`^%X+2(+n$DR`&haQ+%%^>Uehj\nz=^Jw1ksM4bufR4xxN$1-&Mpgd?Y3C#^i178%X99nmTh$>u44V-(4z=T-mP%tg6)-d\nzu|3RE9lsK-!K)5bgYd}4yc^_BC1<xT-ZAa=1I*G5Te>Ahg*HuhRWX#B5Z@WP%k*t`\nz(TI1xIf;C|zUpQ9bE7TuA7r9yt4g--Pau1;MUwm0rr<<)2}b=YDy}ZH#E;maPl6$j\nzQ5nw{ir6XwZ_VW|ku}OkYCpLshzPe@OWNKxR21(;67FbE7e7w-jt=nRq#72n`SrTW\nz1uqLP7-b$&(!oph_^B@$^|#hM5fj{L(XRQ>UP%ubRZ;i<aCt!xd1#3?O?#A`a6#5Y\nzFrAXr@BMUE#!_Ww&g=5?Hqw}ZcYyPpg;thow!&D;$+YrCciB7~!`;Y~{Bgf-tooCz\nz5W-}OZQp!v-y>{KkcJLD(=;O>WxupVlwC8|y2ZogB`bU4g|h<ZRHC2vbO_fGDVR=9\nz<*UmirY&u7=o(MFtf6M4Qgq{E)|PT+^Q73Jkd7HEMOPLxg}}8VS^m0{gLR=(f15sK\nzF#RYi-I_;4k8YNhxhp9Q<*abYC2cmDCO|tMeD1}}V9t80j1tfA12;$1rrYTGxW%Uy\nzaVYfKEjM0#IKU%|Daq>yyf(73_9lfhV3^|Wc5k<<Fk@;P{Hr419R(c00?`o!y%*>P\nz`-VjjF7PqvO0ZlxkP{I^>Hx%cU>jLrwP=vHAqWrbs~%7o{#xNQu!^APy^kOg5m0`D\nzAYvrYfPa(%A1MT9`IEuY9s~_|6Nx?W<^r6{gZn;$wgfD!CD_y%=+(nph0p^JC3zUE\nzS~koX3-dex9U5?lGw_c~g0B<=jaV;W54shY`xa;)!CY_Q-A|x#fO;a_1+#I$8+^`?\nz!=H-+4~2$YssQeqfHRXYoBYl^A8q!6_j1OT;sSk?0(z_H4h!AoN{ZqUN0dGrKk#Uu\nL#~L@=K-~WTG^vnn\n\nliteral 0\nHcmV?d00001\n\n-- \n1.5.5.1\n"},{"id":"78424","messageId":"alpine.DEB.1.00.0806022313270.13507@racer.site.net","threadId":"13767","inReplyTo":"1212441883-12990-1-git-send-email-marek.zawirski@gmail.com","subject":"Re: [JGIT PATCH 00/12] Extensions in core needed by PackWriter","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2008-06-02T22:15:45Z","receivedAt":"2008-06-02T22:15:45Z","isPatch":true,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi,\n\nOn Mon, 2 Jun 2008, Marek Zawirski wrote:\n\n> Series start with formatting stuff, as some old files were not \n> appropriatelly formatted.\n\nYou mean line-wrapping, right?  Is there a different \nrecommended column/line ratio for JGit than for Git?  Because some of your \nlater patches introduce lines longer than 80 columns/line.\n\n>   Add getType() method to RevObject hierarchy\n\nWas the idea not to use instanceof to be able to have multiple \"types\" per \nobject?  I.e. a commit object is of type commit, but also of type \nobject...\n\nBTW I really like the iterator implementation.\n\nCiao,\nDscho\n"},{"id":"78430","messageId":"48447B02.3040505@gmail.com","threadId":"13767","inReplyTo":"alpine.DEB.1.00.0806022313270.13507@racer.site.net","subject":"Re: [JGIT PATCH 00/12] Extensions in core needed by PackWriter","fromName":"Marek Zawirski","fromEmail":"marek.zawirski@gmail.com","sentAt":"2008-06-02T22:58:10Z","receivedAt":"2008-06-02T22:58:10Z","isPatch":true,"sender":{"key":"marek.zawirski@gmail.com","avatar":null},"body":"Johannes Schindelin wrote:\n(...)\n> You mean line-wrapping, right?  Is there a different \n> recommended column/line ratio for JGit than for Git?  Because some of your \n> later patches introduce lines longer than 80 columns/line.\n\nNot only line-wrapping in fact. egit/jgit use it's own eclipse formatting template \nthat define more than line-wrapping, even some spaces in javadocs as you may have seen.\nActually I don't know is it 80 columns/line (but I suspect it may be), as I just use \nthis formatter associated with project by simply pressing some keyboard shortcut. \nMaybe I simply missed some formatting, which patch do you mean? Some things however \nlook strange after auto-formatting. While it may even look ugly for somebody I \nwouldn't try to change that by hand, to make other commiters lifes easier allowing \nthem also just press \"format\" button ;)\n\n>>   Add getType() method to RevObject hierarchy\n> \n> Was the idea not to use instanceof to be able to have multiple \"types\" per \n> object?  I.e. a commit object is of type commit, but also of type \n> object...\n\nI'm not sure whether I understand you, but probably it was not what you mean. The \nonly idea behind that was to refactor instanceofs to polymorphic getType() calls. It \nallows us mapping, indexing by type, using switches... without tones of code.\n\n\n> BTW I really like the iterator implementation.\n\nThanks for looking in.\n\n-- \nMarek Zawirski [zawir]\nmarek.zawirski@gmail.com\n"},{"id":"78438","messageId":"alpine.DEB.1.00.0806030040560.13507@racer.site.net","threadId":"13767","inReplyTo":"48447B02.3040505@gmail.com","subject":"Re: [JGIT PATCH 00/12] Extensions in core needed by PackWriter","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2008-06-02T23:43:07Z","receivedAt":"2008-06-02T23:43:07Z","isPatch":true,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi,\n\nOn Tue, 3 Jun 2008, Marek Zawirski wrote:\n\n> Johannes Schindelin wrote:\n> (...)\n> > You mean line-wrapping, right?  Is there a different recommended \n> > column/line ratio for JGit than for Git?  Because some of your later \n> > patches introduce lines longer than 80 columns/line.\n> \n> Not only line-wrapping in fact. egit/jgit use it's own eclipse \n> formatting template that define more than line-wrapping, even some \n> spaces in javadocs as you may have seen.\n>\n> Actually I don't know is it 80 columns/line (but I suspect it may be), \n> as I just use this formatter associated with project by simply pressing \n> some keyboard shortcut. Maybe I simply missed some formatting, which \n> patch do you mean? Some things however look strange after \n> auto-formatting. While it may even look ugly for somebody I wouldn't try \n> to change that by hand, to make other commiters lifes easier allowing \n> them also just press \"format\" button ;)\n\nAh, thanks for the explanation!\n\n> > >   Add getType() method to RevObject hierarchy\n> > \n> > Was the idea not to use instanceof to be able to have multiple \"types\" \n> > per object?  I.e. a commit object is of type commit, but also of type \n> > object...\n> \n> I'm not sure whether I understand you, but probably it was not what you \n> mean. The only idea behind that was to refactor instanceofs to \n> polymorphic getType() calls.\n\nActually, the result is no longer polymorphic, as every object can have \nonly one type now.\n\n> It allows us mapping, indexing by type, using switches... without tones \n> of code.\n\nHrm, I thought that you added more lines than you deleted.  But hey, I do \nnot really know what you want to index, maybe you got a point there.  I \nguess I'll see ;-)\n\nCiao,\nDscho\n"},{"id":"78906","messageId":"200806061524.04140.robin.rosenberg@dewire.com","threadId":"13767","inReplyTo":"1212441883-12990-1-git-send-email-marek.zawirski@gmail.com","subject":"Re: [JGIT PATCH 00/12] Extensions in core needed by PackWriter","fromName":"Robin Rosenberg","fromEmail":"robin.rosenberg@dewire.com","sentAt":"2008-06-06T13:24:03Z","receivedAt":"2008-06-06T13:24:03Z","isPatch":true,"sender":{"key":"robin.rosenberg@dewire.com","avatar":"https://avatars.githubusercontent.com/u/46357?v=4"},"body":"måndagen den 2 juni 2008 23.24.31 skrev Marek Zawirski:\n> Hello,\n> \n> Here is my first GSoC series - some work from the last week.\n> It's actually not a PackWriter, but some changes in existing jgit core\n> related to PackWriting. Some of these added methods/refactors are not yet\n> used within this series, but are used in my dirty branch in PackWriter\n> which is under-development, even somewhat usable.\n> \n> Series start with formatting stuff, as some old files were not\n> appropriatelly formatted.\n> \n> This series is also available at my corechanges branch:\n> http://repo.or.cz/w/egit/zawir.git?a=shortlog;h=refs/heads/corechanges\n> It's based on Shawn's bsd branch, with new BSD-style license, but I can\n> rebase if really needed.\nNo, that's fine. \n> \n> If you want to track some PackWriter (itself) development you may want to\n> have a look at my dirty branch:\n> http://repo.or.cz/w/egit/zawir.git?a=shortlog;h=refs/heads/dirty\n> \n> That's all. Although Shawn already reviewed some old version of this patches,\n> I'm still interested in your comments.\n\nA well defined set of enhancements with only minor nitpicks (in separate mails)  I'm somewhat reluctant to reformatting patches though. Ideally we'd be using eclipse 3.4 and have it format changed parts automatically on save (or similar feature for other IDE's). I tried format on all classes leading to 118 files changed, but nothing major, just a lot of changes with no relevant to readability, except some cases which only made things worse.  That's a reason why I have not formatted code according to settings, although\nthe most common reason is probably sloppiness.\n\n-- robin\n"},{"id":"78905","messageId":"200806061524.09741.robin.rosenberg@dewire.com","threadId":"13767","inReplyTo":"1212441883-12990-5-git-send-email-marek.zawirski@gmail.com","subject":"Re: [JGIT PATCH 04/12] Add getType() method to RevObject hierarchy","fromName":"Robin Rosenberg","fromEmail":"robin.rosenberg@dewire.com","sentAt":"2008-06-06T13:24:09Z","receivedAt":"2008-06-06T13:24:09Z","isPatch":true,"sender":{"key":"robin.rosenberg@dewire.com","avatar":"https://avatars.githubusercontent.com/u/46357?v=4"},"body":"måndagen den 2 juni 2008 23.24.35 skrev Marek Zawirski:\n> This let us avoid using instanceof.\n\nObviously. I think I know why you want to do this and I think it's a\ngood idea. You might want to explaint why *you* think it's good.\n\n-- robin\n"},{"id":"78907","messageId":"200806061524.15823.robin.rosenberg@dewire.com","threadId":"13767","inReplyTo":"1212441883-12990-10-git-send-email-marek.zawirski@gmail.com","subject":"Re: [JGIT PATCH 09/12] Add getSize() method to ObjectIdSubclassMap","fromName":"Robin Rosenberg","fromEmail":"robin.rosenberg@dewire.com","sentAt":"2008-06-06T13:24:15Z","receivedAt":"2008-06-06T13:24:15Z","isPatch":true,"sender":{"key":"robin.rosenberg@dewire.com","avatar":"https://avatars.githubusercontent.com/u/46357?v=4"},"body":"måndagen den 2 juni 2008 23.24.40 skrev Marek Zawirski:\n> --- a/org.spearce.jgit/src/org/spearce/jgit/lib/ObjectIdSubclassMap.java\n> +++ b/org.spearce.jgit/src/org/spearce/jgit/lib/ObjectIdSubclassMap.java\n> @@ -107,6 +107,15 @@ public class ObjectIdSubclassMap<V extends ObjectId> {\n>  \t\tsize++;\n>  \t}\n>  \n> +\t/**\n> +\t * Returns number of objects in map.\n> +\t * \n> +\t * @return number of objects in map\n> +\t */\n> +\tpublic int size() {\n> +\t\treturn size;\n> +\t}\n\nJust the @return is usually enough for methods that simply return a value. If you\nhave both the untagged part of the comment should explain much more. Patch\n10 is a good example.\n\n-- robin\n"},{"id":"78989","messageId":"4849D115.5030602@gmail.com","threadId":"13767","inReplyTo":"200806061524.04140.robin.rosenberg@dewire.com","subject":"Re: [JGIT PATCH 00/12] Extensions in core needed by PackWriter","fromName":"Marek Zawirski","fromEmail":"marek.zawirski@gmail.com","sentAt":"2008-06-07T00:06:45Z","receivedAt":"2008-06-07T00:06:45Z","isPatch":true,"sender":{"key":"marek.zawirski@gmail.com","avatar":null},"body":"On Fri, Jun 6, 2008 at 3:24 PM, Robin Rosenberg \n<robin.rosenberg@dewire.com> wrote:\n> A well defined set of enhancements with only minor nitpicks (in separate mails)\n\nNice to hear. I'll send v2 of these 2 patches (04 and 09) in a moment. \nWith a slightly less place for nitpicks, I hope.\n\n>  I'm somewhat reluctant to reformatting patches though. \n\nWell, so should I remove these reformatting patches from series? (oouch!)\n\nActually, when I ran into formatting problem, Shawn suggested that I may \nformat PackFile as he was also touching this file - I much appreciated \nthis idea. PackIndex* formatting is however my own invention.\n\nSo you assume that Eclipse 3.4 will just force us to submit new patches\nwith specified formatting, but keep old lines formatting untouched, am I\nright?\nIsn't it somewhat annoying that formatting is inconsistent through\nproject (especially line width in some places)? And that I almost have\nto block formatting shortcut to stop my pre-save/pre-commit habit?;)\n\nThanks,\n-- \nMarek Zawirski / zawir\nmarek.zawirski@gmail.com\n"},{"id":"78990","messageId":"1212797415-31055-1-git-send-email-marek.zawirski@gmail.com","threadId":"13767","inReplyTo":"200806061524.09741.robin.rosenberg@dewire.com","subject":"[JGIT PATCH v2 04/12] Add getType() method to RevObject hierarchy","fromName":"Marek Zawirski","fromEmail":"marek.zawirski@gmail.com","sentAt":"2008-06-07T00:10:15Z","receivedAt":"2008-06-07T00:10:15Z","isPatch":true,"sender":{"key":"marek.zawirski@gmail.com","avatar":null},"body":"Introduce natural correlation between each concrete RevObject and\nexisting integer (constant) for that object type. Such an integer\nallows us reducing code amount to perform indexing array by type\nor mapping by type. We can also use switches instead of instanceof\nor write output type directly.\nWe could have a common code with behavior determined by polymorphic\ngetType() call.\n\nSigned-off-by: Marek Zawirski <marek.zawirski@gmail.com>\n---\n .../src/org/spearce/jgit/revwalk/RevBlob.java      |    6 ++++++\n .../src/org/spearce/jgit/revwalk/RevCommit.java    |    5 +++++\n .../src/org/spearce/jgit/revwalk/RevObject.java    |    8 ++++++++\n .../src/org/spearce/jgit/revwalk/RevTag.java       |    5 +++++\n .../src/org/spearce/jgit/revwalk/RevTree.java      |    6 ++++++\n 5 files changed, 30 insertions(+), 0 deletions(-)\n\ndiff --git a/org.spearce.jgit/src/org/spearce/jgit/revwalk/RevBlob.java b/org.spearce.jgit/src/org/spearce/jgit/revwalk/RevBlob.java\nindex f6d34f4..66cdc02 100644\n--- a/org.spearce.jgit/src/org/spearce/jgit/revwalk/RevBlob.java\n+++ b/org.spearce.jgit/src/org/spearce/jgit/revwalk/RevBlob.java\n@@ -38,6 +38,7 @@\n package org.spearce.jgit.revwalk;\n \n import org.spearce.jgit.lib.AnyObjectId;\n+import org.spearce.jgit.lib.Constants;\n \n /** A binary file, or a symbolic link. */\n public class RevBlob extends RevObject {\n@@ -55,4 +56,9 @@ public class RevBlob extends RevObject {\n \tvoid parse(final RevWalk walk) {\n \t\tflags |= PARSED;\n \t}\n+\t\n+\t@Override\n+\tpublic int getType() {\n+\t\treturn Constants.OBJ_BLOB;\n+\t}\n }\ndiff --git a/org.spearce.jgit/src/org/spearce/jgit/revwalk/RevCommit.java b/org.spearce.jgit/src/org/spearce/jgit/revwalk/RevCommit.java\nindex 0aa7098..77f1d1a 100644\n--- a/org.spearce.jgit/src/org/spearce/jgit/revwalk/RevCommit.java\n+++ b/org.spearce.jgit/src/org/spearce/jgit/revwalk/RevCommit.java\n@@ -135,6 +135,11 @@ public class RevCommit extends RevObject {\n \t\tbuffer = raw;\n \t\tflags |= PARSED;\n \t}\n+\t\n+\t@Override\n+\tpublic int getType() {\n+\t\treturn Constants.OBJ_COMMIT;\n+\t}\n \n \tstatic void carryFlags(RevCommit c, final int carry) {\n \t\tfor (;;) {\ndiff --git a/org.spearce.jgit/src/org/spearce/jgit/revwalk/RevObject.java b/org.spearce.jgit/src/org/spearce/jgit/revwalk/RevObject.java\nindex 86c50b5..451205c 100644\n--- a/org.spearce.jgit/src/org/spearce/jgit/revwalk/RevObject.java\n+++ b/org.spearce.jgit/src/org/spearce/jgit/revwalk/RevObject.java\n@@ -42,6 +42,7 @@ import java.io.IOException;\n import org.spearce.jgit.errors.IncorrectObjectTypeException;\n import org.spearce.jgit.errors.MissingObjectException;\n import org.spearce.jgit.lib.AnyObjectId;\n+import org.spearce.jgit.lib.Constants;\n import org.spearce.jgit.lib.ObjectId;\n \n /** Base object type accessed during revision walking. */\n@@ -56,6 +57,13 @@ public abstract class RevObject extends ObjectId {\n \n \tabstract void parse(RevWalk walk) throws MissingObjectException,\n \t\t\tIncorrectObjectTypeException, IOException;\n+\t\n+\t/**\n+\t * Get Git object type. See {@link Constants}.\n+\t * \n+\t * @return object type\n+\t */\n+\tpublic abstract int getType();\n \n \t/**\n \t * Get the name of this object.\ndiff --git a/org.spearce.jgit/src/org/spearce/jgit/revwalk/RevTag.java b/org.spearce.jgit/src/org/spearce/jgit/revwalk/RevTag.java\nindex 668819c..bbb18ee 100644\n--- a/org.spearce.jgit/src/org/spearce/jgit/revwalk/RevTag.java\n+++ b/org.spearce.jgit/src/org/spearce/jgit/revwalk/RevTag.java\n@@ -96,6 +96,11 @@ public class RevTag extends RevObject {\n \t\tflags |= PARSED;\n \t}\n \n+\t@Override\n+\tpublic int getType() {\n+\t\treturn Constants.OBJ_TAG;\n+\t}\n+\t\n \t/**\n \t * Parse this tag buffer for display.\n \t * \ndiff --git a/org.spearce.jgit/src/org/spearce/jgit/revwalk/RevTree.java b/org.spearce.jgit/src/org/spearce/jgit/revwalk/RevTree.java\nindex 7ad9be0..e1cd4b5 100644\n--- a/org.spearce.jgit/src/org/spearce/jgit/revwalk/RevTree.java\n+++ b/org.spearce.jgit/src/org/spearce/jgit/revwalk/RevTree.java\n@@ -38,6 +38,7 @@\n package org.spearce.jgit.revwalk;\n \n import org.spearce.jgit.lib.AnyObjectId;\n+import org.spearce.jgit.lib.Constants;\n \n /** A reference to a tree of subtrees/files. */\n public class RevTree extends RevObject {\n@@ -55,4 +56,9 @@ public class RevTree extends RevObject {\n \tvoid parse(final RevWalk walk) {\n \t\tflags |= PARSED;\n \t}\n+\t\n+\t@Override\n+\tpublic int getType() {\n+\t\treturn Constants.OBJ_TREE;\n+\t}\n }\n-- \n1.5.5.1\n"},{"id":"78991","messageId":"1212797457-31081-1-git-send-email-marek.zawirski@gmail.com","threadId":"13767","inReplyTo":"200806061524.15823.robin.rosenberg@dewire.com","subject":"[JGIT PATCH v2 09/12] Add size() method to ObjectIdSubclassMap","fromName":"Marek Zawirski","fromEmail":"marek.zawirski@gmail.com","sentAt":"2008-06-07T00:10:57Z","receivedAt":"2008-06-07T00:10:57Z","isPatch":true,"sender":{"key":"marek.zawirski@gmail.com","avatar":null},"body":"Method is based on already existing field.\n\nSigned-off-by: Marek Zawirski <marek.zawirski@gmail.com>\n---\n .../org/spearce/jgit/lib/ObjectIdSubclassMap.java  |    7 +++++++\n 1 files changed, 7 insertions(+), 0 deletions(-)\n\ndiff --git a/org.spearce.jgit/src/org/spearce/jgit/lib/ObjectIdSubclassMap.java b/org.spearce.jgit/src/org/spearce/jgit/lib/ObjectIdSubclassMap.java\nindex 79ef5b6..2a13204 100644\n--- a/org.spearce.jgit/src/org/spearce/jgit/lib/ObjectIdSubclassMap.java\n+++ b/org.spearce.jgit/src/org/spearce/jgit/lib/ObjectIdSubclassMap.java\n@@ -107,6 +107,13 @@ public class ObjectIdSubclassMap<V extends ObjectId> {\n \t\tsize++;\n \t}\n \n+\t/**\n+\t * @return number of objects in map\n+\t */\n+\tpublic int size() {\n+\t\treturn size;\n+\t}\n+\n \tprivate final int index(final AnyObjectId id) {\n \t\treturn (id.w1 >>> 1) % obj_hash.length;\n \t}\n-- \n1.5.5.1\n"},{"id":"79021","messageId":"20080607071613.GA12896@spearce.org","threadId":"13767","inReplyTo":"4849D115.5030602@gmail.com","subject":"Re: [JGIT PATCH 00/12] Extensions in core needed by PackWriter","fromName":"Shawn O. Pearce","fromEmail":"spearce@spearce.org","sentAt":"2008-06-07T07:16:13Z","receivedAt":"2008-06-07T07:16:13Z","isPatch":true,"sender":{"key":"spearce@spearce.org","avatar":"https://avatars.githubusercontent.com/u/34844?v=4"},"body":"Marek Zawirski <marek.zawirski@gmail.com> wrote:\n> On Fri, Jun 6, 2008 at 3:24 PM, Robin Rosenberg \n> > \n> > I'm somewhat reluctant to reformatting patches though. \n> \n> Well, so should I remove these reformatting patches from series? (oouch!)\n> \n> Actually, when I ran into formatting problem, Shawn suggested that I may \n> format PackFile as he was also touching this file - I much appreciated \n> this idea. PackIndex* formatting is however my own invention.\n\nI'm in favor of reformatting, at least these two classes.\nEditing them without the formatting fixes is insanely annoying.\nBut bulk reformatting all 118 files at once is nuts.\n\nI'd rather do it one file at a time, when we touch it, and especially\nif it is fairly stable and isn't being actively hacked on by others.\n\n> Isn't it somewhat annoying that formatting is inconsistent through\n> project (especially line width in some places)? And that I almost have\n> to block formatting shortcut to stop my pre-save/pre-commit habit?;)\n\nYes.  Yes it is.\n\n-- \nShawn.\n"},{"id":"79389","messageId":"200806102309.52196.robin.rosenberg@dewire.com","threadId":"13767","inReplyTo":"1212441883-12990-1-git-send-email-marek.zawirski@gmail.com","subject":"Re: [JGIT PATCH 00/12] Extensions in core needed by PackWriter","fromName":"Robin Rosenberg","fromEmail":"robin.rosenberg@dewire.com","sentAt":"2008-06-10T21:09:51Z","receivedAt":"2008-06-10T21:09:51Z","isPatch":true,"sender":{"key":"robin.rosenberg@dewire.com","avatar":"https://avatars.githubusercontent.com/u/46357?v=4"},"body":"måndagen den 2 juni 2008 23.24.31 skrev Marek Zawirski:\n> Hello,\n> \n> Here is my first GSoC series - some work from the last week.\n> It's actually not a PackWriter, but some changes in existing jgit core\n> related to PackWriting. Some of these added methods/refactors are not yet\n> used within this series, but are used in my dirty branch in PackWriter\n> which is under-development, even somewhat usable.\n> \n> Series start with formatting stuff, as some old files were not\n> appropriatelly formatted.\n> \n> This series is also available at my corechanges branch:\n> http://repo.or.cz/w/egit/zawir.git?a=shortlog;h=refs/heads/corechanges\n> It's based on Shawn's bsd branch, with new BSD-style license, but I can\n> rebase if really needed.\n> \n> If you want to track some PackWriter (itself) development you may want to\n> have a look at my dirty branch:\n> http://repo.or.cz/w/egit/zawir.git?a=shortlog;h=refs/heads/dirty\n> \n> That's all. Although Shawn already reviewed some old version of this patches,\n> I'm still interested in your comments.\n\nThis patchset is in master (merged)\n\nThanks.\n\n-- robin\n"}]}