Browse Source

Compare repository format version as parsed long

This allows repositoryies with a missing repositoryformatversion
config value to be successfully opened but still throws exceptions
when the value is a non-long or greater than zero.

git-core attempts to parse this config value as a long as well
and defaults to 0 if the value is missing.

Bug: 368697
Change-Id: I4a93117afca37e591e8e0ab4d2f2eef4273f0cc9
Signed-off-by: Chris Aniszczyk <zx@twitter.com>
stable-2.0
Kevin Sawicki 13 years ago committed by Chris Aniszczyk
parent
commit
7aeea3b27c
  1. 47
      org.eclipse.jgit.test/tst/org/eclipse/jgit/storage/file/FileRepositoryBuilderTest.java
  2. 5
      org.eclipse.jgit.test/tst/org/eclipse/jgit/storage/file/T0003_BasicTest.java
  3. 9
      org.eclipse.jgit/src/org/eclipse/jgit/storage/file/FileRepository.java

47
org.eclipse.jgit.test/tst/org/eclipse/jgit/storage/file/FileRepositoryBuilderTest.java

@ -44,10 +44,14 @@
package org.eclipse.jgit.storage.file;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.fail;
import java.io.File;
import java.io.IOException;
import org.eclipse.jgit.junit.LocalDiskRepositoryTestCase;
import org.eclipse.jgit.lib.ConfigConstants;
import org.eclipse.jgit.util.FileUtils;
import org.junit.Test;
@ -61,4 +65,47 @@ public class FileRepositoryBuilderTest extends LocalDiskRepositoryTestCase {
assertEquals(r.getDirectory(), new FileRepositoryBuilder()
.findGitDir(d).getGitDir());
}
@Test
public void emptyRepositoryFormatVersion() throws Exception {
FileRepository r = createWorkRepository();
FileBasedConfig config = r.getConfig();
config.setString(ConfigConstants.CONFIG_CORE_SECTION, null,
ConfigConstants.CONFIG_KEY_REPO_FORMAT_VERSION, "");
config.save();
new FileRepository(r.getDirectory());
}
@Test
public void invalidRepositoryFormatVersion() throws Exception {
FileRepository r = createWorkRepository();
FileBasedConfig config = r.getConfig();
config.setString(ConfigConstants.CONFIG_CORE_SECTION, null,
ConfigConstants.CONFIG_KEY_REPO_FORMAT_VERSION, "notanumber");
config.save();
try {
new FileRepository(r.getDirectory());
fail("IllegalArgumentException not thrown");
} catch (IllegalArgumentException e) {
assertNotNull(e.getMessage());
}
}
@Test
public void unknownRepositoryFormatVersion() throws Exception {
FileRepository r = createWorkRepository();
FileBasedConfig config = r.getConfig();
config.setLong(ConfigConstants.CONFIG_CORE_SECTION, null,
ConfigConstants.CONFIG_KEY_REPO_FORMAT_VERSION, 1);
config.save();
try {
new FileRepository(r.getDirectory());
fail("IOException not thrown");
} catch (IOException e) {
assertNotNull(e.getMessage());
}
}
}

5
org.eclipse.jgit.test/tst/org/eclipse/jgit/storage/file/T0003_BasicTest.java

@ -370,9 +370,8 @@ public class T0003_BasicTest extends SampleDataRepositoryTestCase {
try {
new FileRepository(db.getDirectory());
fail("incorrectly opened a bad repository");
} catch (IOException ioe) {
assertTrue(ioe.getMessage().indexOf("format") > 0);
assertTrue(ioe.getMessage().indexOf(badvers) > 0);
} catch (IllegalArgumentException ioe) {
assertNotNull(ioe.getMessage());
}
}

9
org.eclipse.jgit/src/org/eclipse/jgit/storage/file/FileRepository.java

@ -181,14 +181,13 @@ public class FileRepository extends Repository {
getFS());
if (objectDatabase.exists()) {
final String repositoryFormatVersion = getConfig().getString(
final long repositoryFormatVersion = getConfig().getLong(
ConfigConstants.CONFIG_CORE_SECTION, null,
ConfigConstants.CONFIG_KEY_REPO_FORMAT_VERSION);
if (!"0".equals(repositoryFormatVersion)) {
ConfigConstants.CONFIG_KEY_REPO_FORMAT_VERSION, 0);
if (repositoryFormatVersion > 0)
throw new IOException(MessageFormat.format(
JGitText.get().unknownRepositoryFormat2,
repositoryFormatVersion));
}
Long.valueOf(repositoryFormatVersion)));
}
if (!isBare())

Loading…
Cancel
Save