diff --git a/pom.xml b/pom.xml index 5ba0f92..a0acbe8 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ com.englishtown stash-hook-mirror - 1.6.0 + 1.7.0 Englishtown diff --git a/src/main/java/com/englishtown/stash/hook/MirrorRepositoryHook.java b/src/main/java/com/englishtown/stash/hook/MirrorRepositoryHook.java index c8eccf7..e29d5de 100644 --- a/src/main/java/com/englishtown/stash/hook/MirrorRepositoryHook.java +++ b/src/main/java/com/englishtown/stash/hook/MirrorRepositoryHook.java @@ -102,7 +102,7 @@ public class MirrorRepositoryHook implements AsyncPostReceiveRepositoryHook, Rep try { final String password = passwordEncryptor.decrypt(settings.password); - final URI authenticatedUrl = getAuthenticatedUrl(settings.mirrorRepoUrl, settings.username, password); + final String authenticatedUrl = getAuthenticatedUrl(settings.mirrorRepoUrl, settings.username, password); executor.submit(new Callable() { @@ -119,7 +119,7 @@ public class MirrorRepositoryHook implements AsyncPostReceiveRepositoryHook, Rep String result = builder .command("push") .argument("--prune") // this deletes locally deleted branches - .argument(authenticatedUrl.toString()) + .argument(authenticatedUrl) .argument("+refs/heads/*:refs/heads/*") // Only mirror heads .argument("+refs/tags/*:refs/tags/*") // and tags .errorHandler(passwordHandler) @@ -149,19 +149,18 @@ public class MirrorRepositoryHook implements AsyncPostReceiveRepositoryHook, Rep } } - protected URI getAuthenticatedUrl(String mirrorRepoUrl, String username, String password) throws URISyntaxException { + protected String getAuthenticatedUrl(String mirrorRepoUrl, String username, String password) throws URISyntaxException { - URI uri = URI.create(mirrorRepoUrl); - - // ssh doesn't have username/password - if (uri.getScheme().equals("ssh")) { - return uri; + // Only http(s) has username/password + if (!mirrorRepoUrl.toLowerCase().startsWith("http")) { + return mirrorRepoUrl; } + URI uri = URI.create(mirrorRepoUrl); String userInfo = username + ":" + password; return new URI(uri.getScheme(), userInfo, uri.getHost(), uri.getPort(), - uri.getPath(), uri.getQuery(), uri.getFragment()); + uri.getPath(), uri.getQuery(), uri.getFragment()).toString(); } @@ -232,41 +231,26 @@ public class MirrorRepositoryHook implements AsyncPostReceiveRepositoryHook, Rep boolean result = true; boolean isHttp = false; - boolean isSsh = false; if (ms.mirrorRepoUrl.isEmpty()) { result = false; errors.addFieldError(SETTING_MIRROR_REPO_URL + ms.suffix, "The mirror repo url is required."); } else { - URI uri; try { - uri = URI.create(ms.mirrorRepoUrl); + URI uri = URI.create(ms.mirrorRepoUrl); String scheme = uri.getScheme().toLowerCase(); - if (scheme.equals("ssh")) { - isSsh = true; - if (!ms.mirrorRepoUrl.startsWith("ssh://git@")) { - result = false; - errors.addFieldError(SETTING_MIRROR_REPO_URL + ms.suffix, - "An ssh URL should start with ssh://git@"); - } - } else if (scheme.startsWith("http")) { + if (scheme.startsWith("http")) { isHttp = true; if (ms.mirrorRepoUrl.contains("@")) { result = false; errors.addFieldError(SETTING_MIRROR_REPO_URL + ms.suffix, "The username and password should not be included."); } - } else { - result = false; - errors.addFieldError(SETTING_MIRROR_REPO_URL + ms.suffix, - "The mirror repo url must be a ssh or http(s) URL."); } - } catch (Exception ex) { - result = false; - errors.addFieldError(SETTING_MIRROR_REPO_URL + ms.suffix, - "The mirror repo url must be a valid ssh or http(s) URL."); + // Not a valid url, assume it is something git can read + } } @@ -281,9 +265,8 @@ public class MirrorRepositoryHook implements AsyncPostReceiveRepositoryHook, Rep result = false; errors.addFieldError(SETTING_PASSWORD + ms.suffix, "The password is required when using http(s)."); } - } - // SSH should not have username or password - if (isSsh) { + } else { + // Only http should have username or password ms.password = ms.username = ""; } diff --git a/src/main/resources/static/mirror-repository-hook.soy b/src/main/resources/static/mirror-repository-hook.soy index d8250a7..0bff37c 100644 --- a/src/main/resources/static/mirror-repository-hook.soy +++ b/src/main/resources/static/mirror-repository-hook.soy @@ -48,7 +48,7 @@ {/param} {param isRequired: true /} {param descriptionText: stash_i18n('com.englishtown.stash.hook.mirror.strings.mirrorRepoUrl.description', - 'The ssh or http(s) URL to the remote mirrored repo') /} + 'The GIT URL (ssh, git, http(s), file) to the remote mirrored repo') /} {param extraClasses: 'long et-mirror-repo' /} {param errorTexts: $errors ? $errors['mirrorRepoUrl' + $index] : null /} {/call} diff --git a/src/test/java/com/englishtown/stash/hook/MirrorRepositoryHookTest.java b/src/test/java/com/englishtown/stash/hook/MirrorRepositoryHookTest.java index a60ea6a..4e88203 100644 --- a/src/test/java/com/englishtown/stash/hook/MirrorRepositoryHookTest.java +++ b/src/test/java/com/englishtown/stash/hook/MirrorRepositoryHookTest.java @@ -175,10 +175,8 @@ public class MirrorRepositoryHookTest { @Test public void testGetAuthenticatedUrl() throws Exception { - URI result; - - result = hook.getAuthenticatedUrl(mirrorRepoUrlHttp, username, password); - assertEquals(repository, result.toString()); + String result = hook.getAuthenticatedUrl(mirrorRepoUrlHttp, username, password); + assertEquals(repository, result); } @@ -239,8 +237,8 @@ public class MirrorRepositoryHookTest { errors = mock(SettingsValidationErrors.class); hook.validate(settings, errors, repo); verify(errors, never()).addFormError(anyString()); - verify(errors).addFieldError(eq(MirrorRepositoryHook.SETTING_MIRROR_REPO_URL + "0"), anyString()); - verify(errors).addFieldError(anyString(), anyString()); + verify(errors, never()).addFieldError(eq(MirrorRepositoryHook.SETTING_MIRROR_REPO_URL + "0"), anyString()); + verify(errors, never()).addFieldError(anyString(), anyString()); errors = mock(SettingsValidationErrors.class); hook.validate(settings, errors, repo); @@ -252,7 +250,7 @@ public class MirrorRepositoryHookTest { errors = mock(SettingsValidationErrors.class); hook.validate(settings, errors, repo); verify(errors, never()).addFormError(anyString()); - verify(errors).addFieldError(eq(MirrorRepositoryHook.SETTING_MIRROR_REPO_URL + "0"), anyString()); + verify(errors, never()).addFieldError(eq(MirrorRepositoryHook.SETTING_MIRROR_REPO_URL + "0"), anyString()); verify(errors, never()).addFieldError(eq(MirrorRepositoryHook.SETTING_USERNAME + "0"), anyString()); verify(errors, never()).addFieldError(eq(MirrorRepositoryHook.SETTING_PASSWORD + "0"), anyString());