Search in sources :

Example 1 with CommandExecutor

use of org.apache.maven.wagon.CommandExecutor in project maven-plugins by apache.

the class DefaultRepositoryCopier method copy.

public void copy(Repository sourceRepository, Repository targetRepository, String version) throws WagonException, IOException {
    String prefix = "staging-plugin";
    String fileName = prefix + "-" + version + ".zip";
    String tempdir = System.getProperty("java.io.tmpdir");
    logger.debug("Writing all output to " + tempdir);
    // Create the renameScript script
    String renameScriptName = prefix + "-" + version + "-rename.sh";
    File renameScript = new File(tempdir, renameScriptName);
    // Work directory
    File basedir = new File(tempdir, prefix + "-" + version);
    FileUtils.deleteDirectory(basedir);
    basedir.mkdirs();
    Wagon sourceWagon = wagonManager.getWagon(sourceRepository);
    AuthenticationInfo sourceAuth = wagonManager.getAuthenticationInfo(sourceRepository.getId());
    sourceWagon.connect(sourceRepository, sourceAuth);
    logger.info("Looking for files in the source repository.");
    List<String> files = new ArrayList<String>();
    scan(sourceWagon, "", files);
    logger.info("Downloading files from the source repository to: " + basedir);
    for (String s : files) {
        if (s.contains(".svn")) {
            continue;
        }
        File f = new File(basedir, s);
        FileUtils.mkdir(f.getParentFile().getAbsolutePath());
        logger.info("Downloading file from the source repository: " + s);
        sourceWagon.get(s, f);
    }
    // ----------------------------------------------------------------------------
    // Now all the files are present locally and now we are going to grab the
    // metadata files from the targetRepositoryUrl and pull those down locally
    // so that we can merge the metadata.
    // ----------------------------------------------------------------------------
    logger.info("Downloading metadata from the target repository.");
    Wagon targetWagon = wagonManager.getWagon(targetRepository);
    if (!(targetWagon instanceof CommandExecutor)) {
        throw new CommandExecutionException("Wagon class '" + targetWagon.getClass().getName() + "' in use for target repository is not a CommandExecutor");
    }
    AuthenticationInfo targetAuth = wagonManager.getAuthenticationInfo(targetRepository.getId());
    targetWagon.connect(targetRepository, targetAuth);
    PrintWriter rw = new PrintWriter(new FileWriter(renameScript));
    File archive = new File(tempdir, fileName);
    for (String s : files) {
        if (s.startsWith("/")) {
            s = s.substring(1);
        }
        if (s.endsWith(MAVEN_METADATA)) {
            File emf = new File(basedir, s + IN_PROCESS_MARKER);
            try {
                targetWagon.get(s, emf);
            } catch (ResourceDoesNotExistException e) {
                continue;
            }
            try {
                mergeMetadata(emf);
            } catch (XmlPullParserException e) {
                throw new IOException("Metadata file is corrupt " + s + " Reason: " + e.getMessage());
            }
        }
    }
    Set moveCommands = new TreeSet();
    // ----------------------------------------------------------------------------
    // Create the Zip file that we will deploy to the targetRepositoryUrl stage
    // ----------------------------------------------------------------------------
    logger.info("Creating zip file.");
    OutputStream os = new FileOutputStream(archive);
    ZipOutputStream zos = new ZipOutputStream(os);
    scanDirectory(basedir, basedir, zos, version, moveCommands);
    // ----------------------------------------------------------------------------
    // Create the renameScript script. This is as atomic as we can
    // ----------------------------------------------------------------------------
    logger.info("Creating rename script.");
    for (Object moveCommand : moveCommands) {
        String s = (String) moveCommand;
        // We use an explicit unix '\n' line-ending here instead of using the println() method.
        // Using println() will cause files and folders to have a '\r' at the end if the plugin is run on Windows.
        rw.print(s + "\n");
    }
    rw.close();
    ZipEntry e = new ZipEntry(renameScript.getName());
    zos.putNextEntry(e);
    InputStream is = new FileInputStream(renameScript);
    IOUtil.copy(is, zos);
    zos.close();
    is.close();
    sourceWagon.disconnect();
    // Push the Zip to the target system
    logger.info("Uploading zip file to the target repository.");
    targetWagon.put(archive, fileName);
    logger.info("Unpacking zip file on the target machine.");
    String targetRepoBaseDirectory = targetRepository.getBasedir();
    // We use the super quiet option here as all the noise seems to kill/stall the connection
    String command = "unzip -o -qq -d " + targetRepoBaseDirectory + " " + targetRepoBaseDirectory + "/" + fileName;
    ((CommandExecutor) targetWagon).executeCommand(command);
    logger.info("Deleting zip file from the target repository.");
    command = "rm -f " + targetRepoBaseDirectory + "/" + fileName;
    ((CommandExecutor) targetWagon).executeCommand(command);
    logger.info("Running rename script on the target machine.");
    command = "cd " + targetRepoBaseDirectory + "; sh " + renameScriptName;
    ((CommandExecutor) targetWagon).executeCommand(command);
    logger.info("Deleting rename script from the target repository.");
    command = "rm -f " + targetRepoBaseDirectory + "/" + renameScriptName;
    ((CommandExecutor) targetWagon).executeCommand(command);
    targetWagon.disconnect();
}
Also used : TreeSet(java.util.TreeSet) Set(java.util.Set) FileInputStream(java.io.FileInputStream) InputStream(java.io.InputStream) FileWriter(java.io.FileWriter) ZipOutputStream(java.util.zip.ZipOutputStream) OutputStream(java.io.OutputStream) FileOutputStream(java.io.FileOutputStream) ZipEntry(java.util.zip.ZipEntry) ArrayList(java.util.ArrayList) CommandExecutor(org.apache.maven.wagon.CommandExecutor) Wagon(org.apache.maven.wagon.Wagon) IOException(java.io.IOException) AuthenticationInfo(org.apache.maven.wagon.authentication.AuthenticationInfo) FileInputStream(java.io.FileInputStream) TreeSet(java.util.TreeSet) ZipOutputStream(java.util.zip.ZipOutputStream) FileOutputStream(java.io.FileOutputStream) CommandExecutionException(org.apache.maven.wagon.CommandExecutionException) XmlPullParserException(org.codehaus.plexus.util.xml.pull.XmlPullParserException) File(java.io.File) ResourceDoesNotExistException(org.apache.maven.wagon.ResourceDoesNotExistException) PrintWriter(java.io.PrintWriter)

Example 2 with CommandExecutor

use of org.apache.maven.wagon.CommandExecutor in project maven-plugins by apache.

the class AbstractDeployMojo method chmod.

private static void chmod(final Wagon wagon, final Repository repository, final String chmodOptions, final String chmodMode) throws MojoExecutionException {
    try {
        if (wagon instanceof CommandExecutor) {
            CommandExecutor exec = (CommandExecutor) wagon;
            exec.executeCommand("chmod " + chmodOptions + " " + chmodMode + " " + repository.getBasedir());
        }
    // else ? silently ignore, FileWagon is not a CommandExecutor!
    } catch (CommandExecutionException e) {
        throw new MojoExecutionException("Error uploading site", e);
    }
}
Also used : MojoExecutionException(org.apache.maven.plugin.MojoExecutionException) CommandExecutor(org.apache.maven.wagon.CommandExecutor) CommandExecutionException(org.apache.maven.wagon.CommandExecutionException)

Aggregations

CommandExecutionException (org.apache.maven.wagon.CommandExecutionException)2 CommandExecutor (org.apache.maven.wagon.CommandExecutor)2 File (java.io.File)1 FileInputStream (java.io.FileInputStream)1 FileOutputStream (java.io.FileOutputStream)1 FileWriter (java.io.FileWriter)1 IOException (java.io.IOException)1 InputStream (java.io.InputStream)1 OutputStream (java.io.OutputStream)1 PrintWriter (java.io.PrintWriter)1 ArrayList (java.util.ArrayList)1 Set (java.util.Set)1 TreeSet (java.util.TreeSet)1 ZipEntry (java.util.zip.ZipEntry)1 ZipOutputStream (java.util.zip.ZipOutputStream)1 MojoExecutionException (org.apache.maven.plugin.MojoExecutionException)1 ResourceDoesNotExistException (org.apache.maven.wagon.ResourceDoesNotExistException)1 Wagon (org.apache.maven.wagon.Wagon)1 AuthenticationInfo (org.apache.maven.wagon.authentication.AuthenticationInfo)1 XmlPullParserException (org.codehaus.plexus.util.xml.pull.XmlPullParserException)1