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 d2d37a7ed..ff8c9a6c1 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 @@ -250,6 +250,53 @@ public void testSshProtoWithUserPassAndPort() throws Exception { assertEquals(u, new URIish(str)); } + public void testGitWithUserHome() throws Exception { + final String str = "git://example.com/~some/p ath"; + URIish u = new URIish(str); + assertEquals("git", u.getScheme()); + assertTrue(u.isRemote()); + assertEquals("~some/p ath", u.getPath()); + assertEquals("example.com", u.getHost()); + assertNull(u.getUser()); + assertNull(u.getPass()); + assertEquals(-1, u.getPort()); + assertEquals(str, u.toPrivateString()); + assertEquals(u.setPass(null).toPrivateString(), u.toString()); + assertEquals(u, new URIish(str)); + } + + /* 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); + assertEquals("git", u.getScheme()); + assertTrue(u.isRemote()); + assertEquals("~some/p ath", u.getPath()); + assertEquals("example.com", u.getHost()); + assertNull(u.getUser()); + assertNull(u.getPass()); + assertEquals(-1, u.getPort()); + assertEquals(str, u.toPrivateString()); + assertEquals(u.setPass(null).toPrivateString(), u.toString()); + assertEquals(u, new URIish(str)); + } + */ + + public void testFileWithNoneUserHomeWithTilde() throws Exception { + final String str = "/~some/p ath"; + URIish u = new URIish(str); + assertNull(u.getScheme()); + assertFalse(u.isRemote()); + assertEquals("/~some/p ath", u.getPath()); + assertNull(u.getHost()); + assertNull(u.getUser()); + assertNull(u.getPass()); + assertEquals(-1, u.getPort()); + assertEquals(str, u.toPrivateString()); + assertEquals(u.setPass(null).toPrivateString(), u.toString()); + assertEquals(u, new URIish(str)); + } + public void testGetNullHumanishName() { try { new URIish().getHumanishName(); 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 15bd0b1de..3f533281b 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/URIish.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/URIish.java @@ -104,6 +104,9 @@ public URIish(String s) throws URISyntaxException { && (path.charAt(1) >= 'A' && path.charAt(1) <= 'Z' || path.charAt(1) >= 'a' && path.charAt(1) <= 'z')) path = path.substring(1); + else if (scheme != null && path.length() >= 2 + && path.charAt(0) == '/' && path.charAt(1) == '~') + path = path.substring(1); } else { matcher = SCP_URI.matcher(s); if (matcher.matches()) {