changeset 25:f4e0050e2a2f

resolve server url from config parameter
author Evgeniy.Koshkin
date Tue, 06 Aug 2013 14:18:09 +0400
parents 9cbdbfed44f4
children 87b24e4efcc3
files agent/src/jetbrains/buildServer/symbols/FileUrlProvider.java agent/src/jetbrains/buildServer/symbols/PdbFilePatcher.java agent/src/jetbrains/buildServer/symbols/SrcSrvStreamBuilder.java agent/src/jetbrains/buildServer/symbols/SrcSrvStreamProvider.java agent/src/jetbrains/buildServer/symbols/SymbolsIndexer.java common/src/jetbrains/buildServer/symbols/SymbolsConstants.java tests/src/PdbFilePatcherTest.java
diffstat 7 files changed, 115 insertions(+), 77 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/agent/src/jetbrains/buildServer/symbols/FileUrlProvider.java	Tue Aug 06 14:18:09 2013 +0400
@@ -0,0 +1,30 @@
+package jetbrains.buildServer.symbols;
+
+import java.io.File;
+import java.io.IOException;
+
+/**
+ * @author Evgeniy.Koshkin
+ */
+public class FileUrlProvider {
+  private static final String GUEST_AUTH_APP_SOURCES = "/guestAuth/app/sources";
+
+  private final String myServerUrl;
+  private final long myBuildId;
+  private final File mySourcesRootDirectory;
+
+  public FileUrlProvider(String serverUrl, long buildId, File sourcesRootDirectory) {
+    myServerUrl = serverUrl;
+    myBuildId = buildId;
+    mySourcesRootDirectory = sourcesRootDirectory;
+  }
+
+  public String getHttpAlias() {
+    return String.format("%s/%s/builds/id-%d/sources/files", myServerUrl, GUEST_AUTH_APP_SOURCES, myBuildId);
+  }
+
+  public String getFileUrl(String path) throws IOException {
+    String sourcesRootDirectoryPath = mySourcesRootDirectory.getCanonicalPath();
+    return path.substring(sourcesRootDirectoryPath.length() + 1).replace(File.separator, "/");
+  }
+}
--- a/agent/src/jetbrains/buildServer/symbols/PdbFilePatcher.java	Mon Aug 05 20:57:02 2013 +0400
+++ b/agent/src/jetbrains/buildServer/symbols/PdbFilePatcher.java	Tue Aug 06 14:18:09 2013 +0400
@@ -18,11 +18,11 @@
   private final SrcToolExe mySrcToolExe = new SrcToolExe();
 
   private final File myHomeDir;
-  private SrcSrvStreamProvider myIndexInputProvider;
+  private SrcSrvStreamBuilder mySrcSrvStreamBuilder;
 
-  public PdbFilePatcher(final File homeDir, final SrcSrvStreamProvider indexInputProvider) {
+  public PdbFilePatcher(final File homeDir, final SrcSrvStreamBuilder srcSrvStreamBuilder) {
     myHomeDir = homeDir;
-    myIndexInputProvider = indexInputProvider;
+    mySrcSrvStreamBuilder = srcSrvStreamBuilder;
   }
 
   public void patch(File symbolsFile, BuildProgressLogger buildLogger) throws Exception {
@@ -34,11 +34,7 @@
       return;
     }
     final File tmpFile = FileUtil.createTempFile(myHomeDir, "pdb-", ".patch", false);
-    myIndexInputProvider.dumpStreamToFile(tmpFile, sourceFiles);
+    mySrcSrvStreamBuilder.dumpStreamToFile(tmpFile, sourceFiles);
     myPdbStrExe.doCommand(PdbStrExeCommand.WRITE, symbolsFile, tmpFile, PdbStrExe.SRCSRV_STREAM_NAME);
-//    final File tmpFile1 = FileUtil.createTempFile(myHomeDir, "pdb-", ".patch", false);
-//    myPdbStrExe.doCommand(PdbStrExeCommand.READ, symbolsFile, tmpFile1, PdbStrExe.SRCSRV_STREAM_NAME);
-//    if(!FileUtil.checkContentEqual(tmpFile, tmpFile1))
-//      throw new Exception("'srcsrv' stream content written to pdb differs from initial one");
   }
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/agent/src/jetbrains/buildServer/symbols/SrcSrvStreamBuilder.java	Tue Aug 06 14:18:09 2013 +0400
@@ -0,0 +1,60 @@
+/*
+ * Copyright 2000-2013 JetBrains s.r.o.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package jetbrains.buildServer.symbols;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.Collection;
+
+/**
+ * @author Evgeniy.Koshkin
+ */
+public class SrcSrvStreamBuilder {
+
+  private final FileUrlProvider myUrlProvider;
+
+  public SrcSrvStreamBuilder(final FileUrlProvider urlProvider) {
+    myUrlProvider = urlProvider;
+  }
+
+  public void dumpStreamToFile(File targetFile, Collection<File> sourceFiles) throws IOException {
+    final FileWriter fileWriter = new FileWriter(targetFile.getPath(), true);
+
+    try {
+      fileWriter.write("SRCSRV: ini ------------------------------------------------\r\n");
+      fileWriter.write("VERSION=3\r\n");
+      fileWriter.write("INDEXVERSION=2\r\n");
+      fileWriter.write("VERCTRL=http\r\n");
+      fileWriter.write("SRCSRV: variables ------------------------------------------\r\n");
+      fileWriter.write("SRCSRVVERCTRL=http\r\n");
+      fileWriter.write(String.format("HTTP_ALIAS=%s\r\n", myUrlProvider.getHttpAlias()));
+      fileWriter.write("HTTP_EXTRACT_TARGET=%HTTP_ALIAS%/%var2%\r\n");
+      fileWriter.write("SRCSRVTRG=%HTTP_EXTRACT_TARGET%\r\n");
+      fileWriter.write("SRCSRVCMD=\r\n");
+      fileWriter.write("SRCSRV: source files ------------------------------------------\r\n");
+      for(File sourceFile : sourceFiles){
+        final String sourceFileCanonical = sourceFile.getCanonicalPath();
+        fileWriter.write(String.format("%s*%s\r\n", sourceFileCanonical, myUrlProvider.getFileUrl(sourceFileCanonical)));
+      }
+      fileWriter.write("SRCSRV: end ------------------------------------------------");
+    }
+    finally {
+      fileWriter.close();
+    }
+  }
+}
--- a/agent/src/jetbrains/buildServer/symbols/SrcSrvStreamProvider.java	Mon Aug 05 20:57:02 2013 +0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,65 +0,0 @@
-/*
- * Copyright 2000-2013 JetBrains s.r.o.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package jetbrains.buildServer.symbols;
-
-import java.io.File;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.util.Collection;
-
-/**
- * @author Evgeniy.Koshkin
- */
-public class SrcSrvStreamProvider {
-
-  private static final String myRestApiUrl = "http://unit-519.labs.intelliJ.net:8111/bs/guestAuth/app/sources";
-
-  private long myBuildId;
-  private File mySourcesRootDirectory;
-
-  public SrcSrvStreamProvider(final long buildId, final File sourcesRootDirectory) {
-    myBuildId = buildId;
-    mySourcesRootDirectory = sourcesRootDirectory;
-  }
-
-  public void dumpStreamToFile(File targetFile, Collection<File> sourceFiles) throws IOException {
-    final FileWriter fileWriter = new FileWriter(targetFile.getPath(), true);
-
-    try {
-      fileWriter.write("SRCSRV: ini ------------------------------------------------\r\n");
-      fileWriter.write("VERSION=3\r\n");
-      fileWriter.write("INDEXVERSION=2\r\n");
-      fileWriter.write("VERCTRL=http\r\n");
-      fileWriter.write("SRCSRV: variables ------------------------------------------\r\n");
-      fileWriter.write("SRCSRVVERCTRL=http\r\n");
-      fileWriter.write(String.format("HTTP_ALIAS=%s/builds/id-%d/sources/files\r\n", myRestApiUrl, myBuildId));
-      fileWriter.write("HTTP_EXTRACT_TARGET=%HTTP_ALIAS%/%var2%\r\n");
-      fileWriter.write("SRCSRVTRG=%HTTP_EXTRACT_TARGET%\r\n");
-      fileWriter.write("SRCSRVCMD=\r\n");
-      fileWriter.write("SRCSRV: source files ------------------------------------------\r\n");
-      String sourcesRootDirectoryPath = mySourcesRootDirectory.getCanonicalPath();
-      for(File sourceFile : sourceFiles){
-        final String sourceFileCanonical = sourceFile.getCanonicalPath();
-        fileWriter.write(String.format("%s*%s\r\n", sourceFileCanonical, sourceFileCanonical.substring(sourcesRootDirectoryPath.length() + 1).replace(File.separator, "/")));
-      }
-      fileWriter.write("SRCSRV: end ------------------------------------------------");
-    }
-    finally {
-      fileWriter.close();
-    }
-  }
-}
--- a/agent/src/jetbrains/buildServer/symbols/SymbolsIndexer.java	Mon Aug 05 20:57:02 2013 +0400
+++ b/agent/src/jetbrains/buildServer/symbols/SymbolsIndexer.java	Tue Aug 06 14:18:09 2013 +0400
@@ -84,8 +84,12 @@
     }
     LOG.debug(SymbolsConstants.BUILD_FEATURE_TYPE + " build feature enabled. Searching for suitable files.");
     final Collection<File> pdbFiles = getArtifactPathsByFileExtension(artifacts, PDB_FILE_EXTENSION);
-    final SrcSrvStreamProvider srcSrvStreamProvider = new SrcSrvStreamProvider(myBuild.getBuildId(), myBuild.getCheckoutDirectory());
-    final PdbFilePatcher pdbFilePatcher = new PdbFilePatcher(myBuild.getBuildTempDirectory(), srcSrvStreamProvider);
+    if(pdbFiles.isEmpty()) return;
+
+    final FileUrlProvider urlProvider = getUrlProviderForBuild(myBuild, buildLogger);
+    if(urlProvider == null) return;
+
+    final PdbFilePatcher pdbFilePatcher = new PdbFilePatcher(myBuild.getBuildTempDirectory(), new SrcSrvStreamBuilder(urlProvider));
     for(File pdbFile : pdbFiles){
       try {
         buildLogger.message("Indexing sources appeared in file " + pdbFile.getAbsolutePath());
@@ -99,6 +103,18 @@
     }
   }
 
+  @Nullable
+  private FileUrlProvider getUrlProviderForBuild(@NotNull AgentRunningBuild build, BuildProgressLogger buildLogger) {
+    String serverUrl = build.getSharedConfigParameters().get(SymbolsConstants.SERVER_URL_PARAMETER_NAME);
+    if(serverUrl == null){
+      final String message = String.format("Configuration parameter %s was not set. ", SymbolsConstants.SERVER_URL_PARAMETER_NAME);
+      LOG.warn(message);
+      buildLogger.warning(message);
+      return null;
+    }
+    return new FileUrlProvider(serverUrl, build.getBuildId(), build.getCheckoutDirectory());
+  }
+
   private Collection<File> getArtifactPathsByFileExtension(List<ArtifactsCollection> artifactsCollections, String fileExtension){
     final Collection<File> result = new HashSet<File>();
     for(ArtifactsCollection artifactsCollection : artifactsCollections){
--- a/common/src/jetbrains/buildServer/symbols/SymbolsConstants.java	Mon Aug 05 20:57:02 2013 +0400
+++ b/common/src/jetbrains/buildServer/symbols/SymbolsConstants.java	Tue Aug 06 14:18:09 2013 +0400
@@ -5,4 +5,5 @@
  */
 public class SymbolsConstants {
   public static final String BUILD_FEATURE_TYPE = "symbol-indexer";
+  public static final String SERVER_URL_PARAMETER_NAME = "symbols.server-url";
 }
--- a/tests/src/PdbFilePatcherTest.java	Mon Aug 05 20:57:02 2013 +0400
+++ b/tests/src/PdbFilePatcherTest.java	Tue Aug 06 14:18:09 2013 +0400
@@ -1,7 +1,7 @@
 import com.intellij.openapi.util.io.FileUtil;
 import jetbrains.buildServer.BaseTestCase;
 import jetbrains.buildServer.symbols.PdbFilePatcher;
-import jetbrains.buildServer.symbols.SrcSrvStreamProvider;
+import jetbrains.buildServer.symbols.SrcSrvStreamBuilder;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
@@ -20,7 +20,7 @@
   public void setUp() throws Exception {
     super.setUp();
     myTestHomeDir = createTempDir();
-    myPatcher = new PdbFilePatcher(myTestHomeDir, new SrcSrvStreamProvider(1111, new File("c:\\Data\\Work\\TeamCity\\trunk\\symbols-native")));
+    myPatcher = new PdbFilePatcher(myTestHomeDir, new SrcSrvStreamBuilder(null));
   }
 
   @Test