Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -499,7 +499,7 @@ public Mono<MergeStatusDTO> pullApplication(
}
}
})
.onErrorResume(error -> Mono.error(error))
.onErrorResume(error -> resetToLastCommit(git).flatMap(ignore -> Mono.error(error)))
.timeout(Duration.ofMillis(Constraint.TIMEOUT_MILLIS))
.name(GitSpan.FS_PULL)
.tap(Micrometer.observation(observationRegistry)),
Expand Down Expand Up @@ -626,6 +626,15 @@ public Mono<GitStatusDTO> getStatus(Path repoPath, String branchName) {
response.setRemoteBranch("untracked");
}

// Remove modified changes from current branch so that checkout to other branches
// will be possible
if (!status.isClean()) {
return resetToLastCommit(git).map(ref -> {
processStopwatch.stopAndLogTimeInMillis();
jgitStatusSpan.end();
return response;
});
}
Comment on lines +630 to +637
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Potential data loss in a read-only operation.
Calling resetToLastCommit(git) in getStatus forcibly discards uncommitted changes. Confirm if this destructive behavior is truly desired in a status-check method.

processStopwatch.stopAndLogTimeInMillis();
jgitStatusSpan.end();
return Mono.just(response);
Expand Down Expand Up @@ -844,7 +853,13 @@ public Mono<String> mergeBranch(Path repoSuffix, String sourceBranch, String des
}
})
.onErrorResume(error -> {
return Mono.error(error);
try {
return resetToLastCommit(repoSuffix, destinationBranch)
.thenReturn(error.getMessage());
} catch (GitAPIException | IOException e) {
log.error("Error while hard resetting to latest commit {0}", e);
return Mono.error(e);
}
})
.timeout(Duration.ofMillis(Constraint.TIMEOUT_MILLIS))
.name(GitSpan.FS_MERGE)
Expand Down Expand Up @@ -1013,6 +1028,19 @@ public Mono<MergeStatusDTO> isMergeBranch(Path repoSuffix, String sourceBranch,
mergeResult.getMergeStatus().name());
return mergeStatus;
})
.flatMap(status -> {
try {
// Revert uncommitted changes if any
return resetToLastCommit(repoSuffix, destinationBranch)
.map(ignore -> {
processStopwatch.stopAndLogTimeInMillis();
return status;
});
} catch (GitAPIException | IOException e) {
log.error("Error for hard resetting to latest commit {0}", e);
return Mono.error(e);
}
})
.timeout(Duration.ofMillis(Constraint.TIMEOUT_MILLIS)),
Git::close)
.subscribeOn(scheduler);
Expand Down Expand Up @@ -1093,12 +1121,12 @@ private Mono<Ref> resetToLastCommit(Git git) {
.subscribeOn(scheduler);
}

public Mono<Boolean> resetToLastCommit(Path repoSuffix, String branchName) {
public Mono<Boolean> resetToLastCommit(Path repoSuffix, String branchName) throws GitAPIException, IOException {
return Mono.using(
() -> Git.open(createRepoPath(repoSuffix).toFile()),
git -> this.resetToLastCommit(git)
.flatMap(ref -> checkoutToBranch(repoSuffix, branchName))
.thenReturn(true),
.flatMap(checkedOut -> resetToLastCommit(git).thenReturn(true)),
Git::close);
}

Expand Down Expand Up @@ -1128,7 +1156,7 @@ public Mono<Boolean> resetHard(Path repoSuffix, String branchName) {
}

public Mono<Boolean> rebaseBranch(Path repoSuffix, String branchName) {
return this.resetToLastCommit(repoSuffix, branchName).flatMap(isCheckedOut -> Mono.using(
return this.checkoutToBranch(repoSuffix, branchName).flatMap(isCheckedOut -> Mono.using(
() -> Git.open(createRepoPath(repoSuffix).toFile()),
git -> Mono.fromCallable(() -> {
Span jgitRebaseSpan = observationHelper.createSpan(GitSpan.JGIT_REBASE);
Expand Down