diff options
-rw-r--r-- | org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/OpenSshConfigTest.java | 25 | ||||
-rw-r--r-- | org.eclipse.jgit/src/org/eclipse/jgit/transport/OpenSshConfig.java | 45 |
2 files changed, 49 insertions, 21 deletions
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/OpenSshConfigTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/OpenSshConfigTest.java index 3eb049758e..d604751fef 100644 --- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/OpenSshConfigTest.java +++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/OpenSshConfigTest.java @@ -323,11 +323,12 @@ public class OpenSshConfigTest extends RepositoryTestCase { @Test public void testListValueMultiple() throws Exception { - // Tilde expansion doesn't occur within the parser + // Tilde expansion occurs within the parser config("Host orcz\nUserKnownHostsFile \"~/foo/ba z\" /foo/bar \n"); final ConfigRepository.Config c = osc.getConfig("orcz"); assertNotNull(c); - assertArrayEquals(new Object[] { "~/foo/ba z", "/foo/bar" }, + assertArrayEquals(new Object[] { new File(home, "foo/ba z").getPath(), + "/foo/bar" }, c.getValues("UserKnownHostsFile")); } @@ -371,8 +372,9 @@ public class OpenSshConfigTest extends RepositoryTestCase { // Host does tilde replacement assertEquals(new File(home, "foo/ba z"), f); final ConfigRepository.Config c = h.getConfig(); - // Config doesn't - assertArrayEquals(new Object[] { "~/foo/ba z", "/foo/bar" }, + // Config does tilde replacement, too + assertArrayEquals(new Object[] { new File(home, "foo/ba z").getPath(), + "/foo/bar" }, c.getValues("IdentityFile")); } @@ -386,8 +388,9 @@ public class OpenSshConfigTest extends RepositoryTestCase { // Host does tilde replacement assertEquals(new File(home, "foo/ba z"), f); final ConfigRepository.Config c = h.getConfig(); - // Config doesn't - assertArrayEquals(new Object[] { "~/foo/ba z", "/foo/bar", "/foo/baz" }, + // Config does tilde replacement, too + assertArrayEquals(new Object[] { new File(home, "foo/ba z").getPath(), + "/foo/bar", "/foo/baz" }, c.getValues("IdentityFile")); } @@ -397,7 +400,7 @@ public class OpenSshConfigTest extends RepositoryTestCase { final Host h = osc.lookup("repo.or.cz"); assertNotNull(h); assertEquals(new File(home, "foo/bar"), h.getIdentityFile()); - assertArrayEquals(new Object[] { "~/foo/bar" }, + assertArrayEquals(new Object[] { new File(home, "foo/bar").getPath() }, h.getConfig().getValues("IdentityFile")); } @@ -407,7 +410,8 @@ public class OpenSshConfigTest extends RepositoryTestCase { final Host h = osc.lookup("repo.or.cz"); assertNotNull(h); assertEquals(new File(home, "foo/bar"), h.getIdentityFile()); - assertArrayEquals(new Object[] { "~/foo/bar", "/foo/baz" }, + assertArrayEquals(new Object[] { new File(home, "foo/bar").getPath(), + "/foo/baz" }, h.getConfig().getValues("IdentityFile")); } @@ -417,12 +421,13 @@ public class OpenSshConfigTest extends RepositoryTestCase { final Host h1 = osc.lookup("repo.or.cz"); assertNotNull(h1); assertEquals(new File(home, "foo/bar"), h1.getIdentityFile()); - assertArrayEquals(new Object[] { "~/foo/bar", "/foo/baz" }, + assertArrayEquals(new Object[] { new File(home, "foo/bar").getPath(), + "/foo/baz" }, h1.getConfig().getValues("IdentityFile")); final Host h2 = osc.lookup("orcz"); assertNotNull(h2); assertEquals(new File(home, "foo/bar"), h2.getIdentityFile()); - assertArrayEquals(new Object[] { "~/foo/bar" }, + assertArrayEquals(new Object[] { new File(home, "foo/bar").getPath() }, h2.getConfig().getValues("IdentityFile")); } diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/OpenSshConfig.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/OpenSshConfig.java index b5b532dffd..67a7db99f4 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/OpenSshConfig.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/OpenSshConfig.java @@ -352,6 +352,17 @@ public class OpenSshConfig implements ConfigRepository { return Boolean.FALSE; } + private static File toFile(String path, File home) { + if (path.startsWith("~/")) { //$NON-NLS-1$ + return new File(home, path.substring(2)); + } + File ret = new File(path); + if (ret.isAbsolute()) { + return ret; + } + return new File(home, path); + } + private static int positive(final String value) { if (value != null) { try { @@ -730,25 +741,48 @@ public class OpenSshConfig implements ConfigRepository { return result; } + private List<String> replaceTilde(List<String> values, File home) { + List<String> result = new ArrayList<>(values.size()); + for (String value : values) { + result.add(toFile(value, home).getPath()); + } + return result; + } + protected void substitute(String originalHostName, File home) { Replacer r = new Replacer(originalHostName, home); if (multiOptions != null) { List<String> values = multiOptions.get("IDENTITYFILE"); //$NON-NLS-1$ if (values != null) { values = substitute(values, "dhlru", r); //$NON-NLS-1$ + values = replaceTilde(values, home); multiOptions.put("IDENTITYFILE", values); //$NON-NLS-1$ } values = multiOptions.get("CERTIFICATEFILE"); //$NON-NLS-1$ if (values != null) { values = substitute(values, "dhlru", r); //$NON-NLS-1$ + values = replaceTilde(values, home); multiOptions.put("CERTIFICATEFILE", values); //$NON-NLS-1$ } } + if (listOptions != null) { + List<String> values = listOptions.get("GLOBALKNOWNHOSTSFILE"); //$NON-NLS-1$ + if (values != null) { + values = replaceTilde(values, home); + listOptions.put("GLOBALKNOWNHOSTSFILE", values); //$NON-NLS-1$ + } + values = listOptions.get("USERKNOWNHOSTSFILE"); //$NON-NLS-1$ + if (values != null) { + values = replaceTilde(values, home); + listOptions.put("USERKNOWNHOSTSFILE", values); //$NON-NLS-1$ + } + } if (options != null) { // HOSTNAME already done in Replacer constructor String value = options.get("IDENTITYAGENT"); //$NON-NLS-1$ if (value != null) { value = r.substitute(value, "dhlru"); //$NON-NLS-1$ + value = toFile(value, home).getPath(); options.put("IDENTITYAGENT", value); //$NON-NLS-1$ } } @@ -909,17 +943,6 @@ public class OpenSshConfig implements ConfigRepository { } } - private File toFile(String path, File home) { - if (path.startsWith("~/")) { //$NON-NLS-1$ - return new File(home, path.substring(2)); - } - File ret = new File(path); - if (ret.isAbsolute()) { - return ret; - } - return new File(home, path); - } - Config getConfig() { return config; } |