Browse Source

RepositoryCache: don't require HEAD in git repositories

Reftable-enabled repositories don't have a file called HEAD. Check for
reftable/ instead.

This fixes repository creation on reftable in Gerrit.

Signed-off-by: Han-Wen Nienhuys <hanwen@google.com>
Change-Id: I778c2be01d96aaf135affae4b457b5fe5b483bee
stable-5.6
Han-Wen Nienhuys 5 years ago committed by Matthias Sohn
parent
commit
9cb8e2f310
  1. 6
      org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/file/FileReftableTest.java
  2. 3
      org.eclipse.jgit/src/org/eclipse/jgit/lib/RepositoryCache.java

6
org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/file/FileReftableTest.java

@ -73,6 +73,7 @@ import org.eclipse.jgit.lib.RefUpdate;
import org.eclipse.jgit.lib.RefUpdate.Result; import org.eclipse.jgit.lib.RefUpdate.Result;
import org.eclipse.jgit.lib.ReflogEntry; import org.eclipse.jgit.lib.ReflogEntry;
import org.eclipse.jgit.lib.ReflogReader; import org.eclipse.jgit.lib.ReflogReader;
import org.eclipse.jgit.lib.RepositoryCache;
import org.eclipse.jgit.revwalk.RevWalk; import org.eclipse.jgit.revwalk.RevWalk;
import org.eclipse.jgit.test.resources.SampleDataRepositoryTestCase; import org.eclipse.jgit.test.resources.SampleDataRepositoryTestCase;
import org.eclipse.jgit.transport.ReceiveCommand; import org.eclipse.jgit.transport.ReceiveCommand;
@ -507,6 +508,11 @@ public class FileReftableTest extends SampleDataRepositoryTestCase {
} }
} }
@Test
public void isGitRepository() {
assertTrue(RepositoryCache.FileKey.isGitRepository(db.getDirectory(), db.getFS()));
}
@Test @Test
public void testRenameDestExists() throws IOException { public void testRenameDestExists() throws IOException {
ObjectId rb = db.resolve("refs/heads/b"); ObjectId rb = db.resolve("refs/heads/b");

3
org.eclipse.jgit/src/org/eclipse/jgit/lib/RepositoryCache.java

@ -476,7 +476,8 @@ public class RepositoryCache {
public static boolean isGitRepository(File dir, FS fs) { public static boolean isGitRepository(File dir, FS fs) {
return fs.resolve(dir, Constants.OBJECTS).exists() return fs.resolve(dir, Constants.OBJECTS).exists()
&& fs.resolve(dir, "refs").exists() //$NON-NLS-1$ && fs.resolve(dir, "refs").exists() //$NON-NLS-1$
&& isValidHead(new File(dir, Constants.HEAD)); && (fs.resolve(dir, Constants.REFTABLE).exists()
|| isValidHead(new File(dir, Constants.HEAD)));
} }
private static boolean isValidHead(File head) { private static boolean isValidHead(File head) {

Loading…
Cancel
Save