scohen 2005/05/30 07:41:34 Modified: src/testcases/org/apache/tools/ant/taskdefs/optional/net FTPTest.java src/main/org/apache/tools/ant/taskdefs/optional/net FTP.java src/etc/testcases/taskdefs/optional/net ftp.xml docs/manual/OptionalTasks ftp.html Log: Add initialSiteCommand and siteCommand attributes. PR:34257, 34853 Revision Changes Path 1.21 +26 -0 ant/src/testcases/org/apache/tools/ant/taskdefs/optional/net/FTPTest.java Index: FTPTest.java =================================================================== RCS file: /home/cvs/ant/src/testcases/org/apache/tools/ant/taskdefs/optional/net/FTPTest.java,v retrieving revision 1.20 retrieving revision 1.21 diff -u -r1.20 -r1.21 --- FTPTest.java 30 May 2005 02:18:39 -0000 1.20 +++ FTPTest.java 30 May 2005 14:41:34 -0000 1.21 @@ -866,5 +866,31 @@ fail("Retry forever specified, but failed."); } } + + public void testInitialCommand() { + performCommandTest("test-initial-command", new int[] { 1,0 }); + } + public void testSiteAction() { + performCommandTest("test-site-action", new int[] { 1,0 }); + } + + private void performCommandTest(String target, int[] expectedCounts) { + String[] messages = new String[]{ + "Doing Site Command: umask 222", + "Failed to issue Site Command: umask 222", + }; + LogCounter counter = new LogCounter(); + for (int i=0; i < messages.length; i++) { + counter.addLogMessageToSearch(messages[i]); + } + + getProject().addBuildListener(counter); + getProject().executeTarget(target); + for (int i=0; i < messages.length; i++) { + assertEquals("target "+target+":message "+ i, expectedCounts[i], counter.getMatchCount(messages[i])); + } + + } + } 1.78 +77 -24 ant/src/main/org/apache/tools/ant/taskdefs/optional/net/FTP.java Index: FTP.java =================================================================== RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/optional/net/FTP.java,v retrieving revision 1.77 retrieving revision 1.78 diff -u -r1.77 -r1.78 --- FTP.java 30 May 2005 00:40:20 -0000 1.77 +++ FTP.java 30 May 2005 14:41:34 -0000 1.78 @@ -84,6 +84,7 @@ protected static final int MK_DIR = 4; protected static final int CHMOD = 5; protected static final int RM_DIR = 6; + protected static final int SITE_CMD = 7; /** return code of ftp - not implemented in commons-net version 1.0 */ private static final int CODE_521 = 521; @@ -129,6 +130,8 @@ private Granularity timestampGranularity = Granularity.getDefault(); private boolean isConfigurationSet = false; private int retriesAllowed = 0; + private String siteCommand = null; + private String initialSiteCommand = null; protected static final String[] ACTION_STRS = { "sending", @@ -137,7 +140,8 @@ "listing", "making directory", "chmod", - "removing" + "removing", + "site" }; protected static final String[] COMPLETED_ACTION_STRS = { @@ -147,7 +151,8 @@ "listed", "created directory", "mode changed", - "removed" + "removed", + "site command executed" }; protected static final String[] ACTION_TARGET_STRS = { @@ -157,7 +162,8 @@ "files", "directory", "files", - "directories" + "directories", + "site command" }; @@ -1193,7 +1199,7 @@ /** * Sets the FTP action to be taken. Currently accepts "put", "get", "del", - * "mkdir" and "list". + * "mkdir", "chmod", "list", and "site". * * @deprecated setAction(String) is deprecated and is replaced with * setAction(FTP.Action) to make Ant's Introspection mechanism do the @@ -1218,7 +1224,7 @@ /** * Sets the FTP action to be taken. Currently accepts "put", "get", "del", - * "mkdir", "chmod" and "list". + * "mkdir", "chmod", "list", and "site". * * @param action the FTP action to be performed. * @@ -1268,10 +1274,11 @@ } /** + * Sets the systemTypeKey attribute. * Method for setting <code>FTPClientConfig</code> remote system key. * * @param systemTypeKey the key to be set - BUT if blank - * the default value of null will be kept. + * the default value of null (which signifies "autodetect") will be kept. * @see org.apache.commons.net.ftp.FTPClientConfig */ public void setSystemTypeKey(FTPSystemType systemKey) { @@ -1283,9 +1290,7 @@ } /** - * Delegate method for - * <code>FTPClientConfig.setDefaultDateFormatStr(String)</code>. - * + * Sets the defaultDateFormatConfig attribute. * @param defaultDateFormatConfig configuration to be set, unless it is * null or empty string, in which case ignored. * @see org.apache.commons.net.ftp.FTPClientConfig @@ -1299,9 +1304,7 @@ } /** - * Delegate method for - * <code>FTPClientConfig.setRecentDateFormatStr(String)</code>. - * + * Sets the recentDateFormatConfig attribute. * @param recentDateFormatConfig configuration to be set, unless it is * null or empty string, in which case ignored. * @see org.apache.commons.net.ftp.FTPClientConfig @@ -1315,9 +1318,7 @@ } /** - * Delegate method for - * <code>FTPClientConfig.setServerLanguageCode(String)</code>. - * + * Sets the serverLanguageCode attribute. * @param serverLanguageCodeConfig configuration to be set, unless it is * null or empty string, in which case ignored. * @see org.apache.commons.net.ftp.FTPClientConfig @@ -1331,9 +1332,7 @@ } /** - * Delegate method for - * <code>FTPClientConfig.setServerTimeZoneId(String)</code>. - * + * Sets the serverTimeZoneConfig attribute. * @param serverTimeZoneConfig configuration to be set, unless it is * null or empty string, in which case ignored. * @see org.apache.commons.net.ftp.FTPClientConfig @@ -1347,8 +1346,7 @@ } /** - * Delegate method for - * <code>FTPClientConfig.setShortMonthNames(String)</code>. + * Sets the shortMonthNamesConfig attribute * * @param shortMonthNamesConfig configuration to be set, unless it is * null or empty string, in which case ignored. @@ -1437,6 +1435,7 @@ return timestampGranularity; } /** + * Sets the timestampGranularity attribute * @param timestampGranularity The timestampGranularity to set. */ public void setTimestampGranularity(Granularity timestampGranularity) { @@ -1446,6 +1445,24 @@ this.timestampGranularity = timestampGranularity; } /** + * Sets the siteCommand attribute. This attribute + * names the command that will be executed if the action + * is "site". + * @param siteCommand The siteCommand to set. + */ + public void setSiteCommand(String siteCommand) { + this.siteCommand = siteCommand; + } + /** + * Sets the initialSiteCommand attribute. This attribute + * names a site command that will be executed immediately + * after connection. + * @param initialSiteCommand The initialSiteCommand to set. + */ + public void setInitialSiteCommand(String initialCommand) { + this.initialSiteCommand = initialCommand; + } + /** * Checks to see that all required parameters are set. * * @throws BuildException if the configuration is not valid. @@ -1475,6 +1492,11 @@ throw new BuildException("chmod attribute must be set for chmod " + "action!"); } + if (action == SITE_CMD && siteCommand == null) { + throw new BuildException("sitecommand attribute must be set for site " + + "action!"); + } + if (this.isConfigurationSet) { try { @@ -1486,10 +1508,10 @@ } } - protected void executeRetryable(RetryHandler h, Retryable r, String filename) + protected void executeRetryable(RetryHandler h, Retryable r, String descr) throws IOException { - h.execute(r, filename); + h.execute(r, descr); } @@ -2239,12 +2261,33 @@ + "mode: " + ftp.getReplyString()); } } + + // If an initial command was configured then send it. + // Some FTP servers offer different modes of operation, + // E.G. switching between a UNIX file system mode and + // a legacy file system. + if (this.initialSiteCommand != null) { + RetryHandler h = new RetryHandler(this.retriesAllowed, this); + final FTPClient lftp = ftp; + executeRetryable(h, new Retryable() { + public void execute() throws IOException { + doSiteCommand(lftp, FTP.this.initialSiteCommand); + } + }, "initial site command: "+ this.initialSiteCommand); + } + // For a unix ftp server you can set the default mask for all files // created. if (umask != null) { - doSiteCommand(ftp, "umask " + umask); + RetryHandler h = new RetryHandler(this.retriesAllowed, this); + final FTPClient lftp = ftp; + executeRetryable(h, new Retryable() { + public void execute() throws IOException { + doSiteCommand(lftp, "umask " + umask); + } + }, "umask " + umask); } // If the action is MK_DIR, then the specified remote @@ -2258,6 +2301,14 @@ makeRemoteDir(lftp, remotedir); } }, remotedir); + } else if (action == SITE_CMD) { + RetryHandler h = new RetryHandler(this.retriesAllowed, this); + final FTPClient lftp = ftp; + executeRetryable(h, new Retryable() { + public void execute() throws IOException { + doSiteCommand(lftp, FTP.this.siteCommand); + } + }, "Site Command: " + this.siteCommand); } else { if (remotedir != null) { log("changing the remote directory", Project.MSG_VERBOSE); @@ -2301,7 +2352,7 @@ private static final String[] VALID_ACTIONS = { "send", "put", "recv", "get", "del", "delete", "list", "mkdir", - "chmod", "rmdir" + "chmod", "rmdir", "site" }; @@ -2337,6 +2388,8 @@ return MK_DIR; } else if (actionL.equals("rmdir")) { return RM_DIR; + } else if (actionL.equals("site")) { + return SITE_CMD; } return SEND_FILES; } 1.14 +25 -0 ant/src/etc/testcases/taskdefs/optional/net/ftp.xml Index: ftp.xml =================================================================== RCS file: /home/cvs/ant/src/etc/testcases/taskdefs/optional/net/ftp.xml,v retrieving revision 1.13 retrieving revision 1.14 diff -u -r1.13 -r1.14 --- ftp.xml 30 May 2005 00:40:20 -0000 1.13 +++ ftp.xml 30 May 2005 14:41:34 -0000 1.14 @@ -285,5 +285,30 @@ <fileset refid="fileset-destination-with-selector"/> </ftp> </target> + <target name="test-initial-command"> + <ftp action="put" + server="${ftp.host}" + userid="${ftp.user}" + password="${ftp.password}" + separator="${ftp.filesep}" + remotedir="${tmp.remote}" + initialSiteCommand="umask 222" + > + <fileset dir="${tmp.local}"> + <patternset refid="timed-test-files"/> + </fileset> + </ftp> + </target> + <target name="test-site-action"> + <ftp action="site" + server="${ftp.host}" + userid="${ftp.user}" + password="${ftp.password}" + separator="${ftp.filesep}" + remotedir="${tmp.remote}" + siteCommand="umask 222" + > + </ftp> + </target> </project> \ No newline at end of file 1.38 +13 -1 ant/docs/manual/OptionalTasks/ftp.html Index: ftp.html =================================================================== RCS file: /home/cvs/ant/docs/manual/OptionalTasks/ftp.html,v retrieving revision 1.37 retrieving revision 1.38 diff -u -r1.37 -r1.38 --- ftp.html 30 May 2005 00:40:21 -0000 1.37 +++ ftp.html 30 May 2005 14:41:34 -0000 1.38 @@ -77,7 +77,7 @@ <td valign="top">the ftp action to perform, defaulting to "send". Currently supports "put", "get", "del", "list", "chmod", - "mkdir" and "rmdir".</td> + "mkdir", "rmdir", and "site".</td> <td valign="top" align="center">No</td> </tr> <tr> @@ -200,6 +200,18 @@ operation will keep trying until it succeeds.</td> <td valign="top" align="center">No; defaults to 0</td> </tr> + <tr> + <td valign="top">siteCommand</td> + <td valign="top">Set the server-specific SITE command to execute if + the <code>action</code> attribute has been specified as <code>"site"</code>. + <td valign="top" align="center">No</td> + </tr> + <tr> + <td valign="top">initialSiteCommand</td> + <td valign="top">Set a server-specific SITE command to execute immediately + after login. + <td valign="top" align="center">No</td> + </tr> <tr> <td colspan="3">
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]