Search in sources :

Example 1 with ArchiveFormat

use of com.google.gerrit.server.change.ArchiveFormat in project gerrit by GerritCodeReview.

the class GetServerInfo method getDownloadInfo.

private DownloadInfo getDownloadInfo(DynamicMap<DownloadScheme> downloadSchemes, DynamicMap<DownloadCommand> downloadCommands, DynamicMap<CloneCommand> cloneCommands, AllowedFormats archiveFormats) {
    DownloadInfo info = new DownloadInfo();
    info.schemes = new HashMap<>();
    for (DynamicMap.Entry<DownloadScheme> e : downloadSchemes) {
        DownloadScheme scheme = e.getProvider().get();
        if (scheme.isEnabled() && scheme.getUrl("${project}") != null) {
            info.schemes.put(e.getExportName(), getDownloadSchemeInfo(scheme, downloadCommands, cloneCommands));
        }
    }
    info.archives = archiveFormats.getAllowed().stream().map(ArchiveFormat::getShortName).collect(toList());
    return info;
}
Also used : DynamicMap(com.google.gerrit.extensions.registration.DynamicMap) ArchiveFormat(com.google.gerrit.server.change.ArchiveFormat) DownloadInfo(com.google.gerrit.extensions.common.DownloadInfo) DownloadScheme(com.google.gerrit.extensions.config.DownloadScheme)

Example 2 with ArchiveFormat

use of com.google.gerrit.server.change.ArchiveFormat 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();
    }
}
Also used : GitAPIException(org.eclipse.jgit.api.errors.GitAPIException) PacketLineOut(org.eclipse.jgit.transport.PacketLineOut) ArchiveFormat(com.google.gerrit.server.change.ArchiveFormat) ObjectId(org.eclipse.jgit.lib.ObjectId) SideBandOutputStream(org.eclipse.jgit.transport.SideBandOutputStream) ArchiveCommand(org.eclipse.jgit.api.ArchiveCommand)

Aggregations

ArchiveFormat (com.google.gerrit.server.change.ArchiveFormat)2 DownloadInfo (com.google.gerrit.extensions.common.DownloadInfo)1 DownloadScheme (com.google.gerrit.extensions.config.DownloadScheme)1 DynamicMap (com.google.gerrit.extensions.registration.DynamicMap)1 ArchiveCommand (org.eclipse.jgit.api.ArchiveCommand)1 GitAPIException (org.eclipse.jgit.api.errors.GitAPIException)1 ObjectId (org.eclipse.jgit.lib.ObjectId)1 PacketLineOut (org.eclipse.jgit.transport.PacketLineOut)1 SideBandOutputStream (org.eclipse.jgit.transport.SideBandOutputStream)1