From 24faae16f801f6480c5abcb99a4be47927eae39a Mon Sep 17 00:00:00 2001 From: Kirill Likhodedov Date: Tue, 9 Sep 2014 19:57:19 +0400 Subject: [PATCH] [git] IDEA-75353 Let skip detached HEAD commit warning --- .../checkin/GitCheckinHandlerFactory.java | 40 ++++++++++++++++--- .../src/git4idea/config/GitVcsPanel.form | 11 ++++- .../src/git4idea/config/GitVcsPanel.java | 6 ++- .../src/git4idea/config/GitVcsSettings.java | 9 +++++ 4 files changed, 59 insertions(+), 7 deletions(-) diff --git a/plugins/git4idea/src/git4idea/checkin/GitCheckinHandlerFactory.java b/plugins/git4idea/src/git4idea/checkin/GitCheckinHandlerFactory.java index 8bfc52ca261a..c31966176ae0 100644 --- a/plugins/git4idea/src/git4idea/checkin/GitCheckinHandlerFactory.java +++ b/plugins/git4idea/src/git4idea/checkin/GitCheckinHandlerFactory.java @@ -15,12 +15,14 @@ */ package git4idea.checkin; +import com.intellij.CommonBundle; import com.intellij.openapi.components.ServiceManager; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.progress.ProgressIndicator; import com.intellij.openapi.progress.ProgressManager; import com.intellij.openapi.progress.Task; import com.intellij.openapi.project.Project; +import com.intellij.openapi.ui.DialogWrapper; import com.intellij.openapi.ui.Messages; import com.intellij.openapi.util.Computable; import com.intellij.openapi.util.Couple; @@ -281,7 +283,7 @@ public class GitCheckinHandlerFactory extends VcsCheckinHandlerFactory { private ReturnResult warnAboutDetachedHeadIfNeeded() { // Warning: commit on a detached HEAD DetachedRoot detachedRoot = getDetachedRoot(); - if (detachedRoot == null) { + if (detachedRoot == null || !GitVcsSettings.getInstance(myProject).warnAboutDetachedHead()) { return ReturnResult.COMMIT; } @@ -303,10 +305,38 @@ public class GitCheckinHandlerFactory extends VcsCheckinHandlerFactory { readMore("http://gitolite.com/detached-head.html", "Read more about detached HEAD"); } - final int choice = Messages.showOkCancelDialog(myPanel.getComponent(), XmlStringUtil.wrapInHtml(message), title, - "Cancel", "Commit", - Messages.getWarningIcon()); - if (choice != Messages.OK) { + DialogWrapper.DoNotAskOption dontAskAgain = new DialogWrapper.DoNotAskOption() { + @Override + public boolean isToBeShown() { + return true; + } + + @Override + public void setToBeShown(boolean toBeShown, int exitCode) { + if (exitCode == Messages.OK) { + GitVcsSettings.getInstance(myProject).setWarnAboutDetachedHead(toBeShown); + } + } + + @Override + public boolean canBeHidden() { + return true; + } + + @Override + public boolean shouldSaveOptionsOnCancel() { + return false; + } + + @NotNull + @Override + public String getDoNotShowMessage() { + return "Don't warn again"; + } + }; + int choice = Messages.showOkCancelDialog(myProject, XmlStringUtil.wrapInHtml(message), title, "Commit", + CommonBundle.getCancelButtonText(), Messages.getWarningIcon(), dontAskAgain); + if (choice == Messages.OK) { return ReturnResult.COMMIT; } else { return ReturnResult.CLOSE_WINDOW; diff --git a/plugins/git4idea/src/git4idea/config/GitVcsPanel.form b/plugins/git4idea/src/git4idea/config/GitVcsPanel.form index 0f24aaf99d56..87d3578f7c0a 100644 --- a/plugins/git4idea/src/git4idea/config/GitVcsPanel.form +++ b/plugins/git4idea/src/git4idea/config/GitVcsPanel.form @@ -91,7 +91,7 @@ - + @@ -134,6 +134,15 @@ + + + + + + + + + diff --git a/plugins/git4idea/src/git4idea/config/GitVcsPanel.java b/plugins/git4idea/src/git4idea/config/GitVcsPanel.java index 3a4cab90deb3..c8c2ad46a274 100644 --- a/plugins/git4idea/src/git4idea/config/GitVcsPanel.java +++ b/plugins/git4idea/src/git4idea/config/GitVcsPanel.java @@ -51,6 +51,7 @@ public class GitVcsPanel { private JBCheckBox mySyncBranchControl; private JCheckBox myAutoCommitOnCherryPick; private JBCheckBox myWarnAboutCrlf; + private JCheckBox myWarnAboutDetachedHead; public GitVcsPanel(@NotNull Project project) { myVcs = GitVcs.getInstance(project); @@ -121,6 +122,7 @@ public class GitVcsPanel { mySyncBranchControl.setSelected(settings.getSyncSetting() == DvcsBranchSync.SYNC); myAutoCommitOnCherryPick.setSelected(settings.isAutoCommitOnCherryPick()); myWarnAboutCrlf.setSelected(settings.warnAboutCrlf()); + myWarnAboutDetachedHead.setSelected(settings.warnAboutDetachedHead()); } /** @@ -134,7 +136,8 @@ public class GitVcsPanel { !settings.autoUpdateIfPushRejected() == myAutoUpdateIfPushRejected.isSelected() || ((settings.getSyncSetting() == DvcsBranchSync.SYNC) != mySyncBranchControl.isSelected() || settings.isAutoCommitOnCherryPick() != myAutoCommitOnCherryPick.isSelected() || - settings.warnAboutCrlf() != myWarnAboutCrlf.isSelected()); + settings.warnAboutCrlf() != myWarnAboutCrlf.isSelected() || + settings.warnAboutDetachedHead() != myWarnAboutDetachedHead.isSelected()); } /** @@ -153,6 +156,7 @@ public class GitVcsPanel { settings.setSyncSetting(mySyncBranchControl.isSelected() ? DvcsBranchSync.SYNC : DvcsBranchSync.DONT); settings.setAutoCommitOnCherryPick(myAutoCommitOnCherryPick.isSelected()); settings.setWarnAboutCrlf(myWarnAboutCrlf.isSelected()); + settings.setWarnAboutDetachedHead(myWarnAboutDetachedHead.isSelected()); } } diff --git a/plugins/git4idea/src/git4idea/config/GitVcsSettings.java b/plugins/git4idea/src/git4idea/config/GitVcsSettings.java index ab59e8f80ae3..7dd7f9b1004b 100644 --- a/plugins/git4idea/src/git4idea/config/GitVcsSettings.java +++ b/plugins/git4idea/src/git4idea/config/GitVcsSettings.java @@ -66,6 +66,7 @@ public class GitVcsSettings implements PersistentStateComponent