diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/RefTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/RefTest.java index a42027b58..ac142ed32 100644 --- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/RefTest.java +++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/RefTest.java @@ -333,4 +333,17 @@ public class RefTest extends SampleDataRepositoryTestCase { assertEquals(1, refs.size()); checkContainsRef(refs, db.exactRef("refs/heads/prefix/a")); } + + @Test + public void testGetRefsByPrefixes() throws IOException { + List refs = db.getRefDatabase().getRefsByPrefix(); + assertEquals(0, refs.size()); + + refs = db.getRefDatabase().getRefsByPrefix("refs/heads/p", + "refs/tags/A"); + assertEquals(3, refs.size()); + checkContainsRef(refs, db.exactRef("refs/heads/pa")); + checkContainsRef(refs, db.exactRef("refs/heads/prefix/a")); + checkContainsRef(refs, db.exactRef("refs/tags/A")); + } } diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/lib/RefDatabase.java b/org.eclipse.jgit/src/org/eclipse/jgit/lib/RefDatabase.java index 3170787dd..ac26b5136 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/lib/RefDatabase.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/lib/RefDatabase.java @@ -414,6 +414,31 @@ public abstract class RefDatabase { return Collections.unmodifiableList(result); } + /** + * Returns refs whose names start with one of the given prefixes. + *

+ * The default implementation uses {@link #getRefsByPrefix(String)}. + * Implementors of {@link RefDatabase} should override this method directly + * if a better implementation is possible. + * + * @param prefixes + * strings that names of refs should start with. + * @return immutable list of refs whose names start with one of + * {@code prefixes}. Refs can be unsorted and may contain + * duplicates if the prefixes overlap. + * @throws java.io.IOException + * the reference space cannot be accessed. + * @since 5.1 + */ + @NonNull + public List getRefsByPrefix(String... prefixes) throws IOException { + List result = new ArrayList<>(); + for (String prefix : prefixes) { + result.addAll(getRefsByPrefix(prefix)); + } + return Collections.unmodifiableList(result); + } + /** * Check if any refs exist in the ref database. *