changeset 115:c8d606a7a07c 9.1.x

fixed searching of pdb by name in order to restore backward compatibility
author Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
date Fri, 20 May 2016 17:12:53 +0300
parents d34412e9d54e
children
files agent/src/jetbrains/buildServer/symbols/SymbolsIndexer.java common/src/jetbrains/buildServer/symbols/PdbSignatureIndexEntry.java common/src/jetbrains/buildServer/symbols/PdbSignatureIndexUtil.java server/src/jetbrains/buildServer/symbols/BuildSymbolsIndexProvider.java
diffstat 4 files changed, 46 insertions(+), 17 deletions(-) [+]
line wrap: on
line diff
--- a/agent/src/jetbrains/buildServer/symbols/SymbolsIndexer.java	Wed May 18 19:30:03 2016 +0300
+++ b/agent/src/jetbrains/buildServer/symbols/SymbolsIndexer.java	Fri May 20 17:12:53 2016 +0300
@@ -87,9 +87,11 @@
             if(!signatureLocalFilesData.isEmpty()){
               final Set<PdbSignatureIndexEntry> indexData = new HashSet<PdbSignatureIndexEntry>();
               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);
--- a/common/src/jetbrains/buildServer/symbols/PdbSignatureIndexEntry.java	Wed May 18 19:30:03 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 getFileName() {
+        return myFileName;
+    }
+
+    @Nullable
     public String getArtifactPath() {
         return myArtifactPath;
     }
-
-    @Nullable
-    public String getFileName() {
-        return myFileName;
-    }
 }
--- a/common/src/jetbrains/buildServer/symbols/PdbSignatureIndexUtil.java	Wed May 18 19:30:03 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<PdbSignatureIndexEntry> result = new HashSet<PdbSignatureIndexEntry>();
     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);
     }
--- a/server/src/jetbrains/buildServer/symbols/BuildSymbolsIndexProvider.java	Wed May 18 19:30:03 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<String, String> data = new HashMap<String, String>();
       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<String> locatedArtifactPath = new AtomicReference<String>(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();
+  }
 }