mirror of
https://github.com/scm-manager/scm-manager.git
synced 2025-11-07 22:15:45 +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 {
|
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);
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user