List of usage examples for org.eclipse.jgit.api ArchiveCommand ArchiveCommand
public ArchiveCommand(Repository repo)
From source file:com.google.gerrit.server.change.GetArchive.java
License:Apache License
@Override public BinaryResult apply(RevisionResource rsrc) throws BadRequestException, IOException, MethodNotAllowedException { if (Strings.isNullOrEmpty(format)) { throw new BadRequestException("format is not specified"); }//from w w w .j av a2s . co m 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(); } } }
From source file:com.google.gerrit.sshd.commands.UploadArchive.java
License:Apache License
@Override protected void runImpl() throws IOException, Failure { PacketLineOut packetOut = new PacketLineOut(out); packetOut.setFlushOnEnd(true);/*from w ww .j a v a 2 s .c o m*/ 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 reference if (!projectControl.allRefsAreVisible() && !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(); } }
From source file:com.google.gitiles.ArchiveServlet.java
License:Open Source License
@Override protected void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException { GitilesView view = ViewFilter.getView(req); Revision rev = view.getRevision();/*from w w w.j av a 2 s . com*/ 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(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); } }