Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPatrick Steinhardt2015-07-02 12:15:22 +0000
committerMatthias Sohn2015-09-10 11:21:41 +0000
commit9b1deadcb432cfd0f463c79549b5991fec8c67d6 (patch)
tree4b26f8f8fd674273f7149c0f15ee17a2858c58d1
parent45e9e28ad9daad3c64a16685bd9c07ed18d2ab50 (diff)
downloadjgit-9b1deadcb432cfd0f463c79549b5991fec8c67d6.tar.gz
jgit-9b1deadcb432cfd0f463c79549b5991fec8c67d6.tar.xz
jgit-9b1deadcb432cfd0f463c79549b5991fec8c67d6.zip
URIish: fall back to host as humanish name
When we have a URI that contains an empty path component (that is it only contains a "/") we want to fall back to the host as humanish name. This change is according to the behavior of upstream git, which falls back on the hostname when guessing directory names for newly cloned repositories (see [1] for the discussion). [1] http://article.gmane.org/gmane.comp.version-control.git/274669 Change-Id: I44400c6ab72a2722d2155d53d63671bd867d6c44 Signed-off-by: Patrick Steinhardt <ps@pks.im>
-rw-r--r--org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/URIishTest.java58
-rw-r--r--org.eclipse.jgit/src/org/eclipse/jgit/transport/URIish.java20
2 files changed, 72 insertions, 6 deletions
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 8c7c992b70..745c322013 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
@@ -3,6 +3,7 @@
* Copyright (C) 2008, Robin Rosenberg <robin.rosenberg@dewire.com>
* Copyright (C) 2008, Shawn O. Pearce <spearce@spearce.org>
* Copyright (C) 2013, Robin Stocker <robin@nibor.org>
+ * Copyright (C) 2015, Patrick Steinhardt <ps@pks.im>
* and other copyright owners as documented in the project's IP log.
*
* This program and the accompanying materials are made available
@@ -379,6 +380,56 @@ public class URIishTest {
}
@Test
+ public void testSshProtoHostOnly() throws Exception {
+ final String str = "ssh://example.com/";
+ URIish u = new URIish(str);
+ assertEquals("ssh", u.getScheme());
+ assertTrue(u.isRemote());
+ assertEquals("/", u.getRawPath());
+ assertEquals("/", u.getPath());
+ assertEquals("example.com", u.getHost());
+ assertEquals(-1, u.getPort());
+ assertEquals("ssh://example.com/", u.toString());
+ assertEquals("ssh://example.com/", u.toASCIIString());
+ assertEquals("example.com", u.getHumanishName());
+ assertEquals(u, new URIish(str));
+ }
+
+ @Test
+ public void testSshProtoHostWithAuthentication() throws Exception {
+ final String str = "ssh://user:secret@pass@example.com/";
+ URIish u = new URIish(str);
+ assertEquals("ssh", u.getScheme());
+ assertTrue(u.isRemote());
+ assertEquals("/", u.getRawPath());
+ assertEquals("/", u.getPath());
+ assertEquals("example.com", u.getHost());
+ assertEquals(-1, u.getPort());
+ assertEquals("ssh://user@example.com/", u.toString());
+ assertEquals("ssh://user@example.com/", u.toASCIIString());
+ assertEquals("example.com", u.getHumanishName());
+ assertEquals("user", u.getUser());
+ assertEquals("secret@pass", u.getPass());
+ assertEquals(u, new URIish(str));
+ }
+
+ @Test
+ public void testSshProtoHostWithPort() throws Exception {
+ final String str = "ssh://example.com:2222/";
+ URIish u = new URIish(str);
+ assertEquals("ssh", u.getScheme());
+ assertTrue(u.isRemote());
+ assertEquals("/", u.getRawPath());
+ assertEquals("/", u.getPath());
+ assertEquals("example.com", u.getHost());
+ assertEquals(2222, u.getPort());
+ assertEquals("ssh://example.com:2222/", u.toString());
+ assertEquals("ssh://example.com:2222/", u.toASCIIString());
+ assertEquals("example.com", u.getHumanishName());
+ assertEquals(u, new URIish(str));
+ }
+
+ @Test
public void testSshProtoWithUserAndPort() throws Exception {
final String str = "ssh://user@example.com:33/some/p ath";
URIish u = new URIish(str);
@@ -623,6 +674,13 @@ public class URIishTest {
}
@Test
+ public void testGetEmptyHumanishNameWithAuthorityOnly() throws IllegalArgumentException,
+ URISyntaxException {
+ String humanishName = new URIish(GIT_SCHEME + "abc").getHumanishName();
+ assertEquals("abc", humanishName);
+ }
+
+ @Test
public void testGetValidSlashHumanishName()
throws IllegalArgumentException, URISyntaxException {
String humanishName = new URIish(GIT_SCHEME + "host/abc/")
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 91e212b478..3700b49555 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/URIish.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/URIish.java
@@ -4,6 +4,7 @@
* Copyright (C) 2008, Shawn O. Pearce <spearce@spearce.org>
* Copyright (C) 2010, Christian Halstrick <christian.halstrick@sap.com>
* Copyright (C) 2013, Robin Stocker <robin@nibor.org>
+ * Copyright (C) 2015, Patrick Steinhardt <ps@pks.im>
* and other copyright owners as documented in the project's IP log.
*
* This program and the accompanying materials are made available
@@ -134,11 +135,11 @@ public class URIish implements Serializable {
+ OPT_USER_PWD_P //
+ HOST_P //
+ OPT_PORT_P //
- + "(" // open a catpuring group the the user-home-dir part //$NON-NLS-1$
- + (USER_HOME_P + "?") // //$NON-NLS-1$
- + "[\\\\/])" // //$NON-NLS-1$
+ + "(" // open a group capturing the user-home-dir-part //$NON-NLS-1$
+ + (USER_HOME_P + "?") //$NON-NLS-1$
+ + "[\\\\/])" //$NON-NLS-1$
+ ")?" // close the optional group containing hostname //$NON-NLS-1$
- + "(.+)?" // //$NON-NLS-1$
+ + "(.+)?" //$NON-NLS-1$
+ "$"); //$NON-NLS-1$
/**
@@ -690,6 +691,10 @@ public class URIish implements Serializable {
* <td><code>/path/to/repo/</code></td>
* </tr>
* <tr>
+ * <td><code>localhost</code></td>
+ * <td><code>ssh://localhost/</code></td>
+ * </tr>
+ * <tr>
* <td><code>/path//to</code></td>
* <td>an empty string</td>
* </tr>
@@ -703,9 +708,12 @@ public class URIish implements Serializable {
* @see #getPath
*/
public String getHumanishName() throws IllegalArgumentException {
- if ("".equals(getPath()) || getPath() == null) //$NON-NLS-1$
- throw new IllegalArgumentException();
String s = getPath();
+ if ("/".equals(s)) //$NON-NLS-1$
+ s = getHost();
+ if ("".equals(s) || s == null) //$NON-NLS-1$
+ throw new IllegalArgumentException();
+
String[] elements;
if ("file".equals(scheme) || LOCAL_FILE.matcher(s).matches()) //$NON-NLS-1$
elements = s.split("[\\" + File.separatorChar + "/]"); //$NON-NLS-1$ //$NON-NLS-2$

Back to the top