# HG changeset patch # User Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net # Date 1463753573 -10800 # Node ID 8d6bfbd57bd71fe2ff41b88dab9223ea17512fd8 # Parent 204681404aa12c230efe17f92ddff5e01cce48b8 fixed searching of pdb by name in order to restore backward compatibility (grafted from c8d606a7a07ceb53f5384b01359e56658cb43f86) diff -r 204681404aa1 -r 8d6bfbd57bd7 agent/src/jetbrains/buildServer/symbols/SymbolsIndexer.java --- a/agent/src/jetbrains/buildServer/symbols/SymbolsIndexer.java Wed May 18 18:56:33 2016 +0300 +++ b/agent/src/jetbrains/buildServer/symbols/SymbolsIndexer.java Fri May 20 17:12:53 2016 +0300 @@ -90,9 +90,11 @@ if(!signatureLocalFilesData.isEmpty()){ final Set indexData = new HashSet(); for(PdbSignatureIndexEntry signatureIndexEntry : signatureLocalFilesData){ - final File targetPdbFile = new File(signatureIndexEntry.getArtifactPath()); + final String artifactPath = signatureIndexEntry.getArtifactPath(); + if(artifactPath == null) continue; + final File targetPdbFile = new File(artifactPath); if(myFileToArtifactMapToProcess.containsKey(targetPdbFile)) { - indexData.add(new PdbSignatureIndexEntry(signatureIndexEntry.getGuid(), myFileToArtifactMapToProcess.get(targetPdbFile), targetPdbFile.getName())); + indexData.add(new PdbSignatureIndexEntry(signatureIndexEntry.getGuid(), targetPdbFile.getName(), myFileToArtifactMapToProcess.get(targetPdbFile))); } } final File indexDataFile = FileUtil.createTempFile(myBuildTempDirectory, SymbolsConstants.SYMBOL_SIGNATURES_FILE_NAME_PREFIX, ".xml", false); diff -r 204681404aa1 -r 8d6bfbd57bd7 common/src/jetbrains/buildServer/symbols/PdbSignatureIndexEntry.java --- a/common/src/jetbrains/buildServer/symbols/PdbSignatureIndexEntry.java Wed May 18 18:56:33 2016 +0300 +++ b/common/src/jetbrains/buildServer/symbols/PdbSignatureIndexEntry.java Fri May 20 17:12:53 2016 +0300 @@ -11,10 +11,10 @@ private final String myFileName; private final String myArtifactPath; - public PdbSignatureIndexEntry(@NotNull String guid, @NotNull String filePath, @Nullable String fileName) { + public PdbSignatureIndexEntry(@NotNull String guid, @NotNull String fileName, @Nullable String filePath) { myGuid = guid; + myFileName = fileName; myArtifactPath = filePath; - myFileName = fileName; } @NotNull @@ -23,12 +23,12 @@ } @NotNull - public String getArtifactPath() { - return myArtifactPath; + public String getFileName() { + return myFileName; } @Nullable - public String getFileName() { - return myFileName; + public String getArtifactPath() { + return myArtifactPath; } } diff -r 204681404aa1 -r 8d6bfbd57bd7 common/src/jetbrains/buildServer/symbols/PdbSignatureIndexUtil.java --- a/common/src/jetbrains/buildServer/symbols/PdbSignatureIndexUtil.java Wed May 18 18:56:33 2016 +0300 +++ b/common/src/jetbrains/buildServer/symbols/PdbSignatureIndexUtil.java Fri May 20 17:12:53 2016 +0300 @@ -17,8 +17,8 @@ */ class PdbSignatureIndexUtil { private static final String SIGN = "sign"; - private static final String FILE = "file"; - private static final String FILE_NAME = "file-path"; + private static final String FILE_NAME = "file"; + private static final String FILE_PATH = "file-path"; private static final String FILE_SIGNS = "file-signs"; private static final String FILE_SIGN_ENTRY = "file-sign-entry"; @@ -29,7 +29,7 @@ final Set result = new HashSet(); for (Object signElementObject : document.getRootElement().getChildren()){ final Element signElement = (Element) signElementObject; - result.add(new PdbSignatureIndexEntry(extractGuid(signElement.getAttributeValue(SIGN)), signElement.getAttributeValue(FILE), signElement.getAttributeValue(FILE_NAME))); + result.add(new PdbSignatureIndexEntry(extractGuid(signElement.getAttributeValue(SIGN)), signElement.getAttributeValue(FILE_NAME), signElement.getAttributeValue(FILE_PATH))); } return result; } @@ -39,10 +39,10 @@ for (final PdbSignatureIndexEntry indexEntry : indexData){ final Element entry = new Element(FILE_SIGN_ENTRY); entry.setAttribute(SIGN, indexEntry.getGuid()); - entry.setAttribute(FILE, indexEntry.getArtifactPath()); - String fileName = indexEntry.getFileName(); - if(fileName != null){ - entry.setAttribute(FILE_NAME, fileName); + entry.setAttribute(FILE_NAME, indexEntry.getFileName()); + String artifactPath = indexEntry.getArtifactPath(); + if(artifactPath != null){ + entry.setAttribute(FILE_PATH, artifactPath); } root.addContent(entry); } diff -r 204681404aa1 -r 8d6bfbd57bd7 server/src/jetbrains/buildServer/symbols/BuildSymbolsIndexProvider.java --- a/server/src/jetbrains/buildServer/symbols/BuildSymbolsIndexProvider.java Wed May 18 18:56:33 2016 +0300 +++ b/server/src/jetbrains/buildServer/symbols/BuildSymbolsIndexProvider.java Fri May 20 17:12:53 2016 +0300 @@ -2,7 +2,9 @@ import jetbrains.buildServer.serverSide.SBuild; import jetbrains.buildServer.serverSide.artifacts.BuildArtifact; +import jetbrains.buildServer.serverSide.artifacts.BuildArtifacts; import jetbrains.buildServer.serverSide.artifacts.BuildArtifactsViewMode; +import jetbrains.buildServer.serverSide.impl.LogUtil; import jetbrains.buildServer.serverSide.metadata.BuildMetadataProvider; import jetbrains.buildServer.serverSide.metadata.MetadataStorageWriter; import jetbrains.buildServer.util.CollectionsUtil; @@ -10,11 +12,13 @@ import org.apache.log4j.Logger; import org.jdom.JDOMException; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.io.IOException; import java.util.Collections; import java.util.HashMap; import java.util.Set; +import java.util.concurrent.atomic.AtomicReference; /** * @author Evgeniy.Koshkin @@ -60,7 +64,14 @@ for (final PdbSignatureIndexEntry indexEntry : indexEntries) { final String signature = indexEntry.getGuid(); final String fileName = indexEntry.getFileName(); - final String artifactPath = indexEntry.getArtifactPath(); + String artifactPath = indexEntry.getArtifactPath(); + if(artifactPath == null){ + LOG.debug(String.format("Artifact path is not provided for artifact %s, locating it by name in build %s artifacts.", fileName, LogUtil.describe(sBuild))); + artifactPath = locateArtifact(sBuild, fileName); + if(artifactPath != null){ + LOG.debug(String.format("Located artifact by name %s, path - %s. Build - %s", fileName, artifactPath, LogUtil.describe(sBuild))); + } + } final HashMap data = new HashMap(); data.put(FILE_NAME_KEY, fileName); data.put(ARTIFACT_PATH_KEY, artifactPath); @@ -68,4 +79,20 @@ LOG.debug("Stored symbol file signature " + signature + " for file name " + fileName + " build id " + buildId); } } + + @Nullable + private String locateArtifact(@NotNull SBuild build, final @NotNull String artifactName) { + final AtomicReference locatedArtifactPath = new AtomicReference(null); + build.getArtifacts(BuildArtifactsViewMode.VIEW_DEFAULT_WITH_ARCHIVES_CONTENT).iterateArtifacts(new BuildArtifacts.BuildArtifactsProcessor() { + @NotNull + public Continuation processBuildArtifact(@NotNull BuildArtifact artifact) { + if(artifact.getName().equals(artifactName)){ + locatedArtifactPath.set(artifact.getRelativePath()); + return Continuation.BREAK; + } + else return Continuation.CONTINUE; + } + }); + return locatedArtifactPath.get(); + } }