private void processPackage()

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();
  }