in agent/src/main/java/jetbrains/buildServer/torrent/TorrentTransportFactory.java [288:330]
private String parseArtifactsList(@NotNull final String teamcityIvyUrl, @NotNull final File target) {
try {
byte[] ivyData = myHttpDownloader.download(teamcityIvyUrl);
XPath xpath = XPathFactory.newInstance().newXPath();
NodeList artifactList = (NodeList) xpath.evaluate("/ivy-module/publications/artifact",
new InputSource(new ByteArrayInputStream(ivyData)), XPathConstants.NODESET);
Set<String> artifactsSet = new HashSet<String>();
for (int i = 0; i < artifactList.getLength(); i++) {
Node artifact = artifactList.item(i);
final String artifactName = artifact.getAttributes().getNamedItem("name").getTextContent();
final String artifactExt = artifact.getAttributes().getNamedItem("ext").getTextContent();
if (!StringUtil.isEmpty(artifactExt)) {
artifactsSet.add(artifactName + "." + artifactExt);
} else {
artifactsSet.add(artifactName);
}
}
for (String s : artifactsSet) {
if (s.startsWith(ArtifactsConstants.TEAMCITY_ARTIFACTS_DIR))
continue;
String proposedTorrentName = String.format("%s%s.torrent", TEAMCITY_TORRENTS, s);
if (artifactsSet.contains(proposedTorrentName)) {
myTorrentsForArtifacts.put(s, proposedTorrentName);
}
}
final NodeList info = (NodeList) xpath.evaluate("ivy-module/info",
new InputSource(new ByteArrayInputStream(ivyData)), XPathConstants.NODESET);
if (info.getLength() == 1) {
final Node infoNode = info.item(0);
final String module = infoNode.getAttributes().getNamedItem("module").getTextContent();
final String revision = infoNode.getAttributes().getNamedItem("revision").getTextContent();
FileUtils.writeByteArrayToFile(target, ivyData);
return String.format("%s_%s_%s", TEAMCITY_IVY, module, revision);
}
} catch (Exception e) {
log2Build(String.format("Unknown error while parsing %s: %s", TEAMCITY_IVY, e.getMessage()));
}
return null;
}