# HG changeset patch # User Mike Becker # Date 1689597942 -7200 # Node ID d73537b925af01aefe8e3be21cd6af6a70ab04e6 # Parent 89087a6af16afca2c28814a9e60cda3497a77acf start implementation of HgConnector diff -r 89087a6af16a -r d73537b925af build.gradle.kts --- a/build.gradle.kts Sat Jul 15 13:49:36 2023 +0200 +++ b/build.gradle.kts Mon Jul 17 14:45:42 2023 +0200 @@ -5,7 +5,7 @@ war } group = "de.uapcore" -version = "1.0.1" +version = "1.1.0-snapshot" repositories { mavenCentral() @@ -50,5 +50,11 @@ implementation("io.github.java-diff-utils:java-diff-utils:4.12") } } + val test by getting { + dependencies { + implementation("org.jetbrains.kotlin:kotlin-test-junit5") + runtimeOnly("org.junit.jupiter:junit-jupiter-engine:5.5.2") + } + } } } diff -r 89087a6af16a -r d73537b925af src/main/kotlin/de/uapcore/lightpit/vcs/HgConnector.kt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/kotlin/de/uapcore/lightpit/vcs/HgConnector.kt Mon Jul 17 14:45:42 2023 +0200 @@ -0,0 +1,54 @@ +/* + * Copyright 2023 Mike Becker. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +package de.uapcore.lightpit.vcs + +import java.util.concurrent.TimeUnit + +/** + * A connector for Mercurial repositories. + * + * @param path the path to the Mercurial binary + */ +class HgConnector(private val path: String) { + + /** + * Checks, if the specified binary is available and executable. + */ + fun checkAvailability(): Boolean { + return try { + val process = ProcessBuilder(path, "--version").start() + val versionInfo = String(process.inputStream.readAllBytes(), Charsets.UTF_8) + if (process.waitFor(10, TimeUnit.SECONDS)) { + versionInfo.contains("Mercurial") + } else { + false + } + } catch (_: Throwable) { + false + } + } +} \ No newline at end of file diff -r 89087a6af16a -r d73537b925af src/main/webapp/WEB-INF/web.xml --- a/src/main/webapp/WEB-INF/web.xml Sat Jul 15 13:49:36 2023 +0200 +++ b/src/main/webapp/WEB-INF/web.xml Mon Jul 17 14:45:42 2023 +0200 @@ -12,6 +12,10 @@ available-languages en,de + + hg-binary + /usr/bin/hg + Application Database jdbc/lightpit/app diff -r 89087a6af16a -r d73537b925af src/test/kotlin/de/uapcore/lightpit/vcs/HgConnectorTest.kt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/test/kotlin/de/uapcore/lightpit/vcs/HgConnectorTest.kt Mon Jul 17 14:45:42 2023 +0200 @@ -0,0 +1,46 @@ +/* + * Copyright 2023 Mike Becker. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +package de.uapcore.lightpit.vcs + +import kotlin.test.Test +import kotlin.test.assertFalse +import kotlin.test.assertTrue + +class HgConnectorTest { + + private val testee = HgConnector("/usr/bin/hg") + + @Test + fun checkAvailability() { + assertTrue(testee.checkAvailability()) + } + + @Test + fun checkAvailabilityFalse() { + assertFalse(HgConnector("/bin/false").checkAvailability()) + } +} \ No newline at end of file