List of usage examples for org.eclipse.jgit.transport SideBandOutputStream SideBandOutputStream
public SideBandOutputStream(int chan, int sz, OutputStream os)
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);/* w w w . j av a 2 s . co 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(); } }