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