summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZuul <zuul@review.opendev.org>2022-04-11 05:43:23 +0000
committerGerrit Code Review <review@openstack.org>2022-04-11 05:43:23 +0000
commitbf760f221f22f2c771461d27d52d4caba57b5d25 (patch)
tree8c882f39e25dfe01b31774e3531c5a3e8bde924d
parentbb58ee198cffaedb5e16fd1220996a9d331d2b4c (diff)
parent5bfaa4a6f355a6820fe16c1aea77a01ba7b97eaa (diff)
downloadgit-review-bf760f221f22f2c771461d27d52d4caba57b5d25.tar.gz
Merge "Force use of scp rather than sftp when possible"
-rw-r--r--git_review/cmd.py8
-rw-r--r--releasenotes/notes/scp-subsystem-c8d78aa8f7f69f66.yaml15
2 files changed, 23 insertions, 0 deletions
diff --git a/git_review/cmd.py b/git_review/cmd.py
index fe20c99..15f3121 100644
--- a/git_review/cmd.py
+++ b/git_review/cmd.py
@@ -373,9 +373,17 @@ def set_hooks_commit_msg(remote, target_file):
userhost = hostname
# OS independent target file
scp_target_file = target_file.replace(os.sep, "/")
+
+ # Get scp options
+ scp_out = run_command("scp")
+ scp_opts = scp_out[scp_out.index("[") + 2:scp_out.index("]")]
+
cmd = ["scp", userhost + ":hooks/commit-msg", scp_target_file]
if port is not None:
cmd.insert(1, "-P%s" % port)
+ # Force scp protocol if the -O option is available
+ if "O" in scp_opts:
+ cmd.insert(1, "-O")
if VERBOSE:
hook_url = 'scp://%s%s/hooks/commit-msg' \
diff --git a/releasenotes/notes/scp-subsystem-c8d78aa8f7f69f66.yaml b/releasenotes/notes/scp-subsystem-c8d78aa8f7f69f66.yaml
new file mode 100644
index 0000000..1521445
--- /dev/null
+++ b/releasenotes/notes/scp-subsystem-c8d78aa8f7f69f66.yaml
@@ -0,0 +1,15 @@
+---
+fixes:
+ - |
+ OpenSSH has deprecated its use of scp/rcp protocol in favor of
+ SFTP, which the embedded Apache mina-sshd in widely-deployed
+ Gerrit versions does not yet support. The default officially
+ changed in OpenSSH 9.0 (some distributions, such as Fedora and
+ CentOS, switched their default behavior to this as early as
+ OpenSSH 8.7 or 8.8), leading to a ``subsystem request failed on
+ channel 0`` error during commit-msg hook retrieval. Now
+ git-review will attempt to detect whether scp's -O option is
+ available to force use of the legacy scp/rcp protocol, and apply
+ it if so. Future git-review versions may change the fallback
+ behavior once an SFTP subsystem is implemented and available for
+ a new Gerrit release.