changeset 667:bcee3a8b2c7b

Add TTL for list file policy
author Dmitry Neverov <dmitry.neverov@jetbrains.com>
date Fri, 04 Oct 2013 15:59:42 +0400
parents 557d41234a97
children c32869bd757b
files mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/ListFilesSupport.java mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialVcsSupport.java mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/ServerPluginConfig.java mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/ServerPluginConfigImpl.java mercurial-tests/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/ServerPluginConfigBuilder.java
diffstat 5 files changed, 25 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/ListFilesSupport.java	Tue Oct 01 12:52:11 2013 +0400
+++ b/mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/ListFilesSupport.java	Fri Oct 04 15:59:42 2013 +0400
@@ -22,18 +22,25 @@
 public class ListFilesSupport implements ListDirectChildrenPolicy {
 
   private final MercurialVcsSupport myVcs;
+  private final ServerPluginConfig myConfig;
   private final HgVcsRootFactory myHgVcsRootFactory;
+  private long myLastSyncTime = -1;
 
   public ListFilesSupport(@NotNull MercurialVcsSupport vcs,
+                          @NotNull ServerPluginConfig config,
                           @NotNull HgVcsRootFactory hgVcsRootFactory) {
     myVcs = vcs;
+    myConfig = config;
     myHgVcsRootFactory = hgVcsRootFactory;
   }
 
   @NotNull
   public List<VcsFileData> listFiles(@NotNull VcsRoot root, @NotNull String dir) throws VcsException {
     HgVcsRoot hgRoot = myHgVcsRootFactory.createHgRoot(root);
-    myVcs.syncRepository(hgRoot);
+    if (isOutOfDate()) {
+      myVcs.syncRepository(hgRoot);
+      myLastSyncTime = System.currentTimeMillis();
+    }
     String dirPath = isEmpty(dir) || dir.endsWith("/") ? dir : dir + "/";
     return listFilesIn(hgRoot, dirPath);
   }
@@ -58,4 +65,10 @@
     }
     return result;
   }
+
+  private boolean isOutOfDate() {
+    if (myLastSyncTime == -1)
+      return true;
+    return System.currentTimeMillis() - myLastSyncTime > myConfig.listFilesTTLSeconds() * 1000;
+  }
 }
--- a/mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialVcsSupport.java	Tue Oct 01 12:52:11 2013 +0400
+++ b/mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialVcsSupport.java	Fri Oct 04 15:59:42 2013 +0400
@@ -653,7 +653,7 @@
 
   @Override
   public ListFilesPolicy getListFilesPolicy() {
-    return new ListFilesSupport(this, myHgVcsRootFactory);
+    return new ListFilesSupport(this, myConfig, myHgVcsRootFactory);
   }
 
 
--- a/mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/ServerPluginConfig.java	Tue Oct 01 12:52:11 2013 +0400
+++ b/mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/ServerPluginConfig.java	Fri Oct 04 15:59:42 2013 +0400
@@ -35,4 +35,6 @@
   public boolean reportSubrepoChangesFileStatus();
 
   public boolean allowSourceCaching();
+
+  public int listFilesTTLSeconds();
 }
--- a/mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/ServerPluginConfigImpl.java	Tue Oct 01 12:52:11 2013 +0400
+++ b/mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/ServerPluginConfigImpl.java	Fri Oct 04 15:59:42 2013 +0400
@@ -96,4 +96,8 @@
   public boolean allowSourceCaching() {
     return TeamCityProperties.getBoolean("teamcity.hg.allowSourceCaching");
   }
+
+  public int listFilesTTLSeconds() {
+    return TeamCityProperties.getInteger("teamcity.hg.listFilesTTLSeconds", 60);
+  }
 }
--- a/mercurial-tests/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/ServerPluginConfigBuilder.java	Tue Oct 01 12:52:11 2013 +0400
+++ b/mercurial-tests/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/ServerPluginConfigBuilder.java	Fri Oct 04 15:59:42 2013 +0400
@@ -82,6 +82,10 @@
       public boolean allowSourceCaching() {
         return false;
       }
+
+      public int listFilesTTLSeconds() {
+        return 0;
+      }
     };
   }