You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@ant.apache.org by hi...@apache.org on 2017/05/26 10:30:54 UTC
[1/2] ant-ivy git commit: IVY-1522 Fix FileUtil.normalize to not base
its normalization logic on ":" character
Repository: ant-ivy
Updated Branches:
refs/heads/master 36e99429c -> a7a348910
IVY-1522 Fix FileUtil.normalize to not base its normalization logic on ":" character
Project: http://git-wip-us.apache.org/repos/asf/ant-ivy/repo
Commit: http://git-wip-us.apache.org/repos/asf/ant-ivy/commit/9ea5c69b
Tree: http://git-wip-us.apache.org/repos/asf/ant-ivy/tree/9ea5c69b
Diff: http://git-wip-us.apache.org/repos/asf/ant-ivy/diff/9ea5c69b
Branch: refs/heads/master
Commit: 9ea5c69bda2ed1ec0c69c081e91b72dcf6a6e81c
Parents: 36e9942
Author: Jaikiran Pai <ja...@gmail.com>
Authored: Thu May 18 20:12:41 2017 +0530
Committer: Jaikiran Pai <ja...@gmail.com>
Committed: Fri May 26 13:25:01 2017 +0530
----------------------------------------------------------------------
src/java/org/apache/ivy/util/FileUtil.java | 99 ++++++++++++---------
test/java/org/apache/ivy/ant/FileUtilTest.java | 92 +++++++++++++++++++
2 files changed, 150 insertions(+), 41 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ant-ivy/blob/9ea5c69b/src/java/org/apache/ivy/util/FileUtil.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/ivy/util/FileUtil.java b/src/java/org/apache/ivy/util/FileUtil.java
index e251f5c..52e03db 100644
--- a/src/java/org/apache/ivy/util/FileUtil.java
+++ b/src/java/org/apache/ivy/util/FileUtil.java
@@ -543,11 +543,11 @@ public final class FileUtil {
* 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)) {
@@ -563,7 +563,7 @@ public final class FileUtil {
s.push(thisToken);
}
}
- StringBuffer sb = new StringBuffer();
+ final StringBuffer sb = new StringBuffer();
for (int i = 0; i < s.size(); i++) {
if (i > 1) {
// not before the filesystem root and not after it, since root
@@ -580,49 +580,50 @@ public final class FileUtil {
*
* @param path
* the path to dissect.
- * @return String[] {root, remaining path}.
+ * @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));
}
/**
@@ -741,4 +742,20 @@ public final class FileUtil {
}
}
+
+ private static final class DissectedPath {
+ private final String root;
+ private final String remainingPath;
+
+ private DissectedPath(final String root, final String remainingPath) {
+ this.root = root;
+ this.remainingPath = remainingPath;
+ }
+
+ @Override
+ public String toString() {
+ return new StringBuilder("Dissected Path [root=").append(root).append(", remainingPath=")
+ .append(remainingPath).append("]").toString();
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/ant-ivy/blob/9ea5c69b/test/java/org/apache/ivy/ant/FileUtilTest.java
----------------------------------------------------------------------
diff --git a/test/java/org/apache/ivy/ant/FileUtilTest.java b/test/java/org/apache/ivy/ant/FileUtilTest.java
new file mode 100644
index 0000000..955462b
--- /dev/null
+++ b/test/java/org/apache/ivy/ant/FileUtilTest.java
@@ -0,0 +1,92 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package org.apache.ivy.ant;
+
+
+import org.apache.ivy.util.FileUtil;
+import org.junit.Test;
+
+import java.io.File;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+/**
+ * Tests {@link FileUtil}
+ *
+ * @author Jaikiran Pai
+ */
+public class FileUtilTest {
+
+ /**
+ * Tests that {@link FileUtil#normalize(String)} works as expected for some basic file paths
+ *
+ * @throws Exception
+ */
+ @Test
+ public void testSimpleNormalize() throws Exception {
+ final File ivySettingsFile = new File("test/repositories/ivysettings.xml");
+ final File normalizedIvySettingsFile = FileUtil.normalize(ivySettingsFile.getAbsolutePath());
+ assertEquals("Unexpected normalization of file path " + ivySettingsFile.getAbsolutePath(), ivySettingsFile.getAbsolutePath(), normalizedIvySettingsFile.getAbsolutePath());
+ assertTrue(normalizedIvySettingsFile.getAbsolutePath() + " isn't a file", normalizedIvySettingsFile.isFile());
+ }
+
+
+ /**
+ * Tests that {@link FileUtil#normalize(String)} works as expected when passed a path that starts with
+ * {@link File#listRoots() filesystem roots}
+ *
+ * @throws Exception
+ */
+ @Test
+ public void testNormalizeOfFileSystemRootPath() throws Exception {
+ for (final File fileSystemRoot : File.listRoots()) {
+ final File normalized = FileUtil.normalize(fileSystemRoot.getPath());
+ assertNotNull("Normalized path was null for " + fileSystemRoot, normalized);
+ assertEquals("Unexpected normalized path for " + fileSystemRoot, fileSystemRoot.getPath(), normalized.getPath());
+
+ // use . and .. characters in the path to test out the normalize method
+ final String pathOne = fileSystemRoot.getPath() + "." + File.separator;
+ assertEquals("Unexpected normalization of " + pathOne, fileSystemRoot.getPath(), FileUtil.normalize(pathOne).getPath());
+
+ final String pathTwo = fileSystemRoot.getPath() + "." + File.separator + "foo-bar";
+ assertEquals("Unexpected normalization of " + pathTwo, fileSystemRoot.getPath() + "foo-bar",
+ FileUtil.normalize(pathTwo).getPath());
+
+ final String pathThree = fileSystemRoot.getPath() + "foo-bar" + File.separator + ".." + File.separator;
+ assertEquals("Unexpected normalization of " + pathThree, fileSystemRoot.getPath(),
+ FileUtil.normalize(pathThree).getPath());
+
+ // append some additional file separator characters to the file system root and normalize it
+ final String pathFour = fileSystemRoot.getPath() + File.separator + File.separator + File.separator;
+ assertEquals("Unexpected normalization of " + pathFour, fileSystemRoot.getPath(), FileUtil.normalize(pathFour).getPath());
+
+ final String pathFive = fileSystemRoot.getPath() + File.separator + File.separator + "abcd";
+ assertEquals("Unexpected normalization of path " + pathFive, fileSystemRoot.getPath() + "abcd", FileUtil.normalize(pathFive).getPath());
+
+ final String pathSix = fileSystemRoot.getPath() + File.separator + File.separator + "1234" + File.separator;
+ assertEquals("Unexpected normalization of path " + pathSix, fileSystemRoot.getPath() + "1234", FileUtil.normalize(pathSix).getPath());
+
+ final String pathSeven = fileSystemRoot.getPath() + "helloworld" + File.separator + ".." + File.separator + File.separator + File.separator + "helloworld";
+ assertEquals("Unexpected normalization of path " + pathSeven, fileSystemRoot.getPath() + "helloworld", FileUtil.normalize(pathSeven).getPath());
+
+ }
+ }
+
+}
[2/2] ant-ivy git commit: release notes for IVY-1522
Posted by hi...@apache.org.
release notes for IVY-1522
This closes #20
Project: http://git-wip-us.apache.org/repos/asf/ant-ivy/repo
Commit: http://git-wip-us.apache.org/repos/asf/ant-ivy/commit/a7a34891
Tree: http://git-wip-us.apache.org/repos/asf/ant-ivy/tree/a7a34891
Diff: http://git-wip-us.apache.org/repos/asf/ant-ivy/diff/a7a34891
Branch: refs/heads/master
Commit: a7a348910068c89b8695e3c91c61cf8222076ed1
Parents: 9ea5c69
Author: Nicolas Lalevée <ni...@hibnet.org>
Authored: Fri May 26 12:30:36 2017 +0200
Committer: Nicolas Lalevée <ni...@hibnet.org>
Committed: Fri May 26 12:30:36 2017 +0200
----------------------------------------------------------------------
doc/release-notes.html | 1 +
1 file changed, 1 insertion(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ant-ivy/blob/a7a34891/doc/release-notes.html
----------------------------------------------------------------------
diff --git a/doc/release-notes.html b/doc/release-notes.html
index 6093670..0369f95 100644
--- a/doc/release-notes.html
+++ b/doc/release-notes.html
@@ -71,6 +71,7 @@ List of changes since Ivy 2.4.0:
- FIX: Have makepom task take description from ivy-module > info > description element (IVY-1520)
- FIX: Fix RetrieveEngine to take into account the correct extension while dealing with unpacked artifacts (IVY-1478) (Thanks to Jaikiran Pai)
- FIX: ParseException "Unsupported repository, resources names are not uris" for ivy.xml with parent on Windows (IVY-1448) (Thanks to Riccardo Foschia and Jaikiran Pai)
+- FIX: Ivy 2.4.0 improperly handles modules with colon (:) in version (IVY-1522) (Thanks to Jaikiran Pai)
- IMPROVEMENT: Throw an IllegalStateException when retrieving the resolutionCacheRoot on the DefaultResolutionCacheManager if the basedir (or IvySettings) is not set (IVY-1482)
- IMPROVEMENT: Optimization: limit the revision numbers scanned if revision prefix is specified (Thanks to Ernestas Vaiciukevičius)