]> source.dussan.org Git - jgit.git/commitdiff
Compare repository format version as parsed long 17/5217/5
authorKevin Sawicki <kevin@github.com>
Mon, 12 Mar 2012 17:00:52 +0000 (10:00 -0700)
committerChris Aniszczyk <zx@twitter.com>
Wed, 21 Mar 2012 20:59:39 +0000 (13:59 -0700)
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>
org.eclipse.jgit.test/tst/org/eclipse/jgit/storage/file/FileRepositoryBuilderTest.java
org.eclipse.jgit.test/tst/org/eclipse/jgit/storage/file/T0003_BasicTest.java
org.eclipse.jgit/src/org/eclipse/jgit/storage/file/FileRepository.java

index 80e0f1a920ea487e3fec5edccec50c0b63f7f856..aed48aa5fb3b9c282dd5fb3210fe79469bb06520 100644 (file)
 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());
+               }
+       }
 }
index 37d28d2abd4223fef7b42a745c0bcf02cc16ff66..2a9bb7a56eb134d0a14737768d399ad734b1c999 100644 (file)
@@ -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());
                }
        }
 
index f1a8367ee46ac3cf57d82029dbe878809e5cc109..fa87b9f26adac95c560e108c76dc29eb16264980 100644 (file)
@@ -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())