use of org.eclipse.jgit.api.ArchiveCommand in project gerrit by GerritCodeReview.
the class GetArchive method apply.
@Override
public BinaryResult apply(RevisionResource rsrc) throws BadRequestException, IOException, MethodNotAllowedException {
if (Strings.isNullOrEmpty(format)) {
throw new BadRequestException("format is not specified");
}
final ArchiveFormat f = allowedFormats.extensions.get("." + format);
if (f == null) {
throw new BadRequestException("unknown archive format");
}
if (f == ArchiveFormat.ZIP) {
throw new MethodNotAllowedException("zip format is disabled");
}
boolean close = true;
final Repository repo = repoManager.openRepository(rsrc.getControl().getProject().getNameKey());
try {
final RevCommit commit;
String name;
try (RevWalk rw = new RevWalk(repo)) {
commit = rw.parseCommit(ObjectId.fromString(rsrc.getPatchSet().getRevision().get()));
name = name(f, rw, commit);
}
BinaryResult bin = new BinaryResult() {
@Override
public void writeTo(OutputStream out) throws IOException {
try {
new ArchiveCommand(repo).setFormat(f.name()).setTree(commit.getTree()).setOutputStream(out).call();
} catch (GitAPIException e) {
throw new IOException(e);
}
}
@Override
public void close() throws IOException {
repo.close();
}
};
bin.disableGzip().setContentType(f.getMimeType()).setAttachmentName(name);
close = false;
return bin;
} finally {
if (close) {
repo.close();
}
}
}
use of org.eclipse.jgit.api.ArchiveCommand in project gerrit by GerritCodeReview.
the class UploadArchive method runImpl.
@Override
protected void runImpl() throws IOException, PermissionBackendException, Failure {
PacketLineOut packetOut = new PacketLineOut(out);
packetOut.setFlushOnEnd(true);
packetOut.writeString("ACK");
packetOut.end();
try {
// Parse Git arguments
readArguments();
ArchiveFormat f = allowedFormats.getExtensions().get("." + options.format);
if (f == null) {
throw new Failure(3, "fatal: upload-archive not permitted");
}
// Find out the object to get from the specified reference and paths
ObjectId treeId = repo.resolve(options.treeIsh);
if (treeId == null) {
throw new Failure(4, "fatal: reference not found");
}
// Verify the user has permissions to read the specified tree.
if (!canRead(treeId)) {
throw new Failure(5, "fatal: cannot perform upload-archive operation");
}
// The archive is sent in DATA sideband channel
try (SideBandOutputStream sidebandOut = new SideBandOutputStream(SideBandOutputStream.CH_DATA, SideBandOutputStream.MAX_BUF, out)) {
new ArchiveCommand(repo).setFormat(f.name()).setFormatOptions(getFormatOptions(f)).setTree(treeId).setPaths(options.path.toArray(new String[0])).setPrefix(options.prefix).setOutputStream(sidebandOut).call();
sidebandOut.flush();
} catch (GitAPIException e) {
throw new Failure(7, "fatal: git api exception, " + e);
}
} catch (Failure f) {
// Report the error in ERROR sideband channel
try (SideBandOutputStream sidebandError = new SideBandOutputStream(SideBandOutputStream.CH_ERROR, SideBandOutputStream.MAX_BUF, out)) {
sidebandError.write(f.getMessage().getBytes(UTF_8));
sidebandError.flush();
}
throw f;
} finally {
// In any case, cleanly close the packetOut channel
packetOut.end();
}
}
use of org.eclipse.jgit.api.ArchiveCommand in project gitiles by GerritCodeReview.
the class ArchiveServlet method doGet.
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException {
GitilesView view = ViewFilter.getView(req);
Revision rev = view.getRevision();
Repository repo = ServletUtils.getRepository(req);
ObjectId treeId = getTree(view, repo, rev);
if (treeId.equals(ObjectId.zeroId())) {
res.sendError(SC_NOT_FOUND);
return;
}
Optional<ArchiveFormat> format = ArchiveFormat.byExtension(view.getExtension(), getAccess(req).getConfig());
if (!format.isPresent()) {
res.setStatus(SC_NOT_FOUND);
return;
}
String filename = getFilename(view, rev, view.getExtension());
setDownloadHeaders(req, res, filename, format.get().getMimeType());
res.setStatus(SC_OK);
try {
new ArchiveCommand(repo).setFormat(format.get().getRegisteredName()).setTree(treeId).setOutputStream(res.getOutputStream()).call();
} catch (GitAPIException e) {
throw new IOException(e);
}
}
Aggregations