Revert changes to abstract class

This commit is contained in:
Rene Pfeuffer
2019-11-11 13:24:47 +01:00
parent a1ec0b0636
commit 21d930cbbe
2 changed files with 38 additions and 53 deletions

View File

@@ -151,32 +151,6 @@ class AbstractGitCommand
}
}
<R, W extends GitCloneWorker<R>> R inCloneWithPostponedClose(Function<Git, W> workerSupplier, GitWorkdirFactory workdirFactory, String initialBranch, WorkingCopyCloser closer) {
try {
WorkingCopy<Repository, Repository> workingCopy = workdirFactory.createWorkingCopy(context, initialBranch);
closer.setWorkingCopy(workingCopy);
Repository repository = workingCopy.getWorkingRepository();
logger.debug("cloned repository to folder {}", repository.getWorkTree());
return workerSupplier.apply(new Git(repository)).run();
} catch (IOException e) {
throw new InternalRepositoryException(context.getRepository(), "could not clone repository", e);
}
}
static class WorkingCopyCloser {
private WorkingCopy<?, ?> workingCopy;
private void setWorkingCopy(WorkingCopy<?, ?> workingCopy) {
this.workingCopy = workingCopy;
}
public void close() {
if (workingCopy != null) {
workingCopy.close();
}
}
}
ObjectId resolveRevisionOrThrowNotFound(Repository repository, String revision) throws IOException {
sonia.scm.repository.Repository scmRepository = context.getRepository();
return resolveRevisionOrThrowNotFound(repository, revision, scmRepository);

View File

@@ -94,49 +94,35 @@ public class GitMergeCommand extends AbstractGitCommand implements MergeCommand
private final Git git;
private final MergeCommandRequest request;
private final WorkingCopyCloser closer;
private final CanonicalTreeParser treeParser;
private final ObjectId treeId;
private final ByteArrayOutputStream diffBuffer;
private ConflictWorker(Git git, MergeCommandRequest request, WorkingCopyCloser closer) {
super(git, context, repository);
this.git = git;
this.request = request;
this.closer = closer;
treeParser = new CanonicalTreeParser();
treeId = git.getRepository().resolve(request.getTargetBranch() + "^{tree}");
diffBuffer = new ByteArrayOutputStream();
}
@Override
MergeConflictResult run() throws IOException {
ObjectId sourceRevision = resolveRevision(request.getBranchToMerge());
MergeResult mergeResult;
try {
mergeResult = getClone().merge()
.setFastForward(org.eclipse.jgit.api.MergeCommand.FastForwardMode.NO_FF)
.setCommit(false)
.include(request.getBranchToMerge(), sourceRevision)
.call();
} catch (GitAPIException e) {
throw new InternalRepositoryException(context.getRepository(), "could not merge branch " + request.getBranchToMerge() + " into " + request.getTargetBranch(), e);
}
MergeResult mergeResult = doTemporaryMerge();
if (mergeResult.getConflicts() == null) {
return new MergeConflictResult();
}
Status status;
try {
status = getClone().status().call();
} catch (GitAPIException e) {
throw new InternalRepositoryException(context.getRepository(), "could not get status", e);
}
Status status = getStatus();
MergeConflictResult result = new MergeConflictResult();
CanonicalTreeParser treeParser = new CanonicalTreeParser();
ObjectId treeId = git.getRepository().resolve(request.getTargetBranch() + "^{tree}");
ByteArrayOutputStream diffBuffer = new ByteArrayOutputStream();
status.getConflictingStageState().entrySet().forEach(conflictEntry -> {
String path = conflictEntry.getKey();
switch (conflictEntry.getValue()) {
status.getConflictingStageState().forEach((path, value) -> {
switch (value) {
case BOTH_MODIFIED:
diffBuffer.reset();
try (ObjectReader reader = git.getRepository().newObjectReader()) {
@@ -161,10 +147,35 @@ public class GitMergeCommand extends AbstractGitCommand implements MergeCommand
result.addDeletedByUs(path);
break;
default:
throw new InternalRepositoryException(context.getRepository(), "unexpected conflict type: " + conflictEntry.getValue());
throw new InternalRepositoryException(context.getRepository(), "unexpected conflict type: " + value);
}
});
return result;
}
private Status getStatus() {
Status status;
try {
status = getClone().status().call();
} catch (GitAPIException e) {
throw new InternalRepositoryException(context.getRepository(), "could not get status", e);
}
return status;
}
private MergeResult doTemporaryMerge() throws IOException {
ObjectId sourceRevision = resolveRevision(request.getBranchToMerge());
MergeResult mergeResult;
try {
mergeResult = getClone().merge()
.setFastForward(org.eclipse.jgit.api.MergeCommand.FastForwardMode.NO_FF)
.setCommit(false)
.include(request.getBranchToMerge(), sourceRevision)
.call();
} catch (GitAPIException e) {
throw new InternalRepositoryException(context.getRepository(), "could not merge branch " + request.getBranchToMerge() + " into " + request.getTargetBranch(), e);
}
return mergeResult;
}
}
}