public void fillOutputData()

in wagon-providers/wagon-ssh/src/main/java/org/apache/maven/wagon/providers/ssh/jsch/ScpWagon.java [320:409]


    public void fillOutputData( OutputData outputData )
        throws TransferFailedException
    {
        Resource resource = outputData.getResource();

        String basedir = getRepository().getBasedir();

        String path = getPath( basedir, resource.getName() );

        String dir = ScpHelper.getResourceDirectory( resource.getName() );

        try
        {
            sshTool.createRemoteDirectories( getPath( basedir, dir ), getRepository().getPermissions() );
        }
        catch ( CommandExecutionException e )
        {
            fireTransferError( resource, e, TransferEvent.REQUEST_PUT );

            throw new TransferFailedException( e.getMessage(), e );
        }

        String octalMode = getOctalMode( getRepository().getPermissions() );

        // exec 'scp -p -t rfile' remotely
        String command = "scp";
        if ( octalMode != null )
        {
            command += " -p";
        }
        command += " -t \"" + path + "\"";

        fireTransferDebug( "Executing command: " + command );

        String resourceName = resource.getName();

        OutputStream out = null;
        try
        {
            channel = (ChannelExec) session.openChannel( EXEC_CHANNEL );

            channel.setCommand( command );

            // get I/O streams for remote scp
            out = channel.getOutputStream();
            outputData.setOutputStream( out );

            channelInputStream = channel.getInputStream();

            channel.connect();

            checkAck( channelInputStream );

            // send "C0644 filesize filename", where filename should not include '/'
            long filesize = resource.getContentLength();

            String mode = octalMode == null ? "0644" : octalMode;
            command = "C" + mode + " " + filesize + " ";

            if ( resourceName.lastIndexOf( ScpHelper.PATH_SEPARATOR ) > 0 )
            {
                command += resourceName.substring( resourceName.lastIndexOf( ScpHelper.PATH_SEPARATOR ) + 1 );
            }
            else
            {
                command += resourceName;
            }

            command += "\n";

            out.write( command.getBytes() );

            out.flush();

            checkAck( channelInputStream );
        }
        catch ( JSchException e )
        {
            fireTransferError( resource, e, TransferEvent.REQUEST_PUT );

            String msg = "Error occurred while deploying '" + resourceName + "' to remote repository: "
                + getRepository().getUrl() + ": " + e.getMessage();

            throw new TransferFailedException( msg, e );
        }
        catch ( IOException e )
        {
            handleIOException( resource, e );
        }
    }