changeset 547:42aeecf691f9

Introduce OperationContext
author Dmitry Neverov <dmitry.neverov@jetbrains.com>
date Thu, 21 Feb 2013 17:40:32 +0400
parents dc7aae21ef23
children 6c8911ed66f2
files mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/OperationContext.java mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/ServerHgRepo.java
diffstat 2 files changed, 49 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/OperationContext.java	Thu Feb 21 17:40:32 2013 +0400
@@ -0,0 +1,42 @@
+package jetbrains.buildServer.buildTriggers.vcs.mercurial;
+
+import jetbrains.buildServer.buildTriggers.vcs.mercurial.command.HgVcsRoot;
+import jetbrains.buildServer.vcs.VcsException;
+import org.jetbrains.annotations.NotNull;
+
+import java.io.File;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+public class OperationContext {
+
+  private final MercurialVcsSupport myVcs;
+  private Set<File> mySyncedDirs = new HashSet<File>();
+  private Map<String, HgVersion> myHgVersions = new HashMap<String, HgVersion>();
+
+  public OperationContext(@NotNull MercurialVcsSupport vcs) {
+    myVcs = vcs;
+  }
+
+
+  public void syncRepository(@NotNull final HgVcsRoot root) throws VcsException {
+    File dir = myVcs.getWorkingDir(root);
+    if (mySyncedDirs.contains(dir))
+      return;
+    myVcs.syncRepository(root);
+    mySyncedDirs.add(dir);
+  }
+
+  @NotNull
+  public HgVersion getHgVersion(@NotNull ServerHgRepo repo) throws VcsException {
+    String hgPath = repo.getHgPath();
+    HgVersion cachedVersion = myHgVersions.get(hgPath);
+    if (cachedVersion != null)
+      return cachedVersion;
+    HgVersion version = repo.version().call();
+    myHgVersions.put(hgPath, version);
+    return version;
+  }
+}
--- a/mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/ServerHgRepo.java	Thu Feb 21 17:35:17 2013 +0400
+++ b/mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/ServerHgRepo.java	Thu Feb 21 17:40:32 2013 +0400
@@ -18,6 +18,7 @@
   private final ServerPluginConfig myConfig;
   private File myLogTemplate;
   private File myLogNoFilesTemplate;
+  private OperationContext myContext;
 
   public ServerHgRepo(@NotNull CommandSettingsFactory commandSettingsFactory,
                       @NotNull ServerPluginConfig config,
@@ -29,6 +30,10 @@
     myConfig = config;
   }
 
+  public void setOperationContext(@NotNull OperationContext context) {
+    myContext = context;
+  }
+
   public ServerHgRepo withLogTemplates(@NotNull File logTemplate, @NotNull File logNoFilesTemplate) {
     myLogTemplate = logTemplate;
     myLogNoFilesTemplate = logNoFilesTemplate;
@@ -64,6 +69,8 @@
   }
 
   private HgVersion getHgVersion() throws VcsException {
+    if (myContext != null)
+      return myContext.getHgVersion(this);
     return version().call();
   }