Merge branch 'stable-4.1'
* stable-4.1: Prepare 4.1.2-SNAPSHOT builds JGit v4.1.1.201511131810-r Fallback exactRef: Do not ignore symrefs to unborn branch RefDirectory.exactRef: Do not ignore symrefs to unborn branch Change-Id: I66afb303f355aad8a7eaa7a6dff06de70ae9c490 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
This commit is contained in:
commit
070bf8d15f
|
@ -1024,6 +1024,25 @@ public void testGetRef_EmptyDatabase() throws IOException {
|
|||
assertNull(refdir.getRef("v1.0"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testExactRef_EmptyDatabase() throws IOException {
|
||||
Ref r;
|
||||
|
||||
r = refdir.exactRef(HEAD);
|
||||
assertTrue(r.isSymbolic());
|
||||
assertSame(LOOSE, r.getStorage());
|
||||
assertEquals("refs/heads/master", r.getTarget().getName());
|
||||
assertSame(NEW, r.getTarget().getStorage());
|
||||
assertNull(r.getTarget().getObjectId());
|
||||
|
||||
assertNull(refdir.exactRef("refs/heads/master"));
|
||||
assertNull(refdir.exactRef("refs/tags/v1.0"));
|
||||
assertNull(refdir.exactRef("FETCH_HEAD"));
|
||||
assertNull(refdir.exactRef("NOT.A.REF.NAME"));
|
||||
assertNull(refdir.exactRef("master"));
|
||||
assertNull(refdir.exactRef("v1.0"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetRef_FetchHead() throws IOException {
|
||||
// This is an odd special case where we need to make sure we read
|
||||
|
|
|
@ -261,6 +261,30 @@ private RefList<LooseRef> getLooseRefs() {
|
|||
return loose;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Ref exactRef(String name) throws IOException {
|
||||
RefList<Ref> packed = getPackedRefs();
|
||||
Ref ref;
|
||||
try {
|
||||
ref = readRef(name, packed);
|
||||
if (ref != null) {
|
||||
ref = resolve(ref, 0, null, null, packed);
|
||||
}
|
||||
} catch (IOException e) {
|
||||
if (name.contains("/") //$NON-NLS-1$
|
||||
|| !(e.getCause() instanceof InvalidObjectIdException)) {
|
||||
throw e;
|
||||
}
|
||||
|
||||
// While looking for a ref outside of refs/ (e.g., 'config'), we
|
||||
// found a non-ref file (e.g., a config file) instead. Treat this
|
||||
// as a ref-not-found condition.
|
||||
ref = null;
|
||||
}
|
||||
fireRefsChanged();
|
||||
return ref;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Ref getRef(final String needle) throws IOException {
|
||||
final RefList<Ref> packed = getPackedRefs();
|
||||
|
|
|
@ -239,20 +239,11 @@ public boolean performsAtomicTransactions() {
|
|||
* @since 4.1
|
||||
*/
|
||||
public Ref exactRef(String name) throws IOException {
|
||||
int slash = name.lastIndexOf('/');
|
||||
String prefix = name.substring(0, slash + 1);
|
||||
String rest = name.substring(slash + 1);
|
||||
Ref result = getRefs(prefix).get(rest);
|
||||
if (result != null || slash != -1) {
|
||||
return result;
|
||||
Ref ref = getRef(name);
|
||||
if (ref == null || !name.equals(ref.getName())) {
|
||||
return null;
|
||||
}
|
||||
|
||||
for (Ref ref : getAdditionalRefs()) {
|
||||
if (name.equals(ref.getName())) {
|
||||
return ref;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
return ref;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in New Issue