Browse Source

Do not normalize URIishes

We used to normalize URI's since it seems simple. This however causes
inconsistencies to the user and to out tests. Just pass backslashes
through and make sure our parser can handle them.

Bug: 341062
Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>
Change-Id: I2c8e917a086faabcd8749160c2acc9dd05a42838
tags/v0.12.1
Robin Rosenberg 13 years ago
parent
commit
d1718a34d3

+ 4
- 4
org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/URIishTest.java View File

@@ -90,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));
}

@@ -112,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));
}


+ 11
- 12
org.eclipse.jgit/src/org/eclipse/jgit/transport/URIish.java View File

@@ -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);

Loading…
Cancel
Save