changeset 838:7e461ea697f1

Faster working dir revision calculation We used to use 'hg identity' to get a working dir revision. It shows the revision but also adds a '+' sign if some files were changed. For repository with a size of R# it takes around 5 minutes to understand that all files are unmodified and '+' sign is not needed. To update sources we don't use this information at all. Switch to 'hg parents' which takes around a second because it doesn't check if files were modified.
author Dmitry Neverov <dmitry.neverov@jetbrains.com>
date Mon, 02 Jun 2014 16:20:41 +0200
parents 58d083742bc4
children 64fb4e1e23a2
files mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/HgRepo.java mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/ParentsCommand.java
diffstat 2 files changed, 13 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/HgRepo.java	Mon Jun 02 14:23:40 2014 +0200
+++ b/mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/HgRepo.java	Mon Jun 02 16:20:41 2014 +0200
@@ -24,7 +24,10 @@
 
 import java.io.File;
 import java.io.IOException;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 import static java.util.Arrays.asList;
 import static java.util.Collections.emptyList;
@@ -188,8 +191,13 @@
     return files;
   }
 
+  @NotNull
   public String getWorkingDirRevision() throws VcsException {
-    return id().inLocalRepository().call();
+    List<String> workingDirParents = parents().call();
+    if (workingDirParents.isEmpty())
+      return LogCommand.ZERO_PARENT_SHORT_ID;//'hg id' shows zeroid when a working dir has no parents
+    //if a working dir is in an uncommitted merge state, choose the first parent
+    return workingDirParents.get(0);
   }
 
   public boolean containsRevision(@NotNull String revision) {
--- a/mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/ParentsCommand.java	Mon Jun 02 14:23:40 2014 +0200
+++ b/mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/ParentsCommand.java	Mon Jun 02 16:20:41 2014 +0200
@@ -16,6 +16,7 @@
 
 package jetbrains.buildServer.buildTriggers.vcs.mercurial.command;
 
+import jetbrains.buildServer.util.StringUtil;
 import jetbrains.buildServer.vcs.VcsException;
 import org.jetbrains.annotations.NotNull;
 
@@ -47,6 +48,8 @@
     CommandResult res = runCommand(cli);
     List<String> parentRevisions = new ArrayList<String>();
     for (String line : res.getStdout().split("\n")) {
+      if (StringUtil.isEmpty(line))
+        continue;
       parentRevisions.add(new ChangeSet(line).getId());
     }
     return parentRevisions;