Git: dont gather extra changes by diffs for merge commits
authorirengrig <Irina.Chernushina@jetbrains.com>
Wed, 14 Apr 2010 07:11:52 +0000 (11:11 +0400)
committerirengrig <Irina.Chernushina@jetbrains.com>
Wed, 14 Apr 2010 07:11:52 +0000 (11:11 +0400)
plugins/git4idea/src/git4idea/GitUtil.java
plugins/git4idea/src/git4idea/GitVcs.java
plugins/git4idea/src/git4idea/actions/GitShowAllSubmittedFilesAction.java
plugins/git4idea/src/git4idea/changes/GitChangeUtils.java
plugins/git4idea/src/git4idea/changes/GitCommittedChangeListProvider.java
plugins/git4idea/src/git4idea/history/browser/GitTreeController.java

index 505c7fd76191dd917710d2c9e743b55ca9dfce66..67bc522a92ae5bccae0b46a944bcffc187d09a9d 100644 (file)
@@ -673,7 +673,7 @@ public class GitUtil {
   public static void getLocalCommittedChanges(final Project project,
                                               final VirtualFile root,
                                               final Consumer<GitSimpleHandler> parametersSpecifier,
-                                              final Consumer<CommittedChangeList> consumer) throws VcsException {
+                                              final Consumer<CommittedChangeList> consumer, boolean skipDiffsForMerge) throws VcsException {
     GitSimpleHandler h = new GitSimpleHandler(project, root, GitCommand.LOG);
     h.setSilent(true);
     h.setNoSSH(true);
@@ -685,7 +685,7 @@ public class GitUtil {
     StringScanner s = new StringScanner(output);
     while (s.hasMoreData() && s.startsWith('\u000C')) {
       s.nextLine();
-      consumer.consume(GitChangeUtils.parseChangeList(project, root, s));
+      consumer.consume(GitChangeUtils.parseChangeList(project, root, s, skipDiffsForMerge));
     }
     if (s.hasMoreData()) {
       throw new IllegalStateException("More input is avaialble: " + s.line());
@@ -702,7 +702,7 @@ public class GitUtil {
       public void consume(CommittedChangeList committedChangeList) {
         rc.add(committedChangeList);
       }
-    });
+    }, false);
 
     return rc;
   }
index 4989f8661272d52c1a5a3369f17685e067ffdced..cd387c8750bd29e8a40c1133970e8b8817fbee11 100644 (file)
@@ -710,6 +710,6 @@ public class GitVcs extends AbstractVcs {
   public CommittedChangeList getRevisionChanges(final VcsFileRevision revision, final VirtualFile file) throws VcsException {
     final Project project = getProject();
     final VirtualFile vcsRoot = GitUtil.getGitRoot(file);
-    return GitChangeUtils.getRevisionChanges(project, vcsRoot, revision.getRevisionNumber().asString());
+    return GitChangeUtils.getRevisionChanges(project, vcsRoot, revision.getRevisionNumber().asString(), false);
   }
 }
index 423732c324d79acba9016f14d4901173d3a990b5..51eb6ce3985a337794f00cf52d1120bf787c7ae4 100644 (file)
@@ -104,7 +104,7 @@ public class GitShowAllSubmittedFilesAction extends AnAction implements DumbAwar
         indicator.setIndeterminate(true);
         try {
           VirtualFile vcsRoot = GitUtil.getGitRoot(file);
-          final CommittedChangeList changeList = GitChangeUtils.getRevisionChanges(project, vcsRoot, revision);
+          final CommittedChangeList changeList = GitChangeUtils.getRevisionChanges(project, vcsRoot, revision, false);
           if (changeList != null) {
             UIUtil.invokeLaterIfNeeded(new Runnable() {
               public void run() {
index 3a95c881c7b2c46afb242bc27571eebbd48920c4..7ac25f16209762d39e38f06b4581e910b06afcd9 100644 (file)
@@ -42,7 +42,7 @@ import java.util.*;
  */
 public class GitChangeUtils {
   /**
-   * the pattern for committed changelist assumed by {@link #parseChangeList(Project, VirtualFile, StringScanner)}
+   * the pattern for committed changelist assumed by {@link #parseChangeList(com.intellij.openapi.project.Project,com.intellij.openapi.vfs.VirtualFile,git4idea.commands.StringScanner,boolean)}
    */
   public static final String COMMITTED_CHANGELIST_FORMAT = "%ct%n%H%n%P%n%an%x20%x3C%ae%x3E%n%cn%x20%x3C%ce%x3E%n%s%n%x00%n%b%n%x00";
 
@@ -253,10 +253,11 @@ public class GitChangeUtils {
    * @param project      the project file
    * @param root         the git root
    * @param revisionName the name of revision (might be tag)
+   * @param skipDiffsForMerge
    * @return change list for the respective revision
    * @throws VcsException in case of problem with running git
    */
-  public static CommittedChangeList getRevisionChanges(Project project, VirtualFile root, String revisionName) throws VcsException {
+  public static CommittedChangeList getRevisionChanges(Project project, VirtualFile root, String revisionName, boolean skipDiffsForMerge) throws VcsException {
     GitSimpleHandler h = new GitSimpleHandler(project, root, GitCommand.SHOW);
     h.setNoSSH(true);
     h.setSilent(true);
@@ -265,7 +266,7 @@ public class GitChangeUtils {
     String output = h.run();
     StringScanner s = new StringScanner(output);
     try {
-      return parseChangeList(project, root, s);
+      return parseChangeList(project, root, s, skipDiffsForMerge);
     }
     catch (RuntimeException e) {
       throw e;
@@ -285,10 +286,11 @@ public class GitChangeUtils {
    * @param project the project
    * @param root    the git root
    * @param s       the scanner for log or show command output
+   * @param skipDiffsForMerge
    * @return the parsed changelist
    * @throws VcsException if there is a problem with running git
    */
-  public static CommittedChangeList parseChangeList(Project project, VirtualFile root, StringScanner s) throws VcsException {
+  public static CommittedChangeList parseChangeList(Project project, VirtualFile root, StringScanner s, boolean skipDiffsForMerge) throws VcsException {
     ArrayList<Change> changes = new ArrayList<Change>();
     // parse commit information
     final Date commitDate = GitUtil.parseTimestamp(s.line());
@@ -315,7 +317,7 @@ public class GitChangeUtils {
     GitRevisionNumber thisRevision = new GitRevisionNumber(revisionNumber, commitDate);
     GitRevisionNumber parentRevision = parents.length > 0 ? loadRevision(project, root, parents[0]) : null;
     long number = longForSHAHash(revisionNumber);
-    if (parents.length <= 1) {
+    if (skipDiffsForMerge || (parents.length <= 1)) {
       // This is the first or normal commit with the single parent.
       // Just parse changes in this commit as returned by the show command.
       parseChanges(project, root, thisRevision, parentRevision, s, changes, null);
index e4db51461b1294637e4148ba047ec5e3613d7b7d..d8bd592e96d2c0284cad9083aae4e6ee6b1949c0 100644 (file)
@@ -200,7 +200,7 @@ public class GitCommittedChangeListProvider implements CachingCommittedChangesPr
           h.addParameters(GitUtil.formatLongRev(afterRev) + "..");
         }
       }
-    }, consumer);
+    }, consumer, false);
   }
 
   /**
index 1395a1331096e0cdf6b10c176ab4162dfb415e4b..78a0954f00413aa68b20617c5487ee721c2f5c4e 100644 (file)
@@ -66,7 +66,7 @@ class GitTreeController implements ManageGitTreeView {
     @Override
     public CommittedChangeList createValue(SHAHash key) {
       try {
-        return GitChangeUtils.getRevisionChanges(myProject, myRoot, key.getValue());
+        return GitChangeUtils.getRevisionChanges(myProject, myRoot, key.getValue(), true);
       }
       catch (VcsException e) {
         return new CommittedChangeListImpl(e.getMessage(), "", "", -1, null, Collections.<Change>emptyList());