branch(String name) throws IOException;
+
}
diff --git a/src/main/java/net/kemitix/gitdb/GitDBBranch.java b/src/main/java/net/kemitix/gitdb/GitDBBranch.java
index deeb3b4..9e53123 100644
--- a/src/main/java/net/kemitix/gitdb/GitDBBranch.java
+++ b/src/main/java/net/kemitix/gitdb/GitDBBranch.java
@@ -21,6 +21,8 @@
package net.kemitix.gitdb;
+import com.github.zafarkhaja.semver.Version;
+
import java.io.IOException;
import java.util.Optional;
@@ -58,4 +60,14 @@ public interface GitDBBranch {
* @throws IOException if there was an error removing the key/value
*/
GitDBBranch remove(String key) throws IOException;
+
+ /**
+ * Returns the GitDB format for the current branch.
+ *
+ * Different branches can have different versions.
+ *
+ * @return the format as per semantic versioning, i.e. "x.y.z" within an Optional
+ * @throws IOException error reading version
+ */
+ Optional getFormatVersion() throws IOException;
}
diff --git a/src/main/java/net/kemitix/gitdb/impl/GitDBBranchImpl.java b/src/main/java/net/kemitix/gitdb/impl/GitDBBranchImpl.java
index 65a828b..2f88ab1 100644
--- a/src/main/java/net/kemitix/gitdb/impl/GitDBBranchImpl.java
+++ b/src/main/java/net/kemitix/gitdb/impl/GitDBBranchImpl.java
@@ -21,6 +21,7 @@
package net.kemitix.gitdb.impl;
+import com.github.zafarkhaja.semver.Version;
import lombok.AccessLevel;
import lombok.RequiredArgsConstructor;
import net.kemitix.gitdb.GitDBBranch;
@@ -99,6 +100,12 @@ class GitDBBranchImpl implements GitDBBranch {
return this;
}
+ @Override
+ public Optional getFormatVersion() throws IOException {
+ return gitDBRepo.readValue(branchRef, "GitDB.Version")
+ .map(Version::valueOf);
+ }
+
private String commitMessageForAdd(final String key, final String value) {
return String.format("Add key [%s] = [%s]", key, value);
}
diff --git a/src/main/java/net/kemitix/gitdb/impl/InitGitDBRepo.java b/src/main/java/net/kemitix/gitdb/impl/InitGitDBRepo.java
index 149a630..ee65fbd 100644
--- a/src/main/java/net/kemitix/gitdb/impl/InitGitDBRepo.java
+++ b/src/main/java/net/kemitix/gitdb/impl/InitGitDBRepo.java
@@ -21,6 +21,7 @@
package net.kemitix.gitdb.impl;
+import net.kemitix.gitdb.GitDB;
import org.eclipse.jgit.lib.ObjectId;
import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.lib.RepositoryCache;
@@ -45,7 +46,7 @@ class InitGitDBRepo {
private static final String INIT_USER = "GitDB";
private static final String INIT_EMAIL = "pcampbell@kemitix.net";
private static final String MASTER = "master";
- private static final String IS_GIT_DB = "isGitDB";
+ private static final String GIT_DB_VERSION = "GitDB.Version";
private static final String REFS_HEADS_FORMAT = "refs/heads/%s";
/**
@@ -65,8 +66,9 @@ class InitGitDBRepo {
private void createInitialBranchOnMaster(final Repository repository) throws IOException {
final GitDBRepo repo = new GitDBRepo(repository);
- final ObjectId objectId = repo.insertBlob(new byte[0]);
- final ObjectId treeId = repo.insertNewTree(IS_GIT_DB, objectId);
+ final ObjectId objectId =
+ repo.insertBlob(GitDB.VERSION.toString().getBytes(StandardCharsets.UTF_8));
+ final ObjectId treeId = repo.insertNewTree(GIT_DB_VERSION, objectId);
final ObjectId commitId = repo.initialCommit(treeId, INIT_MESSAGE, INIT_USER, INIT_EMAIL);
createBranch(repository, commitId, MASTER);
}
diff --git a/src/test/java/net/kemitix/gitdb/test/GitDBTest.java b/src/test/java/net/kemitix/gitdb/test/GitDBTest.java
index d72517b..dec963d 100644
--- a/src/test/java/net/kemitix/gitdb/test/GitDBTest.java
+++ b/src/test/java/net/kemitix/gitdb/test/GitDBTest.java
@@ -1,5 +1,6 @@
package net.kemitix.gitdb.test;
+import com.github.zafarkhaja.semver.Version;
import net.kemitix.gitdb.GitDB;
import net.kemitix.gitdb.GitDBBranch;
import net.kemitix.gitdb.InvalidRepositoryException;
@@ -213,6 +214,18 @@ class GitDBTest implements WithAssertions {
return branchOptional.get();
}
+ // When getting the format version it matches expected
+ @Test
+ void getVersionFormat_thenFormatIsSet() throws IOException {
+ //given
+ final GitDBBranch gitDBBranch = gitDBBranch();
+ //when
+ final Optional formatVersion = gitDBBranch.getFormatVersion();
+ //then
+ assertThat(formatVersion).contains(GitDB.VERSION);
+ assertThat(formatVersion.get()).isNotSameAs(GitDB.VERSION);
+ }
+
// When putting a key/value pair then a GitDbBranch is returned
@Test
void putValue_thenReturnUpdatedGitDBBranch() throws IOException {