From 845714158adc144e0d7db53cef96503a93fb6cff Mon Sep 17 00:00:00 2001 From: Robin Rosenberg Date: Thu, 15 Jul 2010 01:16:09 +0200 Subject: [PATCH] Handle the tilde notation (~user) of git url When the path is prefixed with ~ the URI parser thought about this as /~. Strip the / if the next character is the tilde. Bug: 307017 Change-Id: I58203e5617956b46d83e8987d1f8042beddffac3 Signed-off-by: Robin Rosenberg --- .../eclipse/jgit/transport/URIishTest.java | 47 +++++++++++++++++++ .../org/eclipse/jgit/transport/URIish.java | 3 ++ 2 files changed, 50 insertions(+) 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 class URIishTest extends TestCase { 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 class URIish implements Serializable { && (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()) {