You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@ant.apache.org by jh...@apache.org on 2017/05/29 11:17:58 UTC

[10/15] ant-ivy git commit: Merge branch 'master' into master

Merge branch 'master' into master

Project: http://git-wip-us.apache.org/repos/asf/ant-ivy/repo
Commit: http://git-wip-us.apache.org/repos/asf/ant-ivy/commit/3cfc7bfe
Tree: http://git-wip-us.apache.org/repos/asf/ant-ivy/tree/3cfc7bfe
Diff: http://git-wip-us.apache.org/repos/asf/ant-ivy/diff/3cfc7bfe

Branch: refs/heads/master
Commit: 3cfc7bfe70c038055939533b56c408419b01de81
Parents: baf03a9 90274e1
Author: twogee <g....@gmail.com>
Authored: Sun May 28 14:14:25 2017 +0200
Committer: GitHub <no...@github.com>
Committed: Sun May 28 14:14:25 2017 +0200

----------------------------------------------------------------------
 doc/release-notes.html                         |   2 +
 src/java/org/apache/ivy/util/FileUtil.java     | 108 ++++++++++++--------
 test/java/org/apache/ivy/ant/FileUtilTest.java |  92 +++++++++++++++++
 3 files changed, 157 insertions(+), 45 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ant-ivy/blob/3cfc7bfe/src/java/org/apache/ivy/util/FileUtil.java
----------------------------------------------------------------------
diff --cc src/java/org/apache/ivy/util/FileUtil.java
index c938007,52e03db..17fbaf4
--- a/src/java/org/apache/ivy/util/FileUtil.java
+++ b/src/java/org/apache/ivy/util/FileUtil.java
@@@ -535,16 -535,19 +535,16 @@@ public final class FileUtil 
       * Unlike {@link File#getCanonicalPath()} this method specifically does not resolve symbolic
       * links.
       * 
 -     * @param path
 -     *            the path to be normalized.
 +     * @param path the path to be normalized.
       * @return the normalized version of the path.
 -     * 
 -     * @throws java.lang.NullPointerException
 -     *             if path is null.
 +     * @throws NullPointerException if path is null.
       */
      public static File normalize(final String path) {
-         Stack<String> s = new Stack<String>();
-         String[] dissect = dissect(path);
-         s.push(dissect[0]);
+         final Stack<String> s = new Stack<String>();
+         final DissectedPath dissectedPath = dissect(path);
+         s.push(dissectedPath.root);
  
-         StringTokenizer tok = new StringTokenizer(dissect[1], File.separator);
+         final StringTokenizer tok = new StringTokenizer(dissectedPath.remainingPath, File.separator);
          while (tok.hasMoreTokens()) {
              String thisToken = tok.nextToken();
              if (".".equals(thisToken)) {
@@@ -574,51 -577,53 +574,53 @@@
  
      /**
       * Dissect the specified absolute path.
--     * 
-      * @param path the path to dissect.
-      * @return String[] {root, remaining path}.
-      * @throws NullPointerException if path is null.
++     *
+      * @param path
+      *            the path to dissect.
+      * @return {@link DissectedPath}
+      * @throws java.lang.NullPointerException
+      *             if path is null.
       * @since Ant 1.7
       */
-     private static String[] dissect(String path) {
-         char sep = File.separatorChar;
-         path = path.replace('/', sep).replace('\\', sep);
- 
-         /* // make sure we are dealing with an absolute path
-          * if (!isAbsolutePath(path)) {
-          * throw new BuildException(path + " is not an absolute path");
- 		 * }
- 		 */
-         String root = null;
-         int colon = path.indexOf(':');
-         if (colon > 0) { // && (ON_DOS || ON_NETWARE)) {
- 
-             int next = colon + 1;
-             root = path.substring(0, next);
-             char[] ca = path.toCharArray();
-             root += sep;
-             // remove the initial separator; the root has it.
-             next = (ca[next] == sep) ? next + 1 : next;
- 
-             StringBuffer sbPath = new StringBuffer();
-             // Eliminate consecutive slashes after the drive spec:
-             for (int i = next; i < ca.length; i++) {
-                 if (ca[i] != sep || ca[i - 1] != sep) {
-                     sbPath.append(ca[i]);
+     private static DissectedPath dissect(final String path) {
+         final char sep = File.separatorChar;
+         final String pathToDissect = path.replace('/', sep).replace('\\', sep).trim();
+ 
+         // check if the path starts with a filesystem root
+         final File[] filesystemRoots = File.listRoots();
+         if (filesystemRoots != null) {
+             for (final File filesystemRoot : filesystemRoots) {
+                 if (pathToDissect.startsWith(filesystemRoot.getPath())) {
+                     // filesystem root is the root and the rest of the path is the "remaining path"
+                     final String root = filesystemRoot.getPath();
+                     final String rest = pathToDissect.substring(root.length());
+                     final StringBuffer sbPath = new StringBuffer();
+                     // Eliminate consecutive slashes after the drive spec:
+                     for (int i = 0; i < rest.length(); i++) {
+                         final char currentChar = rest.charAt(i);
+                         if (i == 0) {
+                             sbPath.append(currentChar);
+                             continue;
+                         }
+                         final char previousChar = rest.charAt(i -1);
+                         if (currentChar != sep || previousChar != sep) {
+                             sbPath.append(currentChar);
+                         }
+                     }
+                     return new DissectedPath(root, sbPath.toString());
                  }
              }
-             path = sbPath.toString();
-         } else if (path.length() > 1 && path.charAt(1) == sep) {
-             // UNC drive
-             int nextsep = path.indexOf(sep, 2);
-             nextsep = path.indexOf(sep, nextsep + 1);
-             root = (nextsep > 2) ? path.substring(0, nextsep + 1) : path;
-             path = path.substring(root.length());
-         } else {
-             root = File.separator;
-             path = path.substring(1);
          }
-         return new String[] {root, path};
+         // UNC drive
+         if (pathToDissect.length() > 1 && pathToDissect.charAt(1) == sep) {
+             int nextsep = pathToDissect.indexOf(sep, 2);
+             nextsep = pathToDissect.indexOf(sep, nextsep + 1);
+             final String root = (nextsep > 2) ? pathToDissect.substring(0, nextsep + 1) : pathToDissect;
+             final String rest = pathToDissect.substring(root.length());
+             return new DissectedPath(root, rest);
+         }
+ 
+         return new DissectedPath(File.separator, pathToDissect.substring(1));
      }
  
      /**