assertEquals(A, c.getObjectId());
}
+ @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);
assertEquals(B, b.getObjectId());
}
+ @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;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
+import java.util.HashMap;
import java.util.List;
import java.util.Map;
return null;
}
+ /**
+ * Read the specified references.
+ * <p>
+ * This method expects a list of unshortened reference names and returns
+ * a map from reference names to refs. Any named references that do not
+ * exist will not be included in the returned map.
+ *
+ * @param refs
+ * the unabbreviated names of references to look up.
+ * @return modifiable map describing any refs that exist among the ref
+ * ref names supplied. The map can be an unsorted map.
+ * @throws IOException
+ * the reference space cannot be accessed.
+ * @since 4.1
+ */
+ public Map<String, Ref> exactRef(String... refs) throws IOException {
+ Map<String, Ref> result = new HashMap<>(refs.length);
+ for (String name : refs) {
+ Ref ref = exactRef(name);
+ if (ref != null) {
+ result.put(name, ref);
+ }
+ }
+ return result;
+ }
+
+ /**
+ * Find the first named reference.
+ * <p>
+ * This method expects a list of unshortened reference names and returns
+ * the first that exists.
+ *
+ * @param refs
+ * the unabbreviated names of references to look up.
+ * @return the first named reference that exists (if any); else {@code null}.
+ * @throws IOException
+ * the reference space cannot be accessed.
+ * @since 4.1
+ */
+ public Ref firstExactRef(String... refs) throws IOException {
+ for (String name : refs) {
+ Ref ref = exactRef(name);
+ if (ref != null) {
+ return ref;
+ }
+ }
+ return null;
+ }
+
/**
* Get a section of the reference namespace.
*