Mercurial > hg > tc-symbol-server
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