IDEA-54134 (Git Log: Item that should be emphasized can be added to respective tree...
authorirengrig <Irina.Chernushina@jetbrains.com>
Mon, 26 Apr 2010 17:56:20 +0000 (21:56 +0400)
committerirengrig <Irina.Chernushina@jetbrains.com>
Mon, 26 Apr 2010 17:56:20 +0000 (21:56 +0400)
plugins/git4idea/src/git4idea/history/browser/ChangesFilter.java
plugins/git4idea/src/git4idea/history/browser/GitLogTree.java
plugins/git4idea/src/git4idea/history/browser/GitTreeController.java
plugins/git4idea/src/git4idea/history/browser/GitTreeFiltering.java
plugins/git4idea/src/git4idea/history/browser/LowLevelAccess.java
plugins/git4idea/src/git4idea/history/browser/LowLevelAccessImpl.java

index ffb02a76f6866f35faec0ba105762856f2752827..e1e3bca4a4413337452b3520c5df917ed887b992 100644 (file)
@@ -150,6 +150,23 @@ public class ChangesFilter {
     public void applyToCommandLine(List<String> sink) {
       sink.add("--author=" + myRegexp);
     }
+
+    @Override
+    public boolean equals(Object o) {
+      if (this == o) return true;
+      if (o == null || getClass() != o.getClass()) return false;
+
+      Author author = (Author)o;
+
+      if (myRegexp != null ? !myRegexp.equals(author.myRegexp) : author.myRegexp != null) return false;
+
+      return true;
+    }
+
+    @Override
+    public int hashCode() {
+      return myRegexp != null ? myRegexp.hashCode() : 0;
+    }
   }
 
   public static class Committer implements Filter {
@@ -168,6 +185,23 @@ public class ChangesFilter {
     public void applyToCommandLine(List<String> sink) {
       sink.add("--committer=" + myRegexp);
     }
+
+    @Override
+    public boolean equals(Object o) {
+      if (this == o) return true;
+      if (o == null || getClass() != o.getClass()) return false;
+
+      Committer committer = (Committer)o;
+
+      if (myRegexp != null ? !myRegexp.equals(committer.myRegexp) : committer.myRegexp != null) return false;
+
+      return true;
+    }
+
+    @Override
+    public int hashCode() {
+      return myRegexp != null ? myRegexp.hashCode() : 0;
+    }
   }
 
   public static class BeforeDate implements Filter {
@@ -184,6 +218,23 @@ public class ChangesFilter {
     public void applyToCommandLine(List<String> sink) {
       sink.add("--before=" + formatDate(myDate));
     }
+
+    @Override
+    public boolean equals(Object o) {
+      if (this == o) return true;
+      if (o == null || getClass() != o.getClass()) return false;
+
+      BeforeDate that = (BeforeDate)o;
+
+      if (myDate != null ? !myDate.equals(that.myDate) : that.myDate != null) return false;
+
+      return true;
+    }
+
+    @Override
+    public int hashCode() {
+      return myDate != null ? myDate.hashCode() : 0;
+    }
   }
 
   public static class AfterDate implements Filter {
@@ -200,6 +251,23 @@ public class ChangesFilter {
     public void applyToCommandLine(final List<String> sink) {
       sink.add("--after=" + formatDate(myDate));
     }
+
+    @Override
+    public boolean equals(Object o) {
+      if (this == o) return true;
+      if (o == null || getClass() != o.getClass()) return false;
+
+      AfterDate afterDate = (AfterDate)o;
+
+      if (myDate != null ? !myDate.equals(afterDate.myDate) : afterDate.myDate != null) return false;
+
+      return true;
+    }
+
+    @Override
+    public int hashCode() {
+      return myDate != null ? myDate.hashCode() : 0;
+    }
   }
 
   private static String formatDate(final Date date) {
@@ -223,5 +291,22 @@ public class ChangesFilter {
     public void applyToCommandLine(final List<String> sink) {
       sink.add("--grep=" + myRegexp);
     }
+
+    @Override
+    public boolean equals(Object o) {
+      if (this == o) return true;
+      if (o == null || getClass() != o.getClass()) return false;
+
+      Comment comment = (Comment)o;
+
+      if (myRegexp != null ? !myRegexp.equals(comment.myRegexp) : comment.myRegexp != null) return false;
+
+      return true;
+    }
+
+    @Override
+    public int hashCode() {
+      return myRegexp != null ? myRegexp.hashCode() : 0;
+    }
   }
 }
index a1c21bc56f4c4a25b40c88eaa4b6e8a8b3450d7f..b8026ab9763f27ddb71b085230baf33dbfd0ffb2 100644 (file)
@@ -1176,6 +1176,7 @@ public class GitLogTree implements GitTreeViewI {
       void onDelete(Runnable after) {
         myFiltering.removeStartingPoint(getText());
         getParent().removeChild(this);
+        after.run();
       }
     }
 
@@ -1217,6 +1218,7 @@ public class GitLogTree implements GitTreeViewI {
       void onDelete(Runnable after) {
         myFiltering.removeStartingPoint(getText());
         getParent().removeChild(this);
+        after.run();
       }
     }
 
@@ -1351,6 +1353,7 @@ public class GitLogTree implements GitTreeViewI {
           myFiltering.removeFilter(filter);
         }
         getParent().removeChild(this);
+        after.run();
       }
     }
 
@@ -1449,7 +1452,9 @@ public class GitLogTree implements GitTreeViewI {
 
       void addChild(final Child child) {
         assert myAllowsChildren;
-        myChildren.add(child);
+        if (! myChildren.contains(child)) {
+          myChildren.add(child);
+        }
       }
 
       public Parent getParent() {
index 0a021e88c8cdf180e1f78aa329b388239f43ca8d..688db684f34d4f14472993fcacf1e02289274e91 100644 (file)
@@ -165,7 +165,7 @@ class GitTreeController implements ManageGitTreeView {
 
   // !!!! after point is included! (should be)
   @Nullable
-  private Portion loadPortion(final List<String> startingPoints, final Date beforePoint, final Date afterPoint,
+  private Portion loadPortion(final Collection<String> startingPoints, final Date beforePoint, final Date afterPoint,
                               final Collection<ChangesFilter.Filter> filtersIn, int maxCnt) {
     try {
       final Collection<ChangesFilter.Filter> filters = new LinkedList<ChangesFilter.Filter>(filtersIn);
@@ -507,7 +507,7 @@ class GitTreeController implements ManageGitTreeView {
       requestRefresh();
     }
 
-    public List<String> getStartingPoints() {
+    public Collection<String> getStartingPoints() {
       return myState.getStartingPoints();
     }
 
@@ -522,7 +522,7 @@ class GitTreeController implements ManageGitTreeView {
 
   private static class MyFiltersStateHolder implements GitTreeFiltering {
     private final Object myLock;
-    private final List<String> myStartingPoints;
+    private final Set<String> myStartingPoints;
     private boolean myDirty;
 
     private final List<Date> myContinuationPoints;
@@ -533,8 +533,8 @@ class GitTreeController implements ManageGitTreeView {
 
     private MyFiltersStateHolder() {
       myLock = new Object();
-      myStartingPoints = new LinkedList<String>();
-      myFilters = new LinkedList<ChangesFilter.Filter>();
+      myStartingPoints = new HashSet<String>();
+      myFilters = new HashSet<ChangesFilter.Filter>();
       myContinuationPoints = new LinkedList<Date>();
     }
 
@@ -621,7 +621,7 @@ class GitTreeController implements ManageGitTreeView {
     }
 
     @Nullable
-    public List<String> getStartingPoints() {
+    public Collection<String> getStartingPoints() {
       synchronized (myLock) {
         return myStartingPoints;
       }
index 1d08396c4e44a463b3d93a87dec9217ec9c73a11..185a3e2e5775633f68bf1ca699b06f4603762121 100644 (file)
@@ -34,7 +34,7 @@ public interface GitTreeFiltering {
 
   // todo COPIES!
   @Nullable
-  List<String> getStartingPoints();
+  Collection<String> getStartingPoints();
   @Nullable
   List<String> getExcludePoints();
   Collection<ChangesFilter.Filter> getFilters();
index 3a38ba8dd60f8d58480d24fb306a72355493fbfb..43e5f1bb2e5797ad967aae375e4e7ee9c957bd47 100644 (file)
@@ -24,7 +24,7 @@ import java.util.List;
 public interface LowLevelAccess {
   GitCommit getCommitByHash(final SHAHash hash);
   // todo define signature
-  void loadCommits(final List<String> startingPoints, final List<String> endPoints, final Collection<ChangesFilter.Filter> filters,
+  void loadCommits(final Collection<String> startingPoints, final Collection<String> endPoints, final Collection<ChangesFilter.Filter> filters,
                    final Consumer<GitCommit> consumer, final Collection<String> branches, int useMaxCnt) throws VcsException;
 
   Collection<String> getBranchesWithCommit(final SHAHash hash) throws VcsException;
index f4bf24601e844097e299b4b3f0fd95cb1e6e15b1..bb4918567791a693e9889bb37e3e153538ff8885 100644 (file)
@@ -46,7 +46,7 @@ public class LowLevelAccessImpl implements LowLevelAccess {
     return null;  //To change body of implemented methods use File | Settings | File Templates.
   }
 
-  public void loadCommits(final @NotNull List<String> startingPoints, @NotNull final List<String> endPoints,
+  public void loadCommits(final @NotNull Collection<String> startingPoints, @NotNull final Collection<String> endPoints,
                           @NotNull final Collection<ChangesFilter.Filter> filters,
                           @NotNull final Consumer<GitCommit> consumer, final Collection<String> branches, int useMaxCnt)
     throws VcsException {