Mercurial > hg > tc-symbol-server
comparison agent/src/jetbrains/buildServer/symbols/SymbolsIndexer.java @ 5:f7602ee7e8b1
implemented symbols index data publishing
author | Evgeniy.Koshkin |
---|---|
date | Wed, 24 Jul 2013 19:16:16 +0400 |
parents | 53028ba390e0 |
children | 74f725356087 |
comparison
equal
deleted
inserted
replaced
4:198d903a1e29 | 5:f7602ee7e8b1 |
---|---|
27 | 27 |
28 public static final String PDB_FILE_EXTENSION = "pdb"; | 28 public static final String PDB_FILE_EXTENSION = "pdb"; |
29 public static final String EXE_FILE_EXTENSION = "exe"; | 29 public static final String EXE_FILE_EXTENSION = "exe"; |
30 public static final String DLL_FILE_EXTENSION = "dll"; | 30 public static final String DLL_FILE_EXTENSION = "dll"; |
31 | 31 |
32 public static final String SYMBOLS_EXE = "symbols.exe"; | 32 public static final String SYMBOLS_EXE = "JetBrains.CommandLine.Symbols.exe"; |
33 public static final String DUMP_SYMBOL_SIGN_CMD = "dumpSymbolSign"; | 33 public static final String DUMP_SYMBOL_SIGN_CMD = "dumpSymbolSign"; |
34 public static final String DUMP_BIN_SIGN_CMD = "dumpBinSign"; | 34 public static final String DUMP_BIN_SIGN_CMD = "dumpBinSign"; |
35 | 35 |
36 @NotNull private final ArtifactsWatcher myArtifactsWatcher; | 36 @NotNull private final ArtifactsWatcher myArtifactsWatcher; |
37 @NotNull private final File myNativeToolPath; | 37 @NotNull private final File myNativeToolPath; |
49 myBinariesToProcess = new HashSet<File>(); | 49 myBinariesToProcess = new HashSet<File>(); |
50 mySymbolsToProcess = new HashSet<File>(); | 50 mySymbolsToProcess = new HashSet<File>(); |
51 } | 51 } |
52 | 52 |
53 @Override | 53 @Override |
54 public void beforeBuildFinish(@NotNull AgentRunningBuild build, @NotNull BuildFinishedStatus buildStatus) { | 54 public void afterAtrifactsPublished(@NotNull AgentRunningBuild build, @NotNull BuildFinishedStatus buildStatus) { |
55 super.beforeBuildFinish(build, buildStatus); | 55 super.afterAtrifactsPublished(build, buildStatus); |
56 if (myBuild == null || mySymbolsToProcess == null || myBinariesToProcess == null) return; | 56 if (myBuild == null || mySymbolsToProcess == null || myBinariesToProcess == null) return; |
57 if(myBuild.getBuildFeaturesOfType(SymbolsConstants.BUILD_FEATURE_TYPE).isEmpty()) return; | 57 if(myBuild.getBuildFeaturesOfType(SymbolsConstants.BUILD_FEATURE_TYPE).isEmpty()) return; |
58 | 58 |
59 if (mySymbolsToProcess.isEmpty()) { | 59 if (mySymbolsToProcess.isEmpty()) { |
60 myBuild.getBuildLogger().warning("Symbols weren't found in artifacts to be published."); | 60 myBuild.getBuildLogger().warning("Symbols weren't found in artifacts to be published."); |
61 LOG.debug("Symbols weren't found in artifacts to be published."); | 61 LOG.debug("Symbols weren't found in artifacts to be published."); |
62 } else { | 62 } else { |
63 myBuild.getBuildLogger().message("Symbols are found in build artifacts."); | |
63 final File targetDir = myBuild.getBuildTempDirectory(); | 64 final File targetDir = myBuild.getBuildTempDirectory(); |
64 try { | 65 try { |
65 final File symbolSignaturesFile = dumpSymbolSignatures(mySymbolsToProcess, targetDir, myBuild.getBuildLogger()); | 66 final File symbolSignaturesFile = dumpSymbolSignatures(mySymbolsToProcess, targetDir, myBuild.getBuildLogger()); |
66 myArtifactsWatcher.addNewArtifactsPath(symbolSignaturesFile + "=>" + ".teamcity/symbols/symbol-signatures.xml"); | 67 if(symbolSignaturesFile.exists()){ |
68 myArtifactsWatcher.addNewArtifactsPath(symbolSignaturesFile + "=>" + ".teamcity/symbols"); | |
69 } | |
67 final File binariesSignaturesFile = dumpBinarySignatures(myBinariesToProcess, targetDir, myBuild.getBuildLogger()); | 70 final File binariesSignaturesFile = dumpBinarySignatures(myBinariesToProcess, targetDir, myBuild.getBuildLogger()); |
68 myArtifactsWatcher.addNewArtifactsPath(binariesSignaturesFile + "=>" + ".teamcity/symbols/binary-signatures.xml"); | 71 if(binariesSignaturesFile.exists()){ |
72 myArtifactsWatcher.addNewArtifactsPath(binariesSignaturesFile + "=>" + ".teamcity/symbols"); | |
73 } | |
69 } catch (IOException e) { | 74 } catch (IOException e) { |
70 LOG.error("Error while dumping symbols/binaries signatures.", e); | 75 LOG.error("Error while dumping symbols/binaries signatures.", e); |
76 myBuild.getBuildLogger().error("Error while dumping symbols/binaries signatures."); | |
77 myBuild.getBuildLogger().exception(e); | |
71 } | 78 } |
72 } | 79 } |
73 mySymbolsToProcess = null; | 80 mySymbolsToProcess = null; |
74 myBinariesToProcess = null; | 81 myBinariesToProcess = null; |
75 myBuild = null; | 82 myBuild = null; |
84 if(myBuild.getBuildFeaturesOfType(SymbolsConstants.BUILD_FEATURE_TYPE).isEmpty()){ | 91 if(myBuild.getBuildFeaturesOfType(SymbolsConstants.BUILD_FEATURE_TYPE).isEmpty()){ |
85 myBuild.getBuildLogger().warning(SymbolsConstants.BUILD_FEATURE_TYPE + " build feature disabled. No indexing performed."); | 92 myBuild.getBuildLogger().warning(SymbolsConstants.BUILD_FEATURE_TYPE + " build feature disabled. No indexing performed."); |
86 LOG.debug(SymbolsConstants.BUILD_FEATURE_TYPE + " build feature disabled. No indexing performed."); | 93 LOG.debug(SymbolsConstants.BUILD_FEATURE_TYPE + " build feature disabled. No indexing performed."); |
87 return; | 94 return; |
88 } | 95 } |
89 LOG.debug(SymbolsConstants.BUILD_FEATURE_TYPE + " build feature enabled. Searching for symbol files."); | 96 myBuild.getBuildLogger().message(SymbolsConstants.BUILD_FEATURE_TYPE + " build feature enabled. Searching for suitable files."); |
90 myBuild.getBuildLogger().message(SymbolsConstants.BUILD_FEATURE_TYPE + " build feature enabled. Searching for symbol files."); | 97 LOG.debug(SymbolsConstants.BUILD_FEATURE_TYPE + " build feature enabled. Searching for suitable files."); |
91 mySymbolsToProcess.addAll(getArtifactPathsByFileExtension(artifacts, PDB_FILE_EXTENSION)); | 98 mySymbolsToProcess.addAll(getArtifactPathsByFileExtension(artifacts, PDB_FILE_EXTENSION)); |
92 myBinariesToProcess.addAll(getArtifactPathsByFileExtension(artifacts, EXE_FILE_EXTENSION)); | 99 myBinariesToProcess.addAll(getArtifactPathsByFileExtension(artifacts, EXE_FILE_EXTENSION)); |
93 myBinariesToProcess.addAll(getArtifactPathsByFileExtension(artifacts, DLL_FILE_EXTENSION)); | 100 myBinariesToProcess.addAll(getArtifactPathsByFileExtension(artifacts, DLL_FILE_EXTENSION)); |
94 } | 101 } |
95 | 102 |
123 commandLine.addParameter(cmd); | 130 commandLine.addParameter(cmd); |
124 commandLine.addParameter(String.format("/o=\"%s\"", output.getPath())); | 131 commandLine.addParameter(String.format("/o=\"%s\"", output.getPath())); |
125 for(File file : files){ | 132 for(File file : files){ |
126 commandLine.addParameter(file.getPath()); | 133 commandLine.addParameter(file.getPath()); |
127 } | 134 } |
135 buildLogger.message(String.format("Running command %s", commandLine.getCommandLineString())); | |
128 final ExecResult execResult = SimpleCommandLineProcessRunner.runCommand(commandLine, null); | 136 final ExecResult execResult = SimpleCommandLineProcessRunner.runCommand(commandLine, null); |
137 buildLogger.message(execResult.getStdout()); | |
129 if (execResult.getExitCode() == 0) return; | 138 if (execResult.getExitCode() == 0) return; |
130 String message = String.format("%s ends with non-zero exit code.", SYMBOLS_EXE); | 139 buildLogger.warning(String.format("%s ends with non-zero exit code.", SYMBOLS_EXE)); |
131 buildLogger.warning(message); | 140 buildLogger.warning(execResult.getStderr()); |
132 LOG.warn(message); | |
133 } | 141 } |
134 } | 142 } |