Browse Source

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>
stable-4.3
Matthias Sohn 9 years ago
parent
commit
070bf8d15f
  1. 19
      org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/file/RefDirectoryTest.java
  2. 24
      org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/RefDirectory.java
  3. 15
      org.eclipse.jgit/src/org/eclipse/jgit/lib/RefDatabase.java

19
org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/file/RefDirectoryTest.java

@ -1024,6 +1024,25 @@ public class RefDirectoryTest extends LocalDiskRepositoryTestCase {
assertNull(refdir.getRef("v1.0")); 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 @Test
public void testGetRef_FetchHead() throws IOException { public void testGetRef_FetchHead() throws IOException {
// This is an odd special case where we need to make sure we read // This is an odd special case where we need to make sure we read

24
org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/RefDirectory.java

@ -261,6 +261,30 @@ public class RefDirectory extends RefDatabase {
return loose; 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 @Override
public Ref getRef(final String needle) throws IOException { public Ref getRef(final String needle) throws IOException {
final RefList<Ref> packed = getPackedRefs(); final RefList<Ref> packed = getPackedRefs();

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

@ -239,21 +239,12 @@ public abstract class RefDatabase {
* @since 4.1 * @since 4.1
*/ */
public Ref exactRef(String name) throws IOException { public Ref exactRef(String name) throws IOException {
int slash = name.lastIndexOf('/'); Ref ref = getRef(name);
String prefix = name.substring(0, slash + 1); if (ref == null || !name.equals(ref.getName())) {
String rest = name.substring(slash + 1); return null;
Ref result = getRefs(prefix).get(rest);
if (result != null || slash != -1) {
return result;
} }
for (Ref ref : getAdditionalRefs()) {
if (name.equals(ref.getName())) {
return ref; return ref;
} }
}
return null;
}
/** /**
* Read the specified references. * Read the specified references.

Loading…
Cancel
Save