[git] detect dirty tree problem, use volatile instead of AtomicBoolean since it's...
authorKirill Likhodedov <Kirill.Likhodedov@jetbrains.com>
Thu, 17 Sep 2015 17:15:25 +0000 (20:15 +0300)
committerKirill Likhodedov <Kirill.Likhodedov@jetbrains.com>
Fri, 18 Sep 2015 14:05:58 +0000 (17:05 +0300)
plugins/git4idea/src/git4idea/rebase/GitRebaseProblemDetector.java

index 6f16f65086d900521f74f150bf421ebd137866ad..40318a8efa3e2bfc862d7df20269fe6e2974608e 100644 (file)
 package git4idea.rebase;
 
 import com.intellij.openapi.util.Key;
+import com.intellij.openapi.util.text.StringUtil;
 import git4idea.commands.GitLineHandlerAdapter;
 
-import java.util.concurrent.atomic.AtomicBoolean;
-
 /**
  * <p>
  * Detector of problems during rebase operations, that may need to perform additional steps to handle.
@@ -38,28 +37,46 @@ public class GitRebaseProblemDetector extends GitLineHandlerAdapter {
     "Failed to merge in the changes",
     "could not apply"};
   private static final String REBASE_NO_CHANGE_INDICATOR = "No changes - did you forget to use 'git add'?";
+  private static final String[] DIRTY_TREE = {
+    "you have unstaged changes",
+    "your index contains uncommitted changes"
+  };
 
-  private AtomicBoolean mergeConflict = new AtomicBoolean(false);
-  private AtomicBoolean noChangeError = new AtomicBoolean(false);
+  private volatile boolean myMergeConflict;
+  private volatile boolean myNoChangeError;
+  private volatile boolean myDirtyTree;
 
   public boolean isNoChangeError() {
-    return noChangeError.get();
+    return myNoChangeError;
   }
 
   public boolean isMergeConflict() {
-    return mergeConflict.get();
+    return myMergeConflict;
+  }
+
+  public boolean isDirtyTree() {
+    return myDirtyTree;
   }
 
   @Override
   public void onLineAvailable(String line, Key outputType) {
     for (String conflictIndicator : REBASE_CONFLICT_INDICATORS) {
-      if (line.contains(conflictIndicator)) {
-        mergeConflict.set(true);
+      if (StringUtil.containsIgnoreCase(line, conflictIndicator)) {
+        myMergeConflict = true;
         return;
       }
     }
+
     if (line.contains(REBASE_NO_CHANGE_INDICATOR)) {
-      noChangeError.set(true);
+      myNoChangeError = true;
+      return;
+    }
+
+    for (String indicator : DIRTY_TREE) {
+      if (StringUtil.containsIgnoreCase(line, indicator)) {
+        myDirtyTree = true;
+        return;
+      }
     }
   }
 }