When starting a named transaction then GitDbTransaction is returned
This commit is contained in:
parent
07bdac4b29
commit
57e39d71ad
6 changed files with 178 additions and 1 deletions
|
@ -70,4 +70,26 @@ public interface GitDBBranch {
|
||||||
* @throws IOException error reading version
|
* @throws IOException error reading version
|
||||||
*/
|
*/
|
||||||
Optional<Version> getFormatVersion() throws IOException;
|
Optional<Version> getFormatVersion() throws IOException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Begins a new anonymous transaction.
|
||||||
|
*
|
||||||
|
* @return a new Transaction
|
||||||
|
*/
|
||||||
|
GitDBTransaction transaction() throws IOException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Begins a new named transaction.
|
||||||
|
*
|
||||||
|
* @param name the transaction name
|
||||||
|
* @return a new Transaction
|
||||||
|
*/
|
||||||
|
GitDBTransaction transaction(String name) throws IOException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the name of the branch.
|
||||||
|
*
|
||||||
|
* @return the branch name
|
||||||
|
*/
|
||||||
|
String name();
|
||||||
}
|
}
|
||||||
|
|
37
src/main/java/net/kemitix/gitdb/GitDBTransaction.java
Normal file
37
src/main/java/net/kemitix/gitdb/GitDBTransaction.java
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
/*
|
||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (c) 2018 Paul Campbell
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
||||||
|
and associated documentation files (the "Software"), to deal in the Software without restriction,
|
||||||
|
including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||||
|
and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,
|
||||||
|
subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all copies
|
||||||
|
or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
||||||
|
INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
||||||
|
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package net.kemitix.gitdb;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents a transaction (a git branch).
|
||||||
|
*
|
||||||
|
* @author Paul Campbell (pcampbell@kemitix.net)
|
||||||
|
*/
|
||||||
|
public interface GitDBTransaction extends GitDBBranch {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The name of the transaction.
|
||||||
|
*
|
||||||
|
* @return the transaction name
|
||||||
|
*/
|
||||||
|
String name();
|
||||||
|
}
|
|
@ -25,12 +25,14 @@ import com.github.zafarkhaja.semver.Version;
|
||||||
import lombok.AccessLevel;
|
import lombok.AccessLevel;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import net.kemitix.gitdb.GitDBBranch;
|
import net.kemitix.gitdb.GitDBBranch;
|
||||||
|
import net.kemitix.gitdb.GitDBTransaction;
|
||||||
import org.eclipse.jgit.lib.ObjectId;
|
import org.eclipse.jgit.lib.ObjectId;
|
||||||
import org.eclipse.jgit.lib.Ref;
|
import org.eclipse.jgit.lib.Ref;
|
||||||
import org.eclipse.jgit.lib.Repository;
|
import org.eclipse.jgit.lib.Repository;
|
||||||
|
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
import java.util.UUID;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -46,6 +48,7 @@ class GitDBBranchImpl implements GitDBBranch {
|
||||||
private final GitDBRepo gitDBRepo;
|
private final GitDBRepo gitDBRepo;
|
||||||
private final String userName;
|
private final String userName;
|
||||||
private final String userEmailAddress;
|
private final String userEmailAddress;
|
||||||
|
private final String name;
|
||||||
|
|
||||||
private static GitDBBranch select(
|
private static GitDBBranch select(
|
||||||
final Ref branchRef,
|
final Ref branchRef,
|
||||||
|
@ -53,7 +56,7 @@ class GitDBBranchImpl implements GitDBBranch {
|
||||||
final String userName,
|
final String userName,
|
||||||
final String userEmailAddress
|
final String userEmailAddress
|
||||||
) {
|
) {
|
||||||
return new GitDBBranchImpl(branchRef, gitDBRepo, userName, userEmailAddress);
|
return new GitDBBranchImpl(branchRef, gitDBRepo, userName, userEmailAddress, branchRef.getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -106,6 +109,23 @@ class GitDBBranchImpl implements GitDBBranch {
|
||||||
.map(Version::valueOf);
|
.map(Version::valueOf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public GitDBTransaction transaction(String name) throws IOException {
|
||||||
|
final Ref ref = gitDBRepo.createBranch(branchRef, UUID.randomUUID().toString());
|
||||||
|
final GitDBBranch branch = new GitDBBranchImpl(ref, gitDBRepo, userName, userEmailAddress, name);
|
||||||
|
return new UnnamedTransaction(this, branch);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public GitDBTransaction transaction() throws IOException {
|
||||||
|
return transaction(UUID.randomUUID().toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String name() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
private String commitMessageForAdd(final String key, final String value) {
|
private String commitMessageForAdd(final String key, final String value) {
|
||||||
return String.format("Add key [%s] = [%s]", key, value);
|
return String.format("Add key [%s] = [%s]", key, value);
|
||||||
}
|
}
|
||||||
|
|
|
@ -227,4 +227,8 @@ class GitDBRepo {
|
||||||
Optional<ObjectId> removeKey(final Ref branchRef, final String key) throws IOException {
|
Optional<ObjectId> removeKey(final Ref branchRef, final String key) throws IOException {
|
||||||
return keyRemover.remove(branchRef, key);
|
return keyRemover.remove(branchRef, key);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Ref createBranch(final Ref branchRef, final String name) throws IOException {
|
||||||
|
return repository.getRefDatabase().newUpdate(name, false).getRef();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
79
src/main/java/net/kemitix/gitdb/impl/UnnamedTransaction.java
Normal file
79
src/main/java/net/kemitix/gitdb/impl/UnnamedTransaction.java
Normal file
|
@ -0,0 +1,79 @@
|
||||||
|
/*
|
||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (c) 2018 Paul Campbell
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
||||||
|
and associated documentation files (the "Software"), to deal in the Software without restriction,
|
||||||
|
including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||||
|
and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,
|
||||||
|
subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all copies
|
||||||
|
or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
||||||
|
INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
||||||
|
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package net.kemitix.gitdb.impl;
|
||||||
|
|
||||||
|
import com.github.zafarkhaja.semver.Version;
|
||||||
|
import net.kemitix.gitdb.GitDBBranch;
|
||||||
|
import net.kemitix.gitdb.GitDBTransaction;
|
||||||
|
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An anonymous transaction.
|
||||||
|
*
|
||||||
|
* @author Paul Campbell (pcampbell@kemitix.net)
|
||||||
|
*/
|
||||||
|
class UnnamedTransaction implements GitDBTransaction {
|
||||||
|
|
||||||
|
private final GitDBBranch base;
|
||||||
|
private final GitDBBranch branch;
|
||||||
|
|
||||||
|
UnnamedTransaction(final GitDBBranch base, final GitDBBranch branch) {
|
||||||
|
this.base = base;
|
||||||
|
this.branch = branch;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Optional<String> get(String key) {
|
||||||
|
return Optional.empty();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public GitDBBranch put(String key, String value) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public GitDBBranch remove(String key) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Optional<Version> getFormatVersion() {
|
||||||
|
return Optional.empty();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public GitDBTransaction transaction() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public GitDBTransaction transaction(String name) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String name() {
|
||||||
|
return branch.name();
|
||||||
|
}
|
||||||
|
}
|
|
@ -3,6 +3,7 @@ package net.kemitix.gitdb.test;
|
||||||
import com.github.zafarkhaja.semver.Version;
|
import com.github.zafarkhaja.semver.Version;
|
||||||
import net.kemitix.gitdb.GitDB;
|
import net.kemitix.gitdb.GitDB;
|
||||||
import net.kemitix.gitdb.GitDBBranch;
|
import net.kemitix.gitdb.GitDBBranch;
|
||||||
|
import net.kemitix.gitdb.GitDBTransaction;
|
||||||
import net.kemitix.gitdb.InvalidRepositoryException;
|
import net.kemitix.gitdb.InvalidRepositoryException;
|
||||||
import org.assertj.core.api.WithAssertions;
|
import org.assertj.core.api.WithAssertions;
|
||||||
import org.eclipse.jgit.api.Git;
|
import org.eclipse.jgit.api.Git;
|
||||||
|
@ -310,6 +311,20 @@ class GitDBTest implements WithAssertions {
|
||||||
}
|
}
|
||||||
|
|
||||||
// When starting a named transaction then GitDbTransaction is returned
|
// When starting a named transaction then GitDbTransaction is returned
|
||||||
|
@Test
|
||||||
|
void startTransaction_thenReturnGitDBTransaction() throws IOException {
|
||||||
|
//given
|
||||||
|
final String key = stringSupplier.get();
|
||||||
|
final String value = stringSupplier.get();
|
||||||
|
final GitDBBranch gitDBBranch = gitDBBranchWithKeyValue(key, value);
|
||||||
|
final String name = stringSupplier.get();
|
||||||
|
//when
|
||||||
|
final GitDBTransaction transaction = gitDBBranch.transaction(name);
|
||||||
|
//then
|
||||||
|
assertThat(transaction).isNotNull();
|
||||||
|
assertThat(transaction.name()).isEqualTo(name);
|
||||||
|
}
|
||||||
|
|
||||||
// When starting an anonymous transaction then a GitDbTransaction is returned
|
// When starting an anonymous transaction then a GitDbTransaction is returned
|
||||||
|
|
||||||
// Given a GitDbTransaction handle (i.e. a new branch)
|
// Given a GitDbTransaction handle (i.e. a new branch)
|
||||||
|
|
Loading…
Reference in a new issue