25 */ |
25 */ |
26 |
26 |
27 package de.uapcore.lightpit.vcs |
27 package de.uapcore.lightpit.vcs |
28 |
28 |
29 import java.nio.file.Files |
29 import java.nio.file.Files |
30 import java.nio.file.Path |
|
31 import kotlin.io.path.ExperimentalPathApi |
30 import kotlin.io.path.ExperimentalPathApi |
32 import kotlin.io.path.deleteRecursively |
31 import kotlin.io.path.deleteRecursively |
33 |
32 |
34 /** |
33 /** |
35 * A connector for Mercurial repositories. |
34 * A connector for Mercurial repositories. |
40 |
39 |
41 /** |
40 /** |
42 * Checks, if the specified binary is available and executable. |
41 * Checks, if the specified binary is available and executable. |
43 */ |
42 */ |
44 fun checkAvailability(): Boolean { |
43 fun checkAvailability(): Boolean { |
45 return when (val versionInfo = invokeCommand(Path.of("."), "--version")) { |
44 return when (val versionInfo = invokeCommand("--version")) { |
46 is VcsConnectorResult.Success -> versionInfo.content.contains("Mercurial") |
45 is VcsConnectorResult.Success -> versionInfo.content.contains("Mercurial") |
47 else -> false |
46 else -> false |
48 } |
47 } |
49 } |
48 } |
50 |
49 |
59 val tmpDir = try { |
58 val tmpDir = try { |
60 Files.createTempDirectory("lightpit-vcs-") |
59 Files.createTempDirectory("lightpit-vcs-") |
61 } catch (e: Throwable) { |
60 } catch (e: Throwable) { |
62 return VcsConnectorResult.Error("Creating temporary directory for VCS connection failed: " + e.message) |
61 return VcsConnectorResult.Error("Creating temporary directory for VCS connection failed: " + e.message) |
63 } |
62 } |
64 val init = invokeCommand(tmpDir, "init") |
63 val init = invokeCommand("init", workingDir = tmpDir) |
65 if (init is VcsConnectorResult.Error) { |
64 if (init is VcsConnectorResult.Error) { |
66 return init |
65 return init |
67 } |
66 } |
68 |
67 |
69 val commitLogContent = when (val result = invokeCommand( |
68 val commitLogContent = when (val result = invokeCommand( |
70 tmpDir, "incoming", pathOrUrl, "-n", "--template", "::lpitref::{node}:{desc}\\n" |
69 "incoming", pathOrUrl, "-n", "--template", "::lpitref::{node}:{desc}\\n", |
|
70 workingDir = tmpDir, |
|
71 timeout = 60 |
71 )) { |
72 )) { |
72 is VcsConnectorResult.Error -> return result |
73 is VcsConnectorResult.Error -> return result |
73 is VcsConnectorResult.Success -> result.content |
74 is VcsConnectorResult.Success -> result.content |
74 } |
75 } |
75 |
76 |