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 }