diff --git a/artifact/src/main/org/apache/maven/artifact/deployer/RepositoryInfoBuilder.java b/artifact/src/main/org/apache/maven/artifact/deployer/RepositoryInfoBuilder.java index e5fc94e5..d5bec1e1 100644 --- a/artifact/src/main/org/apache/maven/artifact/deployer/RepositoryInfoBuilder.java +++ b/artifact/src/main/org/apache/maven/artifact/deployer/RepositoryInfoBuilder.java @@ -27,7 +27,7 @@ import org.apache.maven.project.Project; * Perform mapping between project's properties and attributes of DeployRequest class. * * @author Michal Maczka - * @version $Id: RepositoryInfoBuilder.java,v 1.8 2004/09/28 09:20:40 brett Exp $ + * @version $Id: RepositoryInfoBuilder.java,v 1.9 2004/09/29 10:56:03 brett Exp $ */ public class RepositoryInfoBuilder { @@ -87,6 +87,10 @@ public class RepositoryInfoBuilder (String) project.getContext().getVariable( "maven.repo." + repository + ".mode"); + String remoteDirectoryMode = + (String) project.getContext().getVariable( + "maven.repo." + repository + ".directory.mode"); + String passiveModeOn = (String) project.getContext().getVariable( "maven.repo." + repository + ".passiveModeOn"); @@ -120,7 +124,11 @@ public class RepositoryInfoBuilder } if (remoteMode == null) { - remoteMode = "664"; + remoteMode = "g+w"; + } + + if (remoteDirectoryMode == null) { + remoteDirectoryMode = remoteMode; } repoInfo.setUserName(username); @@ -129,6 +137,7 @@ public class RepositoryInfoBuilder repoInfo.setPrivateKey(privateKey); repoInfo.setGroup(remoteGroup); repoInfo.setMode(remoteMode); + repoInfo.setDirectoryMode(remoteDirectoryMode); repoInfo.setUrl(url); repoInfo.setProxyHost(proxyHost); repoInfo.setProxyUserName(proxyUser); diff --git a/artifact/src/main/org/apache/maven/deploy/RepositoryInfo.java b/artifact/src/main/org/apache/maven/deploy/RepositoryInfo.java index 08bdfd18..4c866bf3 100644 --- a/artifact/src/main/org/apache/maven/deploy/RepositoryInfo.java +++ b/artifact/src/main/org/apache/maven/deploy/RepositoryInfo.java @@ -23,7 +23,7 @@ package org.apache.maven.deploy; * perform a deployment. * * @author Michal Maczka - * @version $Id: RepositoryInfo.java,v 1.7 2004/09/28 09:20:40 brett Exp $ + * @version $Id: RepositoryInfo.java,v 1.8 2004/09/29 10:56:04 brett Exp $ */ public class RepositoryInfo { @@ -58,6 +58,9 @@ public class RepositoryInfo /** File mode. */ private String mode; + /** Directory mode. */ + private String directoryMode; + /** The passpharse of the user's private key file */ private String passphrase; @@ -190,6 +193,16 @@ public class RepositoryInfo this.privateKey = privateKey; } + public String getDirectoryMode() + { + return directoryMode; + } + + public void setDirectoryMode( String directoryMode ) + { + this.directoryMode = directoryMode; + } + public String getMode() { return mode; diff --git a/artifact/src/main/org/apache/maven/deploy/deployers/FtpDeployer.java b/artifact/src/main/org/apache/maven/deploy/deployers/FtpDeployer.java index 7796768e..e3b37e04 100644 --- a/artifact/src/main/org/apache/maven/deploy/deployers/FtpDeployer.java +++ b/artifact/src/main/org/apache/maven/deploy/deployers/FtpDeployer.java @@ -42,7 +42,7 @@ import org.apache.maven.deploy.exceptions.TransferFailedException; * * @author Jason van Zyl * @author Michal Maczka - * @version $Id: FtpDeployer.java,v 1.13 2004/09/28 09:20:40 brett Exp $ + * @version $Id: FtpDeployer.java,v 1.14 2004/09/29 10:56:04 brett Exp $ * * @todo review exception handling * @todo don't spool to System.out @@ -54,6 +54,7 @@ public class FtpDeployer extends AbstractDeployer public final static String PROTOCOL = "ftp://"; private FTPClient ftp = null; + private RepositoryInfo repoInfo = null; private static final Log LOG = LogFactory.getLog(FtpDeployer.class); /* (non-Javadoc) @@ -129,15 +130,17 @@ public class FtpDeployer extends AbstractDeployer { ftp.enterLocalPassiveMode(); } - - ftp.changeWorkingDirectory(repoInfo.getBasedir()); - + handleCommand( ftp.changeWorkingDirectory(repoInfo.getBasedir())); } catch (IOException e) { throw new AuthenticationException("Cannot login to remote system",e); } - + catch (TransferFailedException e) + { + throw new AuthenticationException("Cannot locate base directory", e ); + } + this.repoInfo = repoInfo; } /* (non-Javadoc) @@ -170,21 +173,30 @@ public class FtpDeployer extends AbstractDeployer String[] dirs = StringUtils.split(request.dirname(), "/"); for (int i = 0; i < dirs.length; i++) { - ftp.makeDirectory(dirs[i]); - ftp.changeWorkingDirectory(dirs[i]); + if ( !ftp.changeWorkingDirectory(dirs[i])) { + handleCommand( ftp.makeDirectory(dirs[i])); + // Ignore errors + ftp.sendSiteCommand( "CHGRP " + repoInfo.getGroup() + " " + dirs[i] ); + ftp.sendSiteCommand( "CHMOD " + repoInfo.getDirectoryMode() + " " + dirs[i] ); + handleCommand( ftp.changeWorkingDirectory(dirs[i])); + } } - ftp.storeFile( + handleCommand( ftp.storeFile( request.filename(), - new FileInputStream(request.getSrcFile())); - // TODO: test first, then mark MPARTIFACT-24 complete - //ftp.executeSiteCommand( "CHGRP " + request.getGroup() + " " + request.filename() ); - //ftp.executeSiteCommand( "CHMOD " + request.getMode() + " " + request.filename() ); + new FileInputStream(request.getSrcFile()))); + // Ignore errors + ftp.sendSiteCommand( "CHGRP " + repoInfo.getGroup() + " " + request.filename() ); + ftp.sendSiteCommand( "CHMOD " + repoInfo.getMode() + " " + request.filename() ); for (int i = 0; i < dirs.length; i++) { - ftp.changeWorkingDirectory(".."); + handleCommand( ftp.changeWorkingDirectory("..")); } } + catch (TransferFailedException e) + { + throw e; + } catch (Exception e) { throw new TransferFailedException(e.getMessage(),e); @@ -192,6 +204,14 @@ public class FtpDeployer extends AbstractDeployer } + private void handleCommand( boolean response ) throws TransferFailedException + { + if ( !response ) + { + throw new TransferFailedException( "Error executing FTP command" ); + } + } + /** * Description of the Class */ diff --git a/artifact/xdocs/changes.xml b/artifact/xdocs/changes.xml index f1972d12..fb45c9e0 100644 --- a/artifact/xdocs/changes.xml +++ b/artifact/xdocs/changes.xml @@ -26,6 +26,7 @@
664.
+ is deployed. Default is g+w.
+ maven.repo.x.mode.
+ Warning: if you are using an octal file permission,
+ you should not use the default value for this as you should
+ add the executable permission for directories.