mirror of
https://github.com/scm-manager/scm-manager.git
synced 2025-11-06 05:25:44 +01:00
Revert changes to abstract class
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user