private String storeImage()

in src/main/java/com/googlesource/gerrit/plugins/imagare/PostImage.java [146:212]


  private String storeImage(ProjectState ps, byte[] content, String fileName)
      throws AuthException, IOException, ResourceConflictException, PermissionBackendException,
          NoSuchProjectException {
    long maxSize = ps.getEffectiveMaxObjectSizeLimit().value;
    // maxSize == 0 means that there is no limit
    if (maxSize > 0 && content.length > maxSize) {
      throw new ResourceConflictException("image too large");
    }

    String ref = getRef(content, fileName);

    try (Repository repo = repoManager.openRepository(ps.getProject().getNameKey())) {
      ObjectId commitId = repo.resolve(ref);
      if (commitId != null) {
        // this image exists already
        return getUrl(ps.getProject().getNameKey(), ref, fileName);
      }

      try (RevWalk rw = new RevWalk(repo);
          ObjectInserter oi = repo.newObjectInserter()) {
        ObjectId blobId = oi.insert(Constants.OBJ_BLOB, content);
        oi.flush();

        TreeFormatter tf = new TreeFormatter();
        tf.append(fileName, FileMode.REGULAR_FILE, blobId);
        ObjectId treeId = tf.insertTo(oi);
        oi.flush();

        PersonIdent authorIdent =
            self.get().newCommitterIdent(myIdent.getWhen(), myIdent.getTimeZone());
        CommitBuilder cb = new CommitBuilder();
        cb.setTreeId(treeId);
        cb.setAuthor(authorIdent);
        cb.setCommitter(authorIdent);
        cb.setMessage("Image Upload");

        commitId = oi.insert(cb);
        oi.flush();

        try {
          createRefControl.checkCreateRef(
              self,
              repo,
              new Branch.NameKey(ps.getProject().getNameKey(), ref),
              rw.parseCommit(commitId));
        } catch (AuthException e) {
          throw new AuthException(
              String.format("Project %s doesn't allow image upload.", ps.getProject().getName()));
        }

        RefUpdate ru = repo.updateRef(ref);
        ru.setExpectedOldObjectId(ObjectId.zeroId());
        ru.setNewObjectId(commitId);
        ru.disableRefLog();
        if (ru.update(rw) == RefUpdate.Result.NEW) {
          referenceUpdated.fire(ps.getProject().getNameKey(), ru, self.get().state());
        } else {
          throw new IOException(
              String.format(
                  "Failed to create ref %s in %s: %s",
                  ref, ps.getProject().getName(), ru.getResult()));
        }

        return getUrl(ps.getProject().getNameKey(), ref, fileName);
      }
    }
  }