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 { ObjectId resolveRevisionOrThrowNotFound(Repository repository, String revision) throws IOException {
sonia.scm.repository.Repository scmRepository = context.getRepository(); sonia.scm.repository.Repository scmRepository = context.getRepository();
return resolveRevisionOrThrowNotFound(repository, revision, scmRepository); return resolveRevisionOrThrowNotFound(repository, revision, scmRepository);

View File

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