aboutsummaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorHarsh Shandilya <me@msfjarvis.dev>2020-12-17 10:08:31 -0800
committerHarsh Shandilya <me@msfjarvis.dev>2020-12-21 20:31:54 +0530
commit4f6c60f029487ddbfaabfcc29101a2c39d9959e2 (patch)
tree48e528d822b102ba1fdd3980ff865e4506aa2eb1 /app
parent96b51e73ec48b95909ed039e8faefadc72c9eeff (diff)
Transform broken repo error message to be more helpful (#1251)
(cherry picked from commit 0396bf92a9a15bcdac8b9fc71f6b34afc949ab41) Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
Diffstat (limited to 'app')
-rw-r--r--app/src/main/java/com/zeapo/pwdstore/git/BaseGitActivity.kt39
1 files changed, 26 insertions, 13 deletions
diff --git a/app/src/main/java/com/zeapo/pwdstore/git/BaseGitActivity.kt b/app/src/main/java/com/zeapo/pwdstore/git/BaseGitActivity.kt
index 5248d259..0e8a2523 100644
--- a/app/src/main/java/com/zeapo/pwdstore/git/BaseGitActivity.kt
+++ b/app/src/main/java/com/zeapo/pwdstore/git/BaseGitActivity.kt
@@ -70,19 +70,7 @@ abstract class BaseGitActivity : ContinuationContainerActivity() {
GitOp.BREAK_OUT_OF_DETACHED -> BreakOutOfDetached(this)
GitOp.RESET -> ResetToRemoteOperation(this)
}
- return op.executeAfterAuthentication(GitSettings.authMode).mapError { throwable ->
- val err = rootCauseException(throwable)
- if (err.message?.contains("cannot open additional channels") == true) {
- GitSettings.useMultiplexing = false
- SSHException(DisconnectReason.TOO_MANY_CONNECTIONS, "The server does not support multiple Git operations per SSH session. Please try again, a slower fallback mode will be used.")
- } else if (err is TransportException && err.disconnectReason == DisconnectReason.HOST_KEY_NOT_VERIFIABLE) {
- SSHException(DisconnectReason.HOST_KEY_NOT_VERIFIABLE,
- "WARNING: The remote host key has changed. If this is expected, please go to Git server settings and clear the saved host key."
- )
- } else {
- err
- }
- }
+ return op.executeAfterAuthentication(GitSettings.authMode).mapError(::transformGitError)
}
fun finishOnSuccessHandler(@Suppress("UNUSED_PARAMETER") nothing: Unit) {
@@ -114,6 +102,31 @@ abstract class BaseGitActivity : ContinuationContainerActivity() {
}
/**
+ * Takes the result of [launchGitOperation] and applies any necessary transformations
+ * on the [throwable] returned from it
+ */
+ private fun transformGitError(throwable: Throwable): Throwable {
+ val err = rootCauseException(throwable)
+ return when {
+ err.message?.contains("cannot open additional channels") == true -> {
+ GitSettings.useMultiplexing = false
+ SSHException(DisconnectReason.TOO_MANY_CONNECTIONS, "The server does not support multiple Git operations per SSH session. Please try again, a slower fallback mode will be used.")
+ }
+ err.message?.contains("int org.eclipse.jgit.lib.AnyObjectId.w1") == true -> {
+ IllegalStateException("Your local repository appears to be an incomplete Git clone, please delete and re-clone from settings")
+ }
+ err is TransportException && err.disconnectReason == DisconnectReason.HOST_KEY_NOT_VERIFIABLE -> {
+ SSHException(DisconnectReason.HOST_KEY_NOT_VERIFIABLE,
+ "WARNING: The remote host key has changed. If this is expected, please go to Git server settings and clear the saved host key."
+ )
+ }
+ else -> {
+ err
+ }
+ }
+ }
+
+ /**
* Check if a given [Throwable] is the result of an error caused by the user cancelling the
* operation.
*/