diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/URIishTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/URIishTest.java index e6990fb83..c86869d08 100644 --- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/URIishTest.java +++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/URIishTest.java @@ -55,6 +55,7 @@ import java.io.File; import java.io.IOException; import java.net.URISyntaxException; +import org.junit.Ignore; import org.junit.Test; public class URIishTest { @@ -89,8 +90,8 @@ public class URIishTest { URIish u = new URIish(str); assertNull(u.getScheme()); assertFalse(u.isRemote()); - assertEquals("D:/m y", u.getPath()); - assertEquals("D:/m y", u.toString()); + assertEquals("D:\\m y", u.getPath()); + assertEquals("D:\\m y", u.toString()); assertEquals(u, new URIish(str)); } @@ -111,8 +112,8 @@ public class URIishTest { URIish u = new URIish(str); assertNull(u.getScheme()); assertFalse(u.isRemote()); - assertEquals("//some/place", u.getPath()); - assertEquals("//some/place", u.toString()); + assertEquals("\\\\some\\place", u.getPath()); + assertEquals("\\\\some\\place", u.toString()); assertEquals(u, new URIish(str)); } @@ -315,8 +316,8 @@ public class URIishTest { assertEquals(u, new URIish(str)); } - /* Resolving ~user is beyond standard Java API and need more support @Test + @Ignore("Resolving ~user is beyond standard Java API and need more support") public void testFileWithUserHome() throws Exception { final String str = "~some/p ath"; URIish u = new URIish(str); @@ -331,7 +332,6 @@ public class URIishTest { assertEquals(u.setPass(null).toPrivateString(), u.toString()); assertEquals(u, new URIish(str)); } - */ @Test public void testFileWithNoneUserHomeWithTilde() throws Exception { diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/URIish.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/URIish.java index bc24516a6..8c7bedc6f 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/URIish.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/URIish.java @@ -75,13 +75,13 @@ public class URIish implements Serializable { * capturing groups: the first containing the user and the second containing * the password */ - private static final String OPT_USER_PWD_P = "(?:([^/:@]+)(?::([^/]+))?@)?"; + private static final String OPT_USER_PWD_P = "(?:([^\\\\/:@]+)(?::([^\\\\/]+))?@)?"; /** * Part of a pattern which matches the host part of URIs. Defines one * capturing group containing the host name. */ - private static final String HOST_P = "([^/:]+)"; + private static final String HOST_P = "([^\\\\/:]+)"; /** * Part of a pattern which matches the optional port part of URIs. Defines @@ -93,7 +93,7 @@ public class URIish implements Serializable { * Part of a pattern which matches the ~username part (e.g. /~root in * git://host.xyz/~root/a.git) of URIs. Defines no capturing group. */ - private static final String USER_HOME_P = "(?:/~(?:[^/]+))"; + private static final String USER_HOME_P = "(?:/~(?:[^\\\\/]+))"; /** * Part of a pattern which matches the optional drive letter in paths (e.g. @@ -105,13 +105,13 @@ public class URIish implements Serializable { * Part of a pattern which matches a relative path. Relative paths don't * start with slash or drive letters. Defines no capturing group. */ - private static final String RELATIVE_PATH_P = "(?:(?:[^/]+/)*[^/]+/?)"; + private static final String RELATIVE_PATH_P = "(?:(?:[^\\\\/]+[\\\\/])*[^\\\\/]+[\\\\/]?)"; /** * Part of a pattern which matches a relative or absolute path. Defines no * capturing group. */ - private static final String PATH_P = "(" + OPT_DRIVE_LETTER_P + "/?" + private static final String PATH_P = "(" + OPT_DRIVE_LETTER_P + "[\\\\/]?" + RELATIVE_PATH_P + ")"; private static final long serialVersionUID = 1L; @@ -129,7 +129,7 @@ public class URIish implements Serializable { + OPT_PORT_P // + "(" // open a catpuring group the the user-home-dir part + (USER_HOME_P + "?") // - + "/)" // + + "[\\\\/])" // + ")?" // close the optional group containing hostname + "(.+)?" // + "$"); @@ -139,7 +139,7 @@ public class URIish implements Serializable { * path (maybe even containing windows drive-letters) or a relative path. */ private static final Pattern LOCAL_FILE = Pattern.compile("^" // - + "(/?" + PATH_P + ")" // + + "([\\\\/]?" + PATH_P + ")" // + "$"); /** @@ -148,7 +148,7 @@ public class URIish implements Serializable { * separator, but java.io.File.toURI() constructs those URIs. */ private static final Pattern SINGLE_SLASH_FILE_URI = Pattern.compile("^" // - + "(file):(/(?!/)" // + + "(file):([\\\\/](?![\\\\/])" // + PATH_P // + ")$"); @@ -159,7 +159,7 @@ public class URIish implements Serializable { + OPT_USER_PWD_P // + HOST_P // + ":(" // - + ("(?:" + USER_HOME_P + "/)?") // + + ("(?:" + USER_HOME_P + "[\\\\/])?") // + RELATIVE_PATH_P // + ")$"); @@ -168,9 +168,9 @@ public class URIish implements Serializable { */ private static final Pattern ABSOLUTE_SCP_URI = Pattern.compile("^" // + OPT_USER_PWD_P // - + "([^/:]{2,})" // + + "([^\\\\/:]{2,})" // + ":(" // - + "/" + RELATIVE_PATH_P // + + "[\\\\/]" + RELATIVE_PATH_P // + ")$"); private String scheme; @@ -192,7 +192,6 @@ public class URIish implements Serializable { * @throws URISyntaxException */ public URIish(String s) throws URISyntaxException { - s = s.replace('\\', '/'); Matcher matcher = SINGLE_SLASH_FILE_URI.matcher(s); if (matcher.matches()) { scheme = matcher.group(1);