Browse Source

Query references by multiple prefixes

Support multiple prefixes when querying references to allow
implementor to minimize number of RPC calls.

Change-Id: I5f822fd7eaf9756b44750080d3056de138b64f4a
Signed-off-by: Minh Thai <mthai@google.com>
stable-5.2
Minh Thai 6 years ago
parent
commit
a51e686e47
  1. 13
      org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/RefTest.java
  2. 25
      org.eclipse.jgit/src/org/eclipse/jgit/lib/RefDatabase.java

13
org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/RefTest.java

@ -333,4 +333,17 @@ public class RefTest extends SampleDataRepositoryTestCase {
assertEquals(1, refs.size()); assertEquals(1, refs.size());
checkContainsRef(refs, db.exactRef("refs/heads/prefix/a")); checkContainsRef(refs, db.exactRef("refs/heads/prefix/a"));
} }
@Test
public void testGetRefsByPrefixes() throws IOException {
List<Ref> 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"));
}
} }

25
org.eclipse.jgit/src/org/eclipse/jgit/lib/RefDatabase.java

@ -414,6 +414,31 @@ public abstract class RefDatabase {
return Collections.unmodifiableList(result); return Collections.unmodifiableList(result);
} }
/**
* Returns refs whose names start with one of the given prefixes.
* <p>
* 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<Ref> getRefsByPrefix(String... prefixes) throws IOException {
List<Ref> result = new ArrayList<>();
for (String prefix : prefixes) {
result.addAll(getRefsByPrefix(prefix));
}
return Collections.unmodifiableList(result);
}
/** /**
* Check if any refs exist in the ref database. * Check if any refs exist in the ref database.
* <p> * <p>

Loading…
Cancel
Save