in nuget-feed/src/jetbrains/buildServer/nuget/feed/server/index/impl/NuGetArtifactsMetadataProvider.kt [33:93]
override fun generateMedatadata(build: SBuild, store: MetadataStorageWriter) {
if (!myFeedSettings.isNuGetServerEnabled) {
LOG.debug(String.format("Skip NuGet metadata generation for build %s. NuGet feed is disabled.", LogUtil.describe(build)))
return
}
// Publish existing parameters
myMetadataStorage.getBuildEntry(build.buildId, PackageConstants.NUGET_PROVIDER_ID).forEach {
store.addParameters(it.key, it.metadata)
}
val targetFeeds = myFeedsProvider.getFeeds(build)
if (targetFeeds.isEmpty()) {
LOG.debug("No NuGet feeds found to index packages from build ${LogUtil.describe(build)}")
return
}
LOG.debug("Looking for NuGet packages in ${LogUtil.describe(build)}")
val metadata = myMetadataProvider.getPackagesMetadata(build)
if (metadata.state != MetadataState.Unsynchronized && metadata.packages.isEmpty()) {
LOG.debug("Skip NuGet metadata generation for build ${LogUtil.describe(build)}. Metadata state is ${metadata.state}")
return
}
val feedNames = targetFeeds.joinToString {
val projectId = myProjectManager.findProjectById(it.projectId)?.externalId ?: it.projectId
return@joinToString if (it.feedId == NuGetFeedData.DEFAULT_FEED_ID) projectId else "$projectId/${it.feedId}"
} + " feed" + if (targetFeeds.size > 1) "s" else ""
if (metadata.state == MetadataState.Unsynchronized) {
LOG.debug("Metadata state is Unsynchronized, removing buildEntries for build ${LogUtil.describe(build)}")
for (feedData in targetFeeds) {
LOG.debug("Removing buildEntry. Key: ${feedData.key}")
myMetadataStorage.removeBuildEntries(build.buildId, feedData.key)
}
LOG.debug("Resetting cache")
myReset.resetCache()
}
for (metadata in metadata.packages) {
val id = metadata.metadata[ID]
val version = metadata.metadata[NORMALIZED_VERSION]
if (id != null && version != null) {
val key = NuGetUtils.getPackageKey(id, version)
for (feedData in targetFeeds) {
if (feedData.key == providerId) {
store.addParameters(key, metadata.metadata)
} else {
myMetadataStorage.addBuildEntry(build.buildId, feedData.key, key, metadata.metadata, !build.isPersonal)
}
}
LOG.info("Added NuGet package $key from build ${LogUtil.describe(build)} into $feedNames")
} else {
LOG.warn("Failed to resolve NuGet package Id, package ignored: ${metadata.metadata[TEAMCITY_ARTIFACT_RELPATH]}")
}
}
myReset.resetCache()
}