in nuget-feed/src/jetbrains/buildServer/nuget/feed/server/controllers/upload/PackageUploadHandler.java [214:284]
private void processPackage(@NotNull final MultipartHttpServletRequest request,
@NotNull final HttpServletResponse response,
@NotNull final RunningBuildEx build,
@NotNull final MultipartFile file,
@NotNull final TContext context) throws Exception {
final Map<String, String> metadata;
InputStream inputStream = null;
try {
inputStream = file.getInputStream();
metadata = myPackageAnalyzer.analyzePackage(inputStream);
} finally {
FileUtil.close(inputStream);
}
final String id = metadata.get(ID);
final String version = metadata.get(NORMALIZED_VERSION);
// Package must have id and version specified
if (StringUtil.isEmptyOrSpaces(id) || StringUtil.isEmptyOrSpaces(version)) {
throw new PackageLoadException("Lack of Id or Version in NuGet package specification");
}
final String key = NuGetUtils.getPackageKey(id, version);
myMetadataHandler.validate(request, response, context, build, key, metadata);
String path;
try {
path = MessageFormat.format(getPathFormat(build), id, version);
} catch (IllegalArgumentException e) {
LOG.warn(String.format("Invalid '%s' parameter value: %s", NuGetFeedConstants.PROP_NUGET_FEED_PUBLISH_PATH, e.getMessage()));
path = MessageFormat.format(DEFAULT_PATH_FORMAT, id, version);
}
metadata.put(PACKAGE_SIZE, String.valueOf(file.getSize()));
metadata.put(TEAMCITY_ARTIFACT_RELPATH, path);
metadata.put(TEAMCITY_BUILD_TYPE_ID, build.getBuildTypeId());
final String created = ODataDataFormat.formatDate(new Date());
metadata.put(CREATED, created);
metadata.put(LAST_UPDATED, created);
metadata.put(PUBLISHED, created);
try {
inputStream = file.getInputStream();
metadata.put(PACKAGE_HASH, myPackageAnalyzer.getSha512Hash(inputStream));
metadata.put(PACKAGE_HASH_ALGORITHM, PackageAnalyzer.SHA512);
} finally {
FileUtil.close(inputStream);
}
LOG.info(String.format("Publishing nuget package %s:%s at path '%s' as artifact for build %s into feed %s",
id, version, path, LogUtil.describe(build), context.getFeedName()));
try {
inputStream = file.getInputStream();
build.publishArtifact(path, inputStream);
} catch (IOException e) {
LOG.warnAndDebugDetails(String.format("Failed to publish build %s artifact at the path %s: %s",
build.getBuildId(), path, e.getMessage()), e);
throw e;
} finally {
LOG.debug(String.format("Published nuget package %s:%s as artifact for build %s",
id, version, LogUtil.describe(build)));
FileUtil.close(inputStream);
}
myMetadataHandler.handleMetadata(request, response, context, build, key, metadata);
myCacheReset.resetCache();
}