From b9f77b822a83623efe5e05a07132d12f2da37e38 Mon Sep 17 00:00:00 2001 From: Kirill Likhodedov Date: Wed, 23 Oct 2013 19:39:34 +0400 Subject: [PATCH] [git] IDEA-115318 Clicking "amend" shouldn't revert what user has typed * Remember the initial commit message. * On "amend" select: substitute commit message with the message of the previous commit, only if user hasn't modified the initial message. * On "amend" deselect: substitute commit message with the initially saved one, only if user hasn't modified the amended message. --- .../checkin/GitCheckinEnvironment.java | 21 ++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/plugins/git4idea/src/git4idea/checkin/GitCheckinEnvironment.java b/plugins/git4idea/src/git4idea/checkin/GitCheckinEnvironment.java index 50e041d38639..a6e928c4694d 100644 --- a/plugins/git4idea/src/git4idea/checkin/GitCheckinEnvironment.java +++ b/plugins/git4idea/src/git4idea/checkin/GitCheckinEnvironment.java @@ -680,20 +680,26 @@ public class GitCheckinEnvironment implements CheckinEnvironment { myAmend.setToolTipText(GitBundle.getString("commit.amend.tooltip")); myPanel.add(myAmend, c); + myPreviousMessage = myCheckinPanel.getCommitMessage(); + myAmend.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if (myAmend.isSelected()) { - if (myAmendedMessage != null) { // checkbox is selected not the first time - substituteCommitMessage(myAmendedMessage); - } - else { - loadMessageInModalTask(project); + if (myPreviousMessage.equals(myCheckinPanel.getCommitMessage())) { // if user has already typed something, don't revert it + if (myAmendedMessage == null) { + loadMessageInModalTask(project); + } + else { // checkbox is selected not the first time + substituteCommitMessage(myAmendedMessage); + } } } else { - myAmendedMessage = myCheckinPanel.getCommitMessage(); // save if user accidentally deselected amended message - myCheckinPanel.setCommitMessage(myPreviousMessage); + // there was the amended message, but user has changed it => not reverting + if (myCheckinPanel.getCommitMessage().equals(myAmendedMessage)) { + myCheckinPanel.setCommitMessage(myPreviousMessage); + } } } }); @@ -710,6 +716,7 @@ public class GitCheckinEnvironment implements CheckinEnvironment { }, "Reading commit message...", false, project); if (!StringUtil.isEmptyOrSpaces(messageFromGit)) { substituteCommitMessage(messageFromGit); + myAmendedMessage = messageFromGit; } } catch (VcsException e) {