comparison agent/src/jetbrains/buildServer/symbols/SymbolsIndexer.java @ 3:53028ba390e0

improved build progress messages
author Evgeniy.Koshkin
date Mon, 22 Jul 2013 19:37:40 +0400
parents c6ca0a26d93e
children f7602ee7e8b1
comparison
equal deleted inserted replaced
2:c6ca0a26d93e 3:53028ba390e0
1 package jetbrains.buildServer.symbols; 1 package jetbrains.buildServer.symbols;
2 2
3 import com.intellij.execution.configurations.GeneralCommandLine; 3 import com.intellij.execution.configurations.GeneralCommandLine;
4 import jetbrains.buildServer.ExecResult; 4 import jetbrains.buildServer.ExecResult;
5 import jetbrains.buildServer.SimpleCommandLineProcessRunner; 5 import jetbrains.buildServer.SimpleCommandLineProcessRunner;
6 import jetbrains.buildServer.agent.AgentLifeCycleAdapter; 6 import jetbrains.buildServer.agent.*;
7 import jetbrains.buildServer.agent.AgentLifeCycleListener;
8 import jetbrains.buildServer.agent.AgentRunningBuild;
9 import jetbrains.buildServer.agent.BuildFinishedStatus;
10 import jetbrains.buildServer.agent.artifacts.ArtifactsWatcher; 7 import jetbrains.buildServer.agent.artifacts.ArtifactsWatcher;
11 import jetbrains.buildServer.agent.impl.artifacts.ArtifactsBuilderAdapter; 8 import jetbrains.buildServer.agent.impl.artifacts.ArtifactsBuilderAdapter;
12 import jetbrains.buildServer.agent.impl.artifacts.ArtifactsCollection; 9 import jetbrains.buildServer.agent.impl.artifacts.ArtifactsCollection;
13 import jetbrains.buildServer.agent.plugins.beans.PluginDescriptor; 10 import jetbrains.buildServer.agent.plugins.beans.PluginDescriptor;
14 import jetbrains.buildServer.util.EventDispatcher; 11 import jetbrains.buildServer.util.EventDispatcher;
55 52
56 @Override 53 @Override
57 public void beforeBuildFinish(@NotNull AgentRunningBuild build, @NotNull BuildFinishedStatus buildStatus) { 54 public void beforeBuildFinish(@NotNull AgentRunningBuild build, @NotNull BuildFinishedStatus buildStatus) {
58 super.beforeBuildFinish(build, buildStatus); 55 super.beforeBuildFinish(build, buildStatus);
59 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;
58
60 if (mySymbolsToProcess.isEmpty()) { 59 if (mySymbolsToProcess.isEmpty()) {
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 final File targetDir = myBuild.getBuildTempDirectory(); 63 final File targetDir = myBuild.getBuildTempDirectory();
64 try { 64 try {
65 final File symbolSignaturesFile = dumpSymbolSignatures(mySymbolsToProcess, targetDir); 65 final File symbolSignaturesFile = dumpSymbolSignatures(mySymbolsToProcess, targetDir, myBuild.getBuildLogger());
66 myArtifactsWatcher.addNewArtifactsPath(symbolSignaturesFile + "=>" + ".teamcity/symbols/symbol-signatures.xml"); 66 myArtifactsWatcher.addNewArtifactsPath(symbolSignaturesFile + "=>" + ".teamcity/symbols/symbol-signatures.xml");
67 final File binariesSignaturesFile = dumpBinarySignatures(myBinariesToProcess, targetDir); 67 final File binariesSignaturesFile = dumpBinarySignatures(myBinariesToProcess, targetDir, myBuild.getBuildLogger());
68 myArtifactsWatcher.addNewArtifactsPath(binariesSignaturesFile + "=>" + ".teamcity/symbols/binary-signatures.xml"); 68 myArtifactsWatcher.addNewArtifactsPath(binariesSignaturesFile + "=>" + ".teamcity/symbols/binary-signatures.xml");
69 } catch (IOException e) { 69 } catch (IOException e) {
70 LOG.error("Error while dumping symbols/binaries signatures.", e); 70 LOG.error("Error while dumping symbols/binaries signatures.", e);
71 } 71 }
72 } 72 }
80 @Override 80 @Override
81 public void afterCollectingFiles(@NotNull List<ArtifactsCollection> artifacts) { 81 public void afterCollectingFiles(@NotNull List<ArtifactsCollection> artifacts) {
82 super.afterCollectingFiles(artifacts); 82 super.afterCollectingFiles(artifacts);
83 if(myBuild == null || mySymbolsToProcess == null || myBinariesToProcess == null) return; 83 if(myBuild == null || mySymbolsToProcess == null || myBinariesToProcess == null) return;
84 if(myBuild.getBuildFeaturesOfType(SymbolsConstants.BUILD_FEATURE_TYPE).isEmpty()){ 84 if(myBuild.getBuildFeaturesOfType(SymbolsConstants.BUILD_FEATURE_TYPE).isEmpty()){
85 myBuild.getBuildLogger().warning(SymbolsConstants.BUILD_FEATURE_TYPE + " build feature disabled. No indexing performed.");
85 LOG.debug(SymbolsConstants.BUILD_FEATURE_TYPE + " build feature disabled. No indexing performed."); 86 LOG.debug(SymbolsConstants.BUILD_FEATURE_TYPE + " build feature disabled. No indexing performed.");
86 return; 87 return;
87 } 88 }
88 LOG.debug(SymbolsConstants.BUILD_FEATURE_TYPE + " build feature enabled. Searching for symbol files."); 89 LOG.debug(SymbolsConstants.BUILD_FEATURE_TYPE + " build feature enabled. Searching for symbol files.");
90 myBuild.getBuildLogger().message(SymbolsConstants.BUILD_FEATURE_TYPE + " build feature enabled. Searching for symbol files.");
89 mySymbolsToProcess.addAll(getArtifactPathsByFileExtension(artifacts, PDB_FILE_EXTENSION)); 91 mySymbolsToProcess.addAll(getArtifactPathsByFileExtension(artifacts, PDB_FILE_EXTENSION));
90 myBinariesToProcess.addAll(getArtifactPathsByFileExtension(artifacts, EXE_FILE_EXTENSION)); 92 myBinariesToProcess.addAll(getArtifactPathsByFileExtension(artifacts, EXE_FILE_EXTENSION));
91 myBinariesToProcess.addAll(getArtifactPathsByFileExtension(artifacts, DLL_FILE_EXTENSION)); 93 myBinariesToProcess.addAll(getArtifactPathsByFileExtension(artifacts, DLL_FILE_EXTENSION));
92 } 94 }
93 95
101 } 103 }
102 } 104 }
103 return result; 105 return result;
104 } 106 }
105 107
106 private File dumpSymbolSignatures(Collection<File> files, File targetDir) throws IOException { 108 private File dumpSymbolSignatures(Collection<File> files, File targetDir, BuildProgressLogger buildLogger) throws IOException {
107 final File tempFile = FileUtil.createTempFile(targetDir, "symbol-signatures-", ".xml", false); 109 final File tempFile = FileUtil.createTempFile(targetDir, "symbol-signatures-", ".xml", false);
108 runTool(DUMP_SYMBOL_SIGN_CMD, files, tempFile); 110 runTool(DUMP_SYMBOL_SIGN_CMD, files, tempFile, buildLogger);
109 return tempFile; 111 return tempFile;
110 } 112 }
111 113
112 private File dumpBinarySignatures(Collection<File> files, File targetDir) throws IOException { 114 private File dumpBinarySignatures(Collection<File> files, File targetDir, BuildProgressLogger buildLogger) throws IOException {
113 final File tempFile = FileUtil.createTempFile(targetDir, "binary-signatures-", ".xml", false); 115 final File tempFile = FileUtil.createTempFile(targetDir, "binary-signatures-", ".xml", false);
114 runTool(DUMP_BIN_SIGN_CMD, files, tempFile); 116 runTool(DUMP_BIN_SIGN_CMD, files, tempFile, buildLogger);
115 return tempFile; 117 return tempFile;
116 } 118 }
117 119
118 private void runTool(String cmd, Collection<File> files, File output){ 120 private void runTool(String cmd, Collection<File> files, File output, BuildProgressLogger buildLogger){
119 final GeneralCommandLine commandLine = new GeneralCommandLine(); 121 final GeneralCommandLine commandLine = new GeneralCommandLine();
120 commandLine.setExePath(myNativeToolPath.getPath()); 122 commandLine.setExePath(myNativeToolPath.getPath());
121 commandLine.addParameter(cmd); 123 commandLine.addParameter(cmd);
122 commandLine.addParameter(String.format("/o=\"%s\"", output.getPath())); 124 commandLine.addParameter(String.format("/o=\"%s\"", output.getPath()));
123 for(File file : files){ 125 for(File file : files){
124 commandLine.addParameter(file.getPath()); 126 commandLine.addParameter(file.getPath());
125 } 127 }
126 final ExecResult execResult = SimpleCommandLineProcessRunner.runCommand(commandLine, null); 128 final ExecResult execResult = SimpleCommandLineProcessRunner.runCommand(commandLine, null);
127 if (execResult.getExitCode() == 0) return; 129 if (execResult.getExitCode() == 0) return;
128 LOG.warn(String.format("%s ends with non-zero exit code.", SYMBOLS_EXE)); 130 String message = String.format("%s ends with non-zero exit code.", SYMBOLS_EXE);
131 buildLogger.warning(message);
132 LOG.warn(message);
129 } 133 }
130 } 134 }