changeset 418:e56678c38fd5 Faradi-7.0.x

Optimize parent calculation
author Dmitry Neverov <dmitry.neverov@jetbrains.com>
date Wed, 25 Apr 2012 17:56:22 +0400
parents b34ffc622efc
children 743dc1646555
files mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/LogCommand.java
diffstat 1 files changed, 16 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/LogCommand.java	Mon Mar 05 10:42:02 2012 +0400
+++ b/mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/LogCommand.java	Wed Apr 25 17:56:22 2012 +0400
@@ -248,15 +248,29 @@
   }
 
   private void assignTrivialParents(final @NotNull List<ChangeSet> csets) throws VcsException {
+    Map<Integer, ChangeSet> revNumberMap = makeMapByRevNumber(csets);
     for (ChangeSet cset : csets) {
       if (cset.getParents().isEmpty()) {
         int parentRevNumber = cset.getRevNumber() - 1;
-        String parentId = getIdOf(parentRevNumber);
-        cset.addParent(new ChangeSetRevision(parentRevNumber, parentId));
+        ChangeSet parent = revNumberMap.get(parentRevNumber);
+        if (parent != null) {
+          cset.addParent(parent);
+        } else {
+          String parentId = getIdOf(parentRevNumber);
+          cset.addParent(new ChangeSetRevision(parentRevNumber, parentId));
+        }
       }
     }
   }
 
+  private Map<Integer, ChangeSet> makeMapByRevNumber(@NotNull List<ChangeSet> csets) throws VcsException {
+    Map<Integer, ChangeSet> csetMap = new HashMap<Integer, ChangeSet>();
+    for (ChangeSet cset : csets) {
+      csetMap.put(cset.getRevNumber(), cset);
+    }
+    return csetMap;
+  }
+
   private String getIdOf(int revNumber) throws VcsException {
     if (revNumber < 0)
       return ZERO_PARENT_ID;