diff options
author | Julian Ruppel | 2021-11-22 22:41:58 +0000 |
---|---|---|
committer | Matthias Sohn | 2021-12-06 13:57:38 +0000 |
commit | e26e9ac05152b910822a1ea7da964813aa20a474 (patch) | |
tree | 77339dcc2e5521d304dcdbbde8543c9874eede09 | |
parent | f86740c9c5f4db9b4338e75b1fa960d195885b69 (diff) | |
download | egit-e26e9ac05152b910822a1ea7da964813aa20a474.tar.gz egit-e26e9ac05152b910822a1ea7da964813aa20a474.tar.xz egit-e26e9ac05152b910822a1ea7da964813aa20a474.zip |
Support commit.template config property
* Prefill empty commit message with the commit template specified via
commit.template (if configured)
* Refresh commit message template if message is empty and user
stages/unstages files
* Affects staging view and commit dialog
Bug: 446355
Change-Id: Ic9ea86dafdcc00cbf7846f0b1bbeb49782f03fa3
6 files changed, 49 insertions, 4 deletions
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/UIText.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/UIText.java index 2a3d68871e..6c77b349a5 100644 --- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/UIText.java +++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/UIText.java @@ -2445,6 +2445,9 @@ public class UIText extends NLS { public static String CommitAction_CommittingFailed; /** */ + public static String CommitAction_CommitTemplateFailed; + + /** */ public static String CommitAction_errorComputingDiffs; /** */ diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/commit/CommitHelper.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/commit/CommitHelper.java index f17c52f464..fcaf68da4d 100644 --- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/commit/CommitHelper.java +++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/commit/CommitHelper.java @@ -20,6 +20,8 @@ import java.io.IOException; import org.eclipse.egit.ui.Activator; import org.eclipse.egit.ui.internal.UIText; +import org.eclipse.jgit.errors.ConfigInvalidException; +import org.eclipse.jgit.lib.CommitConfig; import org.eclipse.jgit.lib.Constants; import org.eclipse.jgit.lib.ObjectId; import org.eclipse.jgit.lib.PersonIdent; @@ -28,6 +30,7 @@ import org.eclipse.jgit.lib.RepositoryState; import org.eclipse.jgit.lib.UserConfig; import org.eclipse.jgit.revwalk.RevCommit; import org.eclipse.jgit.revwalk.RevWalk; +import org.eclipse.jgit.util.StringUtils; import org.eclipse.osgi.util.NLS; import org.eclipse.swt.widgets.Text; @@ -37,7 +40,7 @@ import org.eclipse.swt.widgets.Text; */ public class CommitHelper { - private Repository repository; + final private Repository repository; boolean canCommit; @@ -55,6 +58,8 @@ public class CommitHelper { private String commitMessage; + private String commitTemplate; + /** * @param repository */ @@ -98,6 +103,34 @@ public class CommitHelper { if (isCherryPickResolved) { author = getCherryPickOriginalAuthor(mergeRepository); } + + } + + /** + * @return true if there is no commit message but a commit template + */ + public boolean shouldUseCommitTemplate() { + return StringUtils.isEmptyOrNull(getCommitMessage()) + && getCommitTemplate() != null; + } + + /** + * @return commit message template + */ + public String getCommitTemplate() { + if (commitTemplate == null && repository != null) { + CommitConfig commitConfig = repository.getConfig() + .get(CommitConfig.KEY); + try { + commitTemplate = commitConfig + .getCommitTemplateContent(repository); + } catch (IOException | ConfigInvalidException e) { + Activator.handleError(UIText.CommitAction_CommitTemplateFailed, + e, true); + } + } + + return commitTemplate; } private static RevCommit getHeadCommit(Repository repository) { diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/commit/CommitUI.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/commit/CommitUI.java index 44f6cd9b8e..7693cf9770 100644 --- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/commit/CommitUI.java +++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/commit/CommitUI.java @@ -184,7 +184,11 @@ public class CommitUI { commitDialog.setAuthor(commitHelper.getAuthor()); commitDialog.setCommitter(commitHelper.getCommitter()); commitDialog.setAllowToChangeSelection(!commitHelper.isMergedResolved && !commitHelper.isCherryPickResolved); - commitDialog.setCommitMessage(commitHelper.getCommitMessage()); + if (commitHelper.shouldUseCommitTemplate()) { + commitDialog.setCommitMessage(commitHelper.getCommitTemplate()); + } else { + commitDialog.setCommitMessage(commitHelper.getCommitMessage()); + } if (commitDialog.open() != IDialogConstants.OK_ID) return false; diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CommitMessageComponent.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CommitMessageComponent.java index f6eee65811..3c6cd9e0c8 100644 --- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CommitMessageComponent.java +++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CommitMessageComponent.java @@ -800,7 +800,7 @@ public class CommitMessageComponent { String calculateCommitMessage( CommitMessageWithCaretPosition messageWithCaretPosition) { if (commitMessage != null) { - // special case for merge / cherry-pick + // special case for merge / cherry-pick / existing message template return commitMessage; } diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/staging/StagingView.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/staging/StagingView.java index 0d7911fa64..cf14782a5a 100644 --- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/staging/StagingView.java +++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/staging/StagingView.java @@ -4368,7 +4368,11 @@ public class StagingView extends ViewPart commitMessageComponent.enableListeners(false); commitMessageComponent.resetState(); commitMessageComponent.setAuthor(helper.getAuthor()); - commitMessageComponent.setCommitMessage(helper.getCommitMessage()); + if (helper.shouldUseCommitTemplate()) { + commitMessageComponent.setCommitMessage(helper.getCommitTemplate()); + } else { + commitMessageComponent.setCommitMessage(helper.getCommitMessage()); + } commitMessageComponent.setCommitter(helper.getCommitter()); commitMessageComponent.setHeadCommit(getCommitId(helper .getPreviousCommit())); diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/uitext.properties b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/uitext.properties index 01e2678774..b5bde2cef5 100644 --- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/uitext.properties +++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/uitext.properties @@ -856,6 +856,7 @@ CommitAction_amendNotPossible=Commit/amend not possible. Possible causes\:\n\n- CommitAction_cannotCommit=Cannot commit now CommitAction_CommittingChanges=Committing changes CommitAction_CommittingFailed=Committing failed +CommitAction_CommitTemplateFailed=Evaluation of commit template failed CommitAction_errorComputingDiffs=Error occurred computing Git commit diffs CommitAction_errorRetrievingCommit=Error occurred retrieving last commit CommitAction_noFilesToCommit=No files to commit |