Example usage for org.eclipse.jgit.transport SideBandOutputStream SideBandOutputStream

List of usage examples for org.eclipse.jgit.transport SideBandOutputStream SideBandOutputStream

Introduction

In this page you can find the example usage for org.eclipse.jgit.transport SideBandOutputStream SideBandOutputStream.

Prototype

public SideBandOutputStream(int chan, int sz, OutputStream os) 

Source Link

Document

Create a new stream to write side band packets.

Usage

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