summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIvan Frade <ifrade@google.com>2024-08-29 15:13:47 -0700
committerIvan Frade <ifrade@google.com>2024-08-29 15:36:45 -0700
commitcef6e8a9affcdea0b2f628d1a5d94365ac528e2b (patch)
tree66cafebe8c080c3ee55b12743d0d150ddde3395b
parentc318c8a435f584ac00d1cb24292da0f8a956707d (diff)
downloadjgit-cef6e8a9affcdea0b2f628d1a5d94365ac528e2b.tar.gz
jgit-cef6e8a9affcdea0b2f628d1a5d94365ac528e2b.zip
ObjectId: Add method to read an ObjectId from a ByteBuffer
Some storages return data in a convenient ByteBuffer wrapper, but there is no straigh-forward method to read ObjectIds from it. Add ObjectId#fromRaw(ByteBuffer) to read object ids from byte buffers. Change-Id: Ia3b244005e4d9a613294f5ad9dab3b8e7bc3d7df
-rw-r--r--org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/ObjectIdTest.java13
-rw-r--r--org.eclipse.jgit/src/org/eclipse/jgit/lib/ObjectId.java17
2 files changed, 30 insertions, 0 deletions
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/ObjectIdTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/ObjectIdTest.java
index 21032c341f..d6f0b038d2 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/ObjectIdTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/ObjectIdTest.java
@@ -16,6 +16,7 @@ import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
+import java.nio.ByteBuffer;
import java.util.Locale;
import org.eclipse.jgit.errors.InvalidObjectIdException;
@@ -153,4 +154,16 @@ public class ObjectIdTest {
assertEquals(ObjectId.fromRaw(exp).name(), id.name());
}
}
+
+ @Test
+ public void test_toFromByteBuffer_raw() {
+ ObjectId oid = ObjectId
+ .fromString("ff00eedd003713bb1bb26b808ec9312548e73946");
+ ByteBuffer anObject = ByteBuffer.allocate(Constants.OBJECT_ID_LENGTH);
+ oid.copyRawTo(anObject);
+ anObject.flip();
+
+ ObjectId actual = ObjectId.fromRaw(anObject);
+ assertEquals(oid.name(), actual.name());
+ }
}
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/lib/ObjectId.java b/org.eclipse.jgit/src/org/eclipse/jgit/lib/ObjectId.java
index 1c31263e33..1b455b974d 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/lib/ObjectId.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/lib/ObjectId.java
@@ -15,6 +15,7 @@ import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
+import java.nio.ByteBuffer;
import org.eclipse.jgit.annotations.Nullable;
import org.eclipse.jgit.errors.InvalidObjectIdException;
@@ -152,6 +153,22 @@ public class ObjectId extends AnyObjectId implements Serializable {
}
/**
+ * Convert an ObjectId from raw binary representation
+ *
+ * @param bb
+ * a bytebuffer with the objectid encoded as 5 consecutive ints.
+ * This is the reverse of {@link ObjectId#copyRawTo(ByteBuffer)}
+ *
+ * @return the converted object id.
+ *
+ * @since 7.0
+ */
+ public static final ObjectId fromRaw(ByteBuffer bb) {
+ return new ObjectId(bb.getInt(), bb.getInt(), bb.getInt(), bb.getInt(),
+ bb.getInt());
+ }
+
+ /**
* Convert an ObjectId from raw binary representation.
*
* @param is