Mercurial > hg > tc-symbol-server
changeset 25:f4e0050e2a2f
resolve server url from config parameter
author | Evgeniy.Koshkin |
---|---|
date | Tue, 06 Aug 2013 14:18:09 +0400 |
parents | 9cbdbfed44f4 |
children | 87b24e4efcc3 |
files | agent/src/jetbrains/buildServer/symbols/FileUrlProvider.java agent/src/jetbrains/buildServer/symbols/PdbFilePatcher.java agent/src/jetbrains/buildServer/symbols/SrcSrvStreamBuilder.java agent/src/jetbrains/buildServer/symbols/SrcSrvStreamProvider.java agent/src/jetbrains/buildServer/symbols/SymbolsIndexer.java common/src/jetbrains/buildServer/symbols/SymbolsConstants.java tests/src/PdbFilePatcherTest.java |
diffstat | 7 files changed, 115 insertions(+), 77 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/agent/src/jetbrains/buildServer/symbols/FileUrlProvider.java Tue Aug 06 14:18:09 2013 +0400 @@ -0,0 +1,30 @@ +package jetbrains.buildServer.symbols; + +import java.io.File; +import java.io.IOException; + +/** + * @author Evgeniy.Koshkin + */ +public class FileUrlProvider { + private static final String GUEST_AUTH_APP_SOURCES = "/guestAuth/app/sources"; + + private final String myServerUrl; + private final long myBuildId; + private final File mySourcesRootDirectory; + + public FileUrlProvider(String serverUrl, long buildId, File sourcesRootDirectory) { + myServerUrl = serverUrl; + myBuildId = buildId; + mySourcesRootDirectory = sourcesRootDirectory; + } + + public String getHttpAlias() { + return String.format("%s/%s/builds/id-%d/sources/files", myServerUrl, GUEST_AUTH_APP_SOURCES, myBuildId); + } + + public String getFileUrl(String path) throws IOException { + String sourcesRootDirectoryPath = mySourcesRootDirectory.getCanonicalPath(); + return path.substring(sourcesRootDirectoryPath.length() + 1).replace(File.separator, "/"); + } +}
--- a/agent/src/jetbrains/buildServer/symbols/PdbFilePatcher.java Mon Aug 05 20:57:02 2013 +0400 +++ b/agent/src/jetbrains/buildServer/symbols/PdbFilePatcher.java Tue Aug 06 14:18:09 2013 +0400 @@ -18,11 +18,11 @@ private final SrcToolExe mySrcToolExe = new SrcToolExe(); private final File myHomeDir; - private SrcSrvStreamProvider myIndexInputProvider; + private SrcSrvStreamBuilder mySrcSrvStreamBuilder; - public PdbFilePatcher(final File homeDir, final SrcSrvStreamProvider indexInputProvider) { + public PdbFilePatcher(final File homeDir, final SrcSrvStreamBuilder srcSrvStreamBuilder) { myHomeDir = homeDir; - myIndexInputProvider = indexInputProvider; + mySrcSrvStreamBuilder = srcSrvStreamBuilder; } public void patch(File symbolsFile, BuildProgressLogger buildLogger) throws Exception { @@ -34,11 +34,7 @@ return; } final File tmpFile = FileUtil.createTempFile(myHomeDir, "pdb-", ".patch", false); - myIndexInputProvider.dumpStreamToFile(tmpFile, sourceFiles); + mySrcSrvStreamBuilder.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"); } }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/agent/src/jetbrains/buildServer/symbols/SrcSrvStreamBuilder.java Tue Aug 06 14:18:09 2013 +0400 @@ -0,0 +1,60 @@ +/* + * Copyright 2000-2013 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package jetbrains.buildServer.symbols; + +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.util.Collection; + +/** + * @author Evgeniy.Koshkin + */ +public class SrcSrvStreamBuilder { + + private final FileUrlProvider myUrlProvider; + + public SrcSrvStreamBuilder(final FileUrlProvider urlProvider) { + myUrlProvider = urlProvider; + } + + public void dumpStreamToFile(File targetFile, Collection<File> sourceFiles) throws IOException { + final FileWriter fileWriter = new FileWriter(targetFile.getPath(), true); + + try { + fileWriter.write("SRCSRV: ini ------------------------------------------------\r\n"); + fileWriter.write("VERSION=3\r\n"); + fileWriter.write("INDEXVERSION=2\r\n"); + fileWriter.write("VERCTRL=http\r\n"); + fileWriter.write("SRCSRV: variables ------------------------------------------\r\n"); + fileWriter.write("SRCSRVVERCTRL=http\r\n"); + fileWriter.write(String.format("HTTP_ALIAS=%s\r\n", myUrlProvider.getHttpAlias())); + fileWriter.write("HTTP_EXTRACT_TARGET=%HTTP_ALIAS%/%var2%\r\n"); + fileWriter.write("SRCSRVTRG=%HTTP_EXTRACT_TARGET%\r\n"); + fileWriter.write("SRCSRVCMD=\r\n"); + fileWriter.write("SRCSRV: source files ------------------------------------------\r\n"); + for(File sourceFile : sourceFiles){ + final String sourceFileCanonical = sourceFile.getCanonicalPath(); + fileWriter.write(String.format("%s*%s\r\n", sourceFileCanonical, myUrlProvider.getFileUrl(sourceFileCanonical))); + } + fileWriter.write("SRCSRV: end ------------------------------------------------"); + } + finally { + fileWriter.close(); + } + } +}
--- a/agent/src/jetbrains/buildServer/symbols/SrcSrvStreamProvider.java Mon Aug 05 20:57:02 2013 +0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,65 +0,0 @@ -/* - * Copyright 2000-2013 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package jetbrains.buildServer.symbols; - -import java.io.File; -import java.io.FileWriter; -import java.io.IOException; -import java.util.Collection; - -/** - * @author Evgeniy.Koshkin - */ -public class SrcSrvStreamProvider { - - private static final String myRestApiUrl = "http://unit-519.labs.intelliJ.net:8111/bs/guestAuth/app/sources"; - - private long myBuildId; - private File mySourcesRootDirectory; - - public SrcSrvStreamProvider(final long buildId, final File sourcesRootDirectory) { - myBuildId = buildId; - mySourcesRootDirectory = sourcesRootDirectory; - } - - public void dumpStreamToFile(File targetFile, Collection<File> sourceFiles) throws IOException { - final FileWriter fileWriter = new FileWriter(targetFile.getPath(), true); - - try { - fileWriter.write("SRCSRV: ini ------------------------------------------------\r\n"); - fileWriter.write("VERSION=3\r\n"); - fileWriter.write("INDEXVERSION=2\r\n"); - fileWriter.write("VERCTRL=http\r\n"); - fileWriter.write("SRCSRV: variables ------------------------------------------\r\n"); - fileWriter.write("SRCSRVVERCTRL=http\r\n"); - fileWriter.write(String.format("HTTP_ALIAS=%s/builds/id-%d/sources/files\r\n", myRestApiUrl, myBuildId)); - fileWriter.write("HTTP_EXTRACT_TARGET=%HTTP_ALIAS%/%var2%\r\n"); - fileWriter.write("SRCSRVTRG=%HTTP_EXTRACT_TARGET%\r\n"); - fileWriter.write("SRCSRVCMD=\r\n"); - fileWriter.write("SRCSRV: source files ------------------------------------------\r\n"); - String sourcesRootDirectoryPath = mySourcesRootDirectory.getCanonicalPath(); - for(File sourceFile : sourceFiles){ - final String sourceFileCanonical = sourceFile.getCanonicalPath(); - fileWriter.write(String.format("%s*%s\r\n", sourceFileCanonical, sourceFileCanonical.substring(sourcesRootDirectoryPath.length() + 1).replace(File.separator, "/"))); - } - fileWriter.write("SRCSRV: end ------------------------------------------------"); - } - finally { - fileWriter.close(); - } - } -}
--- a/agent/src/jetbrains/buildServer/symbols/SymbolsIndexer.java Mon Aug 05 20:57:02 2013 +0400 +++ b/agent/src/jetbrains/buildServer/symbols/SymbolsIndexer.java Tue Aug 06 14:18:09 2013 +0400 @@ -84,8 +84,12 @@ } LOG.debug(SymbolsConstants.BUILD_FEATURE_TYPE + " build feature enabled. Searching for suitable files."); final Collection<File> pdbFiles = getArtifactPathsByFileExtension(artifacts, PDB_FILE_EXTENSION); - final SrcSrvStreamProvider srcSrvStreamProvider = new SrcSrvStreamProvider(myBuild.getBuildId(), myBuild.getCheckoutDirectory()); - final PdbFilePatcher pdbFilePatcher = new PdbFilePatcher(myBuild.getBuildTempDirectory(), srcSrvStreamProvider); + if(pdbFiles.isEmpty()) return; + + final FileUrlProvider urlProvider = getUrlProviderForBuild(myBuild, buildLogger); + if(urlProvider == null) return; + + final PdbFilePatcher pdbFilePatcher = new PdbFilePatcher(myBuild.getBuildTempDirectory(), new SrcSrvStreamBuilder(urlProvider)); for(File pdbFile : pdbFiles){ try { buildLogger.message("Indexing sources appeared in file " + pdbFile.getAbsolutePath()); @@ -99,6 +103,18 @@ } } + @Nullable + private FileUrlProvider getUrlProviderForBuild(@NotNull AgentRunningBuild build, BuildProgressLogger buildLogger) { + String serverUrl = build.getSharedConfigParameters().get(SymbolsConstants.SERVER_URL_PARAMETER_NAME); + if(serverUrl == null){ + final String message = String.format("Configuration parameter %s was not set. ", SymbolsConstants.SERVER_URL_PARAMETER_NAME); + LOG.warn(message); + buildLogger.warning(message); + return null; + } + return new FileUrlProvider(serverUrl, build.getBuildId(), build.getCheckoutDirectory()); + } + private Collection<File> getArtifactPathsByFileExtension(List<ArtifactsCollection> artifactsCollections, String fileExtension){ final Collection<File> result = new HashSet<File>(); for(ArtifactsCollection artifactsCollection : artifactsCollections){
--- a/common/src/jetbrains/buildServer/symbols/SymbolsConstants.java Mon Aug 05 20:57:02 2013 +0400 +++ b/common/src/jetbrains/buildServer/symbols/SymbolsConstants.java Tue Aug 06 14:18:09 2013 +0400 @@ -5,4 +5,5 @@ */ public class SymbolsConstants { public static final String BUILD_FEATURE_TYPE = "symbol-indexer"; + public static final String SERVER_URL_PARAMETER_NAME = "symbols.server-url"; }
--- a/tests/src/PdbFilePatcherTest.java Mon Aug 05 20:57:02 2013 +0400 +++ b/tests/src/PdbFilePatcherTest.java Tue Aug 06 14:18:09 2013 +0400 @@ -1,7 +1,7 @@ import com.intellij.openapi.util.io.FileUtil; import jetbrains.buildServer.BaseTestCase; import jetbrains.buildServer.symbols.PdbFilePatcher; -import jetbrains.buildServer.symbols.SrcSrvStreamProvider; +import jetbrains.buildServer.symbols.SrcSrvStreamBuilder; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; @@ -20,7 +20,7 @@ public void setUp() throws Exception { super.setUp(); myTestHomeDir = createTempDir(); - myPatcher = new PdbFilePatcher(myTestHomeDir, new SrcSrvStreamProvider(1111, new File("c:\\Data\\Work\\TeamCity\\trunk\\symbols-native"))); + myPatcher = new PdbFilePatcher(myTestHomeDir, new SrcSrvStreamBuilder(null)); } @Test