view agent/src/jetbrains/buildServer/symbols/PdbFilePatcher.java @ 20:10cb71666d5e

more fixes in generated srcsrv
author Evgeniy.Koshkin
date Fri, 02 Aug 2013 17:58:51 +0400
parents c038e1a8c8a5
children f4e0050e2a2f
line wrap: on
line source

package jetbrains.buildServer.symbols;

import jetbrains.buildServer.agent.BuildProgressLogger;
import jetbrains.buildServer.util.FileUtil;
import org.apache.log4j.Logger;

import java.io.File;
import java.util.Collection;

/**
 * @author Evgeniy.Koshkin
 */
public class PdbFilePatcher {

  private static final Logger LOG = Logger.getLogger(PdbFilePatcher.class);

  private final PdbStrExe myPdbStrExe = new PdbStrExe();
  private final SrcToolExe mySrcToolExe = new SrcToolExe();

  private final File myHomeDir;
  private SrcSrvStreamProvider myIndexInputProvider;

  public PdbFilePatcher(final File homeDir, final SrcSrvStreamProvider indexInputProvider) {
    myHomeDir = homeDir;
    myIndexInputProvider = indexInputProvider;
  }

  public void patch(File symbolsFile, BuildProgressLogger buildLogger) throws Exception {
    final Collection<File> sourceFiles = mySrcToolExe.getReferencedSourceFiles(symbolsFile);
    if(sourceFiles.isEmpty()){
      final String message = "No source information found in pdb file " + symbolsFile.getCanonicalPath();
      buildLogger.warning(message);
      LOG.debug(message);
      return;
    }
    final File tmpFile = FileUtil.createTempFile(myHomeDir, "pdb-", ".patch", false);
    myIndexInputProvider.dumpStreamToFile(tmpFile, sourceFiles);
    myPdbStrExe.doCommand(PdbStrExeCommand.WRITE, symbolsFile, tmpFile, PdbStrExe.SRCSRV_STREAM_NAME);
//    final File tmpFile1 = FileUtil.createTempFile(myHomeDir, "pdb-", ".patch", false);
//    myPdbStrExe.doCommand(PdbStrExeCommand.READ, symbolsFile, tmpFile1, PdbStrExe.SRCSRV_STREAM_NAME);
//    if(!FileUtil.checkContentEqual(tmpFile, tmpFile1))
//      throw new Exception("'srcsrv' stream content written to pdb differs from initial one");
  }
}