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>
This commit is contained in:
parent
fd0c468b7a
commit
7aeea3b27c
|
@ -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 void testShouldAutomagicallyDetectGitDirectory() throws Exception {
|
|||
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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -370,9 +370,8 @@ public void test008_FailOnWrongVersion() throws IOException {
|
|||
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());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -181,14 +181,13 @@ public void onConfigChanged(ConfigChangedEvent event) {
|
|||
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…
Reference in New Issue