From 27b318ad4ff2045c3c4e490a50735e16b4963e86 Mon Sep 17 00:00:00 2001 From: "m.kaspera" Date: Mon, 6 Sep 2021 08:27:32 +0200 Subject: [PATCH] Fix: The commit dialog after a merge conflict resolution does not properly commit the files --- .../adito/git/gui/actions/CommitAction.java | 32 +++++++++++++++---- .../gui/actions/ResolveConflictsAction.java | 18 +++++++---- 2 files changed, 36 insertions(+), 14 deletions(-) diff --git a/gui/src/main/java/de/adito/git/gui/actions/CommitAction.java b/gui/src/main/java/de/adito/git/gui/actions/CommitAction.java index efedf040..a485efca 100644 --- a/gui/src/main/java/de/adito/git/gui/actions/CommitAction.java +++ b/gui/src/main/java/de/adito/git/gui/actions/CommitAction.java @@ -17,6 +17,7 @@ import de.adito.git.impl.Util; import io.reactivex.rxjava3.core.Observable; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import javax.swing.*; import java.awt.event.ActionEvent; @@ -82,13 +83,7 @@ public void actionPerformed(ActionEvent pEvent) // if user didn't cancel the dialogs if (dialogResult.doCommit()) { - progressFacade.executeInBackground("Committing Changes", pProgress -> { - List files = dialogResult.getInformation().getSelectedFiles(); - IRepository iRepo = repo.blockingFirst().orElseThrow(() -> new RuntimeException(Util.getResource(this.getClass(), "noValidRepoMsg"))); - iRepo.commit(dialogResult.getMessage(), files, dialogResult.getInformation().getUserName(), dialogResult.getInformation().getUserMail(), - dialogResult.getInformation().isDoAmend()); - prefStore.put(prefStoreInstanceKey, null); - }); + performCommit(repo, progressFacade, prefStore, dialogResult, prefStoreInstanceKey); } else { @@ -96,6 +91,29 @@ public void actionPerformed(ActionEvent pEvent) } } + /** + * perform a commit based on the dialogResult + * + * @param repo Observable of the Repository, used to trigger the commit + * @param pProgressFacade IAsyncProgessFacade to display the progress of the commit + * @param pPrefStore PrefStore to store the commit message if the user aborts the commit + * @param dialogResult ICommitDialogResult that contains the info about the files the user wants to commit and if the commit should be performed at all + * @param prefStoreInstanceKey Key for the stored commit message + */ + static void performCommit(@NotNull Observable> repo, @NotNull IAsyncProgressFacade pProgressFacade, @NotNull IPrefStore pPrefStore, + @NotNull ICommitDialogResult dialogResult, + @Nullable String prefStoreInstanceKey) + { + pProgressFacade.executeInBackground("Committing Changes", pProgress -> { + List files = dialogResult.getInformation().getSelectedFiles(); + IRepository iRepo = repo.blockingFirst().orElseThrow(() -> new RuntimeException(Util.getResource(CommitAction.class, "noValidRepoMsg"))); + iRepo.commit(dialogResult.getMessage(), files, dialogResult.getInformation().getUserName(), dialogResult.getInformation().getUserMail(), + dialogResult.getInformation().isDoAmend()); + if (prefStoreInstanceKey != null) + pPrefStore.put(prefStoreInstanceKey, null); + }); + } + private static Observable> _getIsEnabledObservable(@NotNull Observable> pRepository, @NotNull Observable>> pSelectedFilesObservable) { diff --git a/gui/src/main/java/de/adito/git/gui/actions/ResolveConflictsAction.java b/gui/src/main/java/de/adito/git/gui/actions/ResolveConflictsAction.java index 63a34395..9cc02a67 100644 --- a/gui/src/main/java/de/adito/git/gui/actions/ResolveConflictsAction.java +++ b/gui/src/main/java/de/adito/git/gui/actions/ResolveConflictsAction.java @@ -12,13 +12,12 @@ import de.adito.git.api.exception.AditoGitException; import de.adito.git.api.exception.AmbiguousStashCommitsException; import de.adito.git.api.exception.TargetBranchNotFoundException; +import de.adito.git.api.prefs.IPrefStore; import de.adito.git.api.progress.IAsyncProgressFacade; import de.adito.git.gui.dialogs.EButtons; import de.adito.git.gui.dialogs.IDialogProvider; import de.adito.git.gui.dialogs.panels.NotificationPanel; -import de.adito.git.gui.dialogs.results.IMergeConflictDialogResult; -import de.adito.git.gui.dialogs.results.IStashedCommitSelectionDialogResult; -import de.adito.git.gui.dialogs.results.IUserPromptDialogResult; +import de.adito.git.gui.dialogs.results.*; import de.adito.git.gui.sequences.MergeConflictSequence; import de.adito.git.impl.Util; import io.reactivex.rxjava3.core.Observable; @@ -37,14 +36,16 @@ class ResolveConflictsAction extends AbstractTableAction private final MergeConflictSequence mergeConflictSequence; private final IDialogProvider dialogProvider; private final Observable> repository; + private final IPrefStore prefStore; private final INotifyUtil notifyUtil; @Inject - public ResolveConflictsAction(IAsyncProgressFacade pProgressFacade, INotifyUtil pNotifyUtil, MergeConflictSequence pMergeConflictSequence, + public ResolveConflictsAction(IAsyncProgressFacade pProgressFacade, IPrefStore pPrefStore, INotifyUtil pNotifyUtil, MergeConflictSequence pMergeConflictSequence, IDialogProvider pDialogProvider, @Assisted Observable> pRepository, @Assisted Observable>> pSelectedFilesObservable) { super(Util.getResource(ResolveConflictsAction.class, "resolveConflictsTitle"), _getIsEnabledObservable(pSelectedFilesObservable)); + prefStore = pPrefStore; notifyUtil = pNotifyUtil; progressFacade = pProgressFacade; mergeConflictSequence = pMergeConflictSequence; @@ -107,9 +108,12 @@ private void _resolveConflicts(IRepository pRepo) throws AditoGitException } else if (mergeConflictDialogResult.isFinishMerge()) { - dialogProvider.showCommitDialog(repository, pRepo.getStatus().map(pStatusOpt -> pStatusOpt.map(IFileStatus::getUncommitted)), - "merged xxx into " + pRepo.getRepositoryState().blockingFirst(Optional.empty()) - .map(pRepoState -> pRepoState.getCurrentBranch().getSimpleName()).orElse("")); + ICommitDialogResult dialogResult = dialogProvider + .showCommitDialog(repository, pRepo.getStatus().map(pStatusOpt -> pStatusOpt.map(IFileStatus::getUncommitted)), + "merged xxx into " + pRepo.getRepositoryState().blockingFirst(Optional.empty()) + .map(pRepoState -> pRepoState.getCurrentBranch().getSimpleName()).orElse("")); + if (dialogResult.doCommit()) + CommitAction.performCommit(repository, progressFacade, prefStore, dialogResult, null); } }