Merge branch 'stable-4.9'
* stable-4.9: Avoid bad rounding "1 year, 12 months" in date formatter Ensure that ~ in ssh config is replaced before Jsch sees it Change-Id: If6ca55f9447aaea3d7c2d36c03520d5e6dd5193e Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
This commit is contained in:
commit
f89101105e
|
@ -323,11 +323,12 @@ public void testListValueSingle() throws Exception {
|
|||
|
||||
@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 void testIdentityFile() throws Exception {
|
|||
// 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 void testMultiIdentityFile() throws Exception {
|
|||
// 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 void testNegatedPattern() throws Exception {
|
|||
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 void testPattern() throws Exception {
|
|||
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 void testMultiHost() throws Exception {
|
|||
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"));
|
||||
}
|
||||
|
||||
|
|
|
@ -352,6 +352,17 @@ private static Boolean yesno(final String value) {
|
|||
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 @@ private List<String> substitute(List<String> values, String allowed,
|
|||
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 @@ private void complete(String initialHostName, File homeDir) {
|
|||
}
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue