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

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

Introduction

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

Prototype

int CH_DATA

To view the source code for org.eclipse.jgit.transport SideBandOutputStream CH_DATA.

Click Source Link

Document

Channel used for pack data.

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