Author: sebb
Date: Sat Jan 17 15:06:53 2015
New Revision: 1652621
URL: http://svn.apache.org/r1652621
Log:
NET-566 UnixFTPEntryParser Drops Leading Spaces from File Names
Add option to parser to not skip leading spaces
TODO make this the default but still allow reversion
Modified:
commons/proper/net/trunk/src/main/java/org/apache/commons/net/ftp/parser/UnixFTPEntryParser.java
commons/proper/net/trunk/src/test/java/org/apache/commons/net/ftp/parser/UnixFTPEntryParserTest.java
Modified:
commons/proper/net/trunk/src/main/java/org/apache/commons/net/ftp/parser/UnixFTPEntryParser.java
URL:
http://svn.apache.org/viewvc/commons/proper/net/trunk/src/main/java/org/apache/commons/net/ftp/parser/UnixFTPEntryParser.java?rev=1652621&r1=1652620&r2=1652621&view=diff
==============================================================================
---
commons/proper/net/trunk/src/main/java/org/apache/commons/net/ftp/parser/UnixFTPEntryParser.java
(original)
+++
commons/proper/net/trunk/src/main/java/org/apache/commons/net/ftp/parser/UnixFTPEntryParser.java
Sat Jan 17 15:06:53 2015
@@ -122,11 +122,15 @@ public class UnixFTPEntryParser extends
*/
+ "(\\d+(?::\\d+)?)" // (20)
- + "\\s+" // separator
+ + "\\s" // separator
+ "(.*)"; // the rest (21)
+ // if true, leading spaces are trimmed from file names
+ // this was the case for the original implementation
+ private final boolean trimLeadingSpaces;
+
/**
* The default constructor for a UnixFTPEntryParser object.
*
@@ -154,8 +158,27 @@ public class UnixFTPEntryParser extends
*/
public UnixFTPEntryParser(FTPClientConfig config)
{
+ this(config, true); // retain original behaviour (for now)
+ }
+
+ /**
+ * This constructor allows the creation of a UnixFTPEntryParser object with
+ * something other than the default configuration.
+ *
+ * @param config The {@link FTPClientConfig configuration} object used to
+ * configure this parser.
+ * @param trimLeadingSpaces if {@code true}, trim leading spaces from file
names
+ * @exception IllegalArgumentException
+ * Thrown if the regular expression is unparseable. Should not be seen
+ * under normal conditions. It it is seen, this is a sign that
+ * <code>REGEX</code> is not a valid regular expression.
+ * @since 1.4
+ */
+ public UnixFTPEntryParser(FTPClientConfig config, boolean
trimLeadingSpaces)
+ {
super(REGEX);
configure(config);
+ this.trimLeadingSpaces = trimLeadingSpaces;
}
/**
@@ -199,6 +222,9 @@ public class UnixFTPEntryParser extends
String filesize = group(18);
String datestr = group(19) + " " + group(20);
String name = group(21);
+ if (trimLeadingSpaces) {
+ name = name.replaceFirst("^\\s+", "");
+ }
try
{
Modified:
commons/proper/net/trunk/src/test/java/org/apache/commons/net/ftp/parser/UnixFTPEntryParserTest.java
URL:
http://svn.apache.org/viewvc/commons/proper/net/trunk/src/test/java/org/apache/commons/net/ftp/parser/UnixFTPEntryParserTest.java?rev=1652621&r1=1652620&r2=1652621&view=diff
==============================================================================
---
commons/proper/net/trunk/src/test/java/org/apache/commons/net/ftp/parser/UnixFTPEntryParserTest.java
(original)
+++
commons/proper/net/trunk/src/test/java/org/apache/commons/net/ftp/parser/UnixFTPEntryParserTest.java
Sat Jan 17 15:06:53 2015
@@ -166,6 +166,18 @@ public class UnixFTPEntryParserTest exte
assertEquals(f.getName(), "zxbox ");
}
+ public void testLeadingSpacesOriginal() { // this is the original
(non-ideal) behaviour
+ FTPFile f = getParser().parseFTPEntry("drwxr-xr-x 2 john smith
group 4096 Mar 2 15:13 zxbox");
+ assertNotNull(f);
+ assertEquals("zxbox", f.getName() ); // leading spaces dropped
+ }
+
+ public void testLeadingSpacesNET566() { // check new behaviour
+ FTPFile f = new UnixFTPEntryParser(null,
false).parseFTPEntry("drwxr-xr-x 2 john smith group 4096 Mar 2
15:13 zxbox");
+ assertNotNull(f);
+ assertEquals(" zxbox", f.getName() ); // leading spaces retained
+ }
+
public void testNameWIthPunctuation() {
FTPFile f = getParser().parseFTPEntry("drwx------ 4 maxm Domain Users
512 Oct 2 10:59 abc(test)123.pdf");
assertNotNull(f);