summaryrefslogtreecommitdiffstats
path: root/org.eclipse.jgit.test
diff options
context:
space:
mode:
authorJonathan Nieder <jrn@google.com>2015-06-05 16:08:55 -0700
committerJonathan Nieder <jrn@google.com>2015-06-05 16:08:55 -0700
commit48b67012d610f9151b425a27a4287eeedfbff0a4 (patch)
treed4b680a3f0462046975a5506597c4db0a662f2d9 /org.eclipse.jgit.test
parenta04d1ad2f1f0f0bbb852dbddf47dd8057efa3457 (diff)
downloadjgit-48b67012d610f9151b425a27a4287eeedfbff0a4.tar.gz
jgit-48b67012d610f9151b425a27a4287eeedfbff0a4.zip
Allow lookup of multiple exact refs in one shot
exactRef(ref1, ref2, ref3) requests multiple specific refs in a single lookup, which may be faster in some backends than looking them up one by one. firstExactRef generalizes getRef by finding the first existing ref from the list of refs named. Its main purpose is for the default implementation of getRef (finding the first existing ref in a search path). Hopefully it can be useful for other operations that look for refs in a search path (e.g., git log --notes=<name>), too. Change-Id: I5c6fcf1d3920f6968b8b97f3d4c3a267258c4b86 Signed-off-by: Jonathan Nieder <jrn@google.com>
Diffstat (limited to 'org.eclipse.jgit.test')
-rw-r--r--org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/file/RefDirectoryTest.java42
1 files changed, 42 insertions, 0 deletions
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/file/RefDirectoryTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/file/RefDirectoryTest.java
index 292e50447e..0991598920 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/file/RefDirectoryTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/file/RefDirectoryTest.java
@@ -359,6 +359,33 @@ public class RefDirectoryTest extends LocalDiskRepositoryTestCase {
}
@Test
+ public void testFirstExactRef_IgnoresGarbageRef() throws IOException {
+ writeLooseRef("refs/heads/A", A);
+ write(new File(diskRepo.getDirectory(), "refs/heads/bad"), "FAIL\n");
+
+ Ref a = refdir.firstExactRef("refs/heads/bad", "refs/heads/A");
+ assertEquals("refs/heads/A", a.getName());
+ assertEquals(A, a.getObjectId());
+ }
+
+ @Test
+ public void testExactRef_IgnoresGarbageRef() throws IOException {
+ writeLooseRef("refs/heads/A", A);
+ write(new File(diskRepo.getDirectory(), "refs/heads/bad"), "FAIL\n");
+
+ Map<String, Ref> refs =
+ refdir.exactRef("refs/heads/bad", "refs/heads/A");
+
+ assertNull("no refs/heads/bad", refs.get("refs/heads/bad"));
+
+ Ref a = refs.get("refs/heads/A");
+ assertEquals("refs/heads/A", a.getName());
+ assertEquals(A, a.getObjectId());
+
+ assertEquals(1, refs.size());
+ }
+
+ @Test
public void testGetRefs_InvalidName() throws IOException {
writeLooseRef("refs/heads/A", A);
@@ -464,6 +491,21 @@ public class RefDirectoryTest extends LocalDiskRepositoryTestCase {
}
@Test
+ public void testFirstExactRef_Mixed() throws IOException {
+ writeLooseRef("refs/heads/A", A);
+ writePackedRef("refs/tags/v1.0", v1_0);
+
+ Ref a = refdir.firstExactRef("refs/heads/A", "refs/tags/v1.0");
+ Ref one = refdir.firstExactRef("refs/tags/v1.0", "refs/heads/A");
+
+ assertEquals("refs/heads/A", a.getName());
+ assertEquals("refs/tags/v1.0", one.getName());
+
+ assertEquals(A, a.getObjectId());
+ assertEquals(v1_0, one.getObjectId());
+ }
+
+ @Test
public void testGetRefs_TagsOnly_AllLoose() throws IOException {
Map<String, Ref> tags;
Ref a;