Author: mbenson
Date: Thu Nov 16 08:43:47 2006
New Revision: 475806
URL: http://svn.apache.org/viewvc?view=rev&rev=475806
Log:
fail on invalid attribute combinations. BZ 40986.
Modified:
ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/ssh/Scp.java
Modified:
ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/ssh/Scp.java
URL:
http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/ssh/Scp.java?view=diff&rev=475806&r1=475805&r2=475806
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/ssh/Scp.java
(original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/ssh/Scp.java
Thu Nov 16 08:43:47 2006
@@ -41,6 +41,12 @@
*/
public class Scp extends SSHBase {
+ private static final String[] FROM_ATTRS =
+ { "file", "localfile", "remotefile" };
+
+ private static final String[] TO_ATTRS =
+ { "todir", "localtodir", "remotetodir", "localtofile", "remotetofile"
};
+
private String fromUri;
private String toUri;
private List fileSets = null;
@@ -57,7 +63,7 @@
* @param aFromUri a string representing the file to transfer.
*/
public void setFile(String aFromUri) {
- this.fromUri = aFromUri;
+ setFromUri(aFromUri);
this.isFromRemote = isRemoteUri(this.fromUri);
}
@@ -71,7 +77,7 @@
* @param aToUri a string representing the target of the copy.
*/
public void setTodir(String aToUri) {
- this.toUri = aToUri;
+ setToUri(aToUri);
this.isToRemote = isRemoteUri(this.toUri);
}
@@ -83,7 +89,7 @@
* @since Ant 1.6.2
*/
public void setLocalFile(String aFromUri) {
- this.fromUri = aFromUri;
+ setFromUri(aFromUri);
this.isFromRemote = false;
}
@@ -94,7 +100,7 @@
* @since Ant 1.6.2
*/
public void setRemoteFile(String aFromUri) {
- this.fromUri = aFromUri;
+ setFromUri(aFromUri);
this.isFromRemote = true;
}
@@ -106,7 +112,7 @@
* @since Ant 1.6.2
*/
public void setLocalTodir(String aToUri) {
- this.toUri = aToUri;
+ setToUri(aToUri);
this.isToRemote = false;
}
@@ -117,7 +123,7 @@
* @since Ant 1.6.2
*/
public void setRemoteTodir(String aToUri) {
- this.toUri = aToUri;
+ setToUri(aToUri);
this.isToRemote = true;
}
@@ -128,7 +134,7 @@
* @since Ant 1.6.2
*/
public void setLocalTofile(String aToUri) {
- this.toUri = aToUri;
+ setToUri(aToUri);
this.isToRemote = false;
}
@@ -139,7 +145,7 @@
* @since Ant 1.6.2
*/
public void setRemoteTofile(String aToUri) {
- this.toUri = aToUri;
+ setToUri(aToUri);
this.isToRemote = true;
}
@@ -182,15 +188,11 @@
*/
public void execute() throws BuildException {
if (toUri == null) {
- throw new BuildException("Either 'todir' or 'tofile' attribute "
- + "is required.");
+ throw exactlyOne(TO_ATTRS);
}
-
if (fromUri == null && fileSets == null) {
- throw new BuildException("Either the 'file' attribute or one "
- + "FileSet is required.");
+ throw exactlyOne(FROM_ATTRS, "one or more nested filesets");
}
-
try {
if (isFromRemote && !isToRemote) {
download(fromUri, toUri);
@@ -373,5 +375,36 @@
root = null;
}
return root;
+ }
+
+ private void setFromUri(String fromUri) {
+ if (fromUri != null) {
+ throw exactlyOne(FROM_ATTRS);
+ }
+ this.fromUri = fromUri;
+ }
+
+ private void setToUri(String toUri) {
+ if (toUri != null) {
+ throw exactlyOne(TO_ATTRS);
+ }
+ this.toUri = toUri;
+ }
+
+ private BuildException exactlyOne(String[] attrs) {
+ return exactlyOne(attrs, null);
+ }
+
+ private BuildException exactlyOne(String[] attrs, String alt) {
+ StringBuffer buf = new StringBuffer("Exactly one of ").append(
+ '[').append(attrs[0]);
+ for (int i = 1; i < attrs.length; i++) {
+ buf.append('|').append(attrs[i]);
+ }
+ buf.append(']');
+ if (alt != null) {
+ buf.append(" or ").append(alt);
+ }
+ return new BuildException(buf.append(" is required.").toString());
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]