diff --git a/Packages/macOS/CmuxFoundation/Sources/CmuxFoundation/SSHPTYAttachRetryScriptBuilder.swift b/Packages/macOS/CmuxFoundation/Sources/CmuxFoundation/SSHPTYAttachRetryScriptBuilder.swift index 36a239b0d920..c6120a9c6657 100644 --- a/Packages/macOS/CmuxFoundation/Sources/CmuxFoundation/SSHPTYAttachRetryScriptBuilder.swift +++ b/Packages/macOS/CmuxFoundation/Sources/CmuxFoundation/SSHPTYAttachRetryScriptBuilder.swift @@ -34,7 +34,7 @@ public struct SSHPTYAttachRetryScriptBuilder: Sendable { let noProgressStatus = SSHPTYAttachExitCode.bridgeClosedWithoutProgress.rawValue let sessionRunningStatus = SSHPTYAttachExitCode.bridgeClosedSessionRunning.rawValue let transientStatus = SSHPTYAttachExitCode.retryableTransient.rawValue - return [ + var lines = [ "cmux_ssh_attach_reconnect_limit=\"${CMUX_SSH_RECONNECT_LIMIT:-}\"", "case \"$cmux_ssh_attach_reconnect_limit\" in '') cmux_ssh_attach_reconnect_limit='∞'; cmux_ssh_attach_reconnect_unbounded=1 ;; *[!0-9]*) cmux_ssh_attach_reconnect_limit=20; cmux_ssh_attach_reconnect_unbounded=0 ;; *) cmux_ssh_attach_reconnect_unbounded=0 ;; esac", "cmux_ssh_attach_reconnect_delay=\"${CMUX_SSH_RECONNECT_DELAY_SECONDS:-2}\"", @@ -43,14 +43,18 @@ public struct SSHPTYAttachRetryScriptBuilder: Sendable { "case \"$cmux_ssh_attach_reconnect_max_delay\" in ''|*[!0-9]*|0*) cmux_ssh_attach_reconnect_max_delay=30 ;; esac", "if [ \"$cmux_ssh_attach_reconnect_delay\" -gt \"$cmux_ssh_attach_reconnect_max_delay\" ]; then cmux_ssh_attach_reconnect_delay=\"$cmux_ssh_attach_reconnect_max_delay\"; fi", "cmux_ssh_attach_reconnect_initial_delay=\"$cmux_ssh_attach_reconnect_delay\"", - ] + noProgressPolicy.configurationLines + [ + ] + lines.append(contentsOf: noProgressPolicy.configurationLines) + lines.append(contentsOf: [ "cmux_ssh_attach_no_progress_retry=0", "cmux_ssh_attach_retry=0", "cmux_ssh_attach_auth_retry=0", "cmux_ssh_attach_auth_retry_limit=\(authPolicy.maximumConsecutiveTransientFailures)", "cmux_ssh_attach_reauth_required=\(initialReauthentication)", "cmux_ssh_attach_auth_launching=0", - ] + backoffBuilder.stateInitializationLines + [ + ]) + lines.append(contentsOf: backoffBuilder.stateInitializationLines) + lines.append(contentsOf: [ "while :; do", " if [ \"$cmux_ssh_attach_reauth_required\" -eq 1 ]; then", " cmux_ssh_attach_auth_launching=1", @@ -76,9 +80,12 @@ public struct SSHPTYAttachRetryScriptBuilder: Sendable { " if [ \"$cmux_ssh_attach_reconnect_unbounded\" -eq 0 ] && [ \"$cmux_ssh_attach_retry\" -ge \"$cmux_ssh_attach_reconnect_limit\" ]; then exit \"$cmux_ssh_attach_status\"; fi", " cmux_ssh_attach_retry=$((cmux_ssh_attach_retry + 1))", " if [ -t 2 ]; then printf '\\n\\033[33m%s\\033[0m\\n' \"$(printf \(reattachingFormat) \"$cmux_ssh_attach_retry\" \"$cmux_ssh_attach_reconnect_limit\")\" >&2 || true; fi", - ] + backoffBuilder.waitLines + [ + ]) + lines.append(contentsOf: backoffBuilder.waitLines) + lines.append(contentsOf: [ " if [ \"$cmux_ssh_attach_reconnect_delay\" -lt \"$cmux_ssh_attach_reconnect_max_delay\" ]; then cmux_ssh_attach_reconnect_delay=$((cmux_ssh_attach_reconnect_delay * 2)); if [ \"$cmux_ssh_attach_reconnect_delay\" -gt \"$cmux_ssh_attach_reconnect_max_delay\" ]; then cmux_ssh_attach_reconnect_delay=\"$cmux_ssh_attach_reconnect_max_delay\"; fi; fi", "done", - ] + ]) + return lines } }