changeset 41:4c516ddbddf1

located srcsrv tools home dir under win sdk home dir
author Evgeniy.Koshkin
date Fri, 30 Aug 2013 15:29:18 +0400
parents 7f6924aefb24
children cfdb5f116242
files agent/src/jetbrains/buildServer/symbols/PdbFilePatcher.java agent/src/jetbrains/buildServer/symbols/SymbolsIndexer.java agent/src/jetbrains/buildServer/symbols/tools/PdbStrExe.java agent/src/jetbrains/buildServer/symbols/tools/SrcToolExe.java agent/src/jetbrains/buildServer/symbols/tools/WinDbgToolsHelper.java tests/src/PdbFilePatcherTest.java
diffstat 6 files changed, 65 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- a/agent/src/jetbrains/buildServer/symbols/PdbFilePatcher.java	Fri Aug 30 15:20:14 2013 +0400
+++ b/agent/src/jetbrains/buildServer/symbols/PdbFilePatcher.java	Fri Aug 30 15:29:18 2013 +0400
@@ -6,6 +6,7 @@
 import jetbrains.buildServer.symbols.tools.SrcToolExe;
 import jetbrains.buildServer.util.FileUtil;
 import org.apache.log4j.Logger;
+import org.jetbrains.annotations.NotNull;
 
 import java.io.File;
 import java.util.Collection;
@@ -16,17 +17,17 @@
 public class PdbFilePatcher {
 
   private static final Logger LOG = Logger.getLogger(PdbFilePatcher.class);
-  private static final File TOOLS_HOME_DIR = new File("c:\\Program Files (x86)\\Windows Kits\\8.0\\Debuggers\\x64\\srcsrv\\");
-
-  private final PdbStrExe myPdbStrExe = new PdbStrExe(TOOLS_HOME_DIR);
-  private final SrcToolExe mySrcToolExe = new SrcToolExe(TOOLS_HOME_DIR);
 
-  private final File myHomeDir;
-  private SrcSrvStreamBuilder mySrcSrvStreamBuilder;
+  private final File myWorkingDir;
+  private final SrcSrvStreamBuilder mySrcSrvStreamBuilder;
+  private final PdbStrExe myPdbStrExe;
+  private final SrcToolExe mySrcToolExe;
 
-  public PdbFilePatcher(final File homeDir, final SrcSrvStreamBuilder srcSrvStreamBuilder) {
-    myHomeDir = homeDir;
+  public PdbFilePatcher(@NotNull final File workingDir, @NotNull final File srcSrvHomeDir, @NotNull final SrcSrvStreamBuilder srcSrvStreamBuilder) {
+    myWorkingDir = workingDir;
     mySrcSrvStreamBuilder = srcSrvStreamBuilder;
+    myPdbStrExe = new PdbStrExe(srcSrvHomeDir);
+    mySrcToolExe = new SrcToolExe(srcSrvHomeDir);
   }
 
   public void patch(File symbolsFile, BuildProgressLogger buildLogger) throws Exception {
@@ -37,7 +38,7 @@
       LOG.debug(message);
       return;
     }
-    final File tmpFile = FileUtil.createTempFile(myHomeDir, "pdb-", ".patch", false);
+    final File tmpFile = FileUtil.createTempFile(myWorkingDir, "pdb-", ".patch", false);
     mySrcSrvStreamBuilder.dumpStreamToFile(tmpFile, sourceFiles);
     myPdbStrExe.doCommand(PdbStrExeCommands.WRITE, symbolsFile, tmpFile, PdbStrExe.SRCSRV_STREAM_NAME);
   }
--- a/agent/src/jetbrains/buildServer/symbols/SymbolsIndexer.java	Fri Aug 30 15:20:14 2013 +0400
+++ b/agent/src/jetbrains/buildServer/symbols/SymbolsIndexer.java	Fri Aug 30 15:29:18 2013 +0400
@@ -6,6 +6,7 @@
 import jetbrains.buildServer.agent.impl.artifacts.ArtifactsCollection;
 import jetbrains.buildServer.agent.plugins.beans.PluginDescriptor;
 import jetbrains.buildServer.symbols.tools.JetSymbolsExe;
+import jetbrains.buildServer.symbols.tools.WinDbgToolsHelper;
 import jetbrains.buildServer.util.EventDispatcher;
 import jetbrains.buildServer.util.FileUtil;
 import org.apache.log4j.Logger;
@@ -81,6 +82,15 @@
       LOG.debug(SymbolsConstants.BUILD_FEATURE_TYPE + " build feature disabled. No indexing performed.");
       return;
     }
+
+    final File srcSrvHomeDir = WinDbgToolsHelper.getSrcSrvHomeDir(myBuild);
+    if(srcSrvHomeDir == null) {
+      buildLogger.error("Failed to find Source Server tools home directory.");
+      LOG.error("Failed to find Source Server tools home directory.");
+      return;
+    }
+    buildLogger.message("Source Server tools home directory located. " + srcSrvHomeDir.getAbsolutePath());
+
     LOG.debug(SymbolsConstants.BUILD_FEATURE_TYPE + " build feature enabled. Searching for suitable files.");
     final Collection<File> pdbFiles = getArtifactPathsByFileExtension(artifacts, PDB_FILE_EXTENSION);
     if(pdbFiles.isEmpty()) return;
@@ -88,7 +98,7 @@
     final FileUrlProvider urlProvider = FileUrlProviderFactory.getProvider(myBuild, buildLogger);
     if(urlProvider == null) return;
 
-    final PdbFilePatcher pdbFilePatcher = new PdbFilePatcher(myBuild.getBuildTempDirectory(), new SrcSrvStreamBuilder(urlProvider));
+    final PdbFilePatcher pdbFilePatcher = new PdbFilePatcher(myBuild.getBuildTempDirectory(), srcSrvHomeDir, new SrcSrvStreamBuilder(urlProvider));
     for(File pdbFile : pdbFiles){
       if(mySymbolsToProcess.contains(pdbFile)){
         LOG.debug(String.format("File %s already processed. Skipped.", pdbFile.getAbsolutePath()));
--- a/agent/src/jetbrains/buildServer/symbols/tools/PdbStrExe.java	Fri Aug 30 15:20:14 2013 +0400
+++ b/agent/src/jetbrains/buildServer/symbols/tools/PdbStrExe.java	Fri Aug 30 15:29:18 2013 +0400
@@ -36,8 +36,8 @@
 
   private final File myPath;
 
-  public PdbStrExe(File homeDir) {
-    myPath = new File(homeDir, PDBSTR_EXE);
+  public PdbStrExe(File srcSrvHomeDir) {
+    myPath = new File(srcSrvHomeDir, PDBSTR_EXE);
   }
 
   public ExecResult doCommand(final PdbStrExeCommands cmd, final File pdbFile, final File inputStreamFile, final String streamName){
--- a/agent/src/jetbrains/buildServer/symbols/tools/SrcToolExe.java	Fri Aug 30 15:20:14 2013 +0400
+++ b/agent/src/jetbrains/buildServer/symbols/tools/SrcToolExe.java	Fri Aug 30 15:29:18 2013 +0400
@@ -36,8 +36,8 @@
 
   private final File mySrcToolPath;
 
-  public SrcToolExe(File homeDir) {
-    mySrcToolPath = new File(homeDir, SRCTOOL_EXE);
+  public SrcToolExe(File srcSrvHomeDir) {
+    mySrcToolPath = new File(srcSrvHomeDir, SRCTOOL_EXE);
   }
 
   public Collection<File> getReferencedSourceFiles(File symbolsFile) {
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/agent/src/jetbrains/buildServer/symbols/tools/WinDbgToolsHelper.java	Fri Aug 30 15:29:18 2013 +0400
@@ -0,0 +1,39 @@
+package jetbrains.buildServer.symbols.tools;
+
+import jetbrains.buildServer.agent.AgentRunningBuild;
+import jetbrains.buildServer.dotNet.DotNetConstants;
+import org.apache.log4j.Logger;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import java.io.File;
+import java.util.Map;
+
+/**
+ * @author Evgeniy.Koshkin
+ */
+public class WinDbgToolsHelper {
+
+  private static final Logger LOG = Logger.getLogger(WinDbgToolsHelper.class);
+
+  private static final String SRCSRV_HOME_DIR_RELATIVE_X64 = "\\Debuggers\\x64\\srcsrv\\";
+  private static final String SRCSRV_HOME_DIR_RELATIVE_X86 = "\\Debuggers\\x86\\srcsrv\\";
+
+  @Nullable
+  public static File getSrcSrvHomeDir(@NotNull AgentRunningBuild build) {
+    final Map<String,String> agentConfigParameters = build.getAgentConfiguration().getConfigurationParameters();
+    for (String paramName : agentConfigParameters.keySet()){
+      if(paramName.startsWith(DotNetConstants.WINDOWS_SDK) && paramName.endsWith(DotNetConstants.PATH)){
+        final File winSdkHomeDir = new File(agentConfigParameters.get(paramName));
+        if(!winSdkHomeDir.exists()) continue;
+        File dir = new File(winSdkHomeDir, SRCSRV_HOME_DIR_RELATIVE_X64);
+        if(dir.exists() && dir.isDirectory()) return dir;
+        dir = new File(winSdkHomeDir, SRCSRV_HOME_DIR_RELATIVE_X86);
+        if(dir.exists() && dir.isDirectory()) return dir;
+        LOG.debug("Failed to find Source Server tools home directory under Windows SDK home directory detected on path " + winSdkHomeDir.getAbsolutePath());
+      }
+    }
+    LOG.debug("None of Windows SDK versions are mentioned in agent configuration.");
+    return null;
+  }
+}
--- a/tests/src/PdbFilePatcherTest.java	Fri Aug 30 15:20:14 2013 +0400
+++ b/tests/src/PdbFilePatcherTest.java	Fri Aug 30 15:29:18 2013 +0400
@@ -20,7 +20,7 @@
   public void setUp() throws Exception {
     super.setUp();
     myTestHomeDir = createTempDir();
-    myPatcher = new PdbFilePatcher(myTestHomeDir, new SrcSrvStreamBuilder(null));
+    myPatcher = new PdbFilePatcher(myTestHomeDir, myTestHomeDir, new SrcSrvStreamBuilder(null));
   }
 
   @Test