From d59722321fe4ee7d4f24fb28127873facddc255d Mon Sep 17 00:00:00 2001 From: epriestley Date: Mon, 2 Dec 2013 11:25:46 -0800 Subject: [PATCH] Handle "-p port" flag in ssh-connect Summary: The documentation is explicit that Git does not pass this flag: The $GIT_SSH command will be given exactly two arguments: the username@host (or just host) from the URL and the shell command to execute on that remote system. This isn't true; it does. Accommodate it. I'll see if I can fix this in the upstream, too. Test Plan: Ran various `ssh-connect` commands with -p, etc. Reviewers: btrahan Reviewed By: btrahan CC: aran Differential Revision: https://secure.phabricator.com/D7680 --- scripts/ssh/ssh-connect.php | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/scripts/ssh/ssh-connect.php b/scripts/ssh/ssh-connect.php index 639a319947..8a142090c3 100755 --- a/scripts/ssh/ssh-connect.php +++ b/scripts/ssh/ssh-connect.php @@ -7,6 +7,20 @@ $root = dirname(dirname(dirname(__FILE__))); require_once $root.'/scripts/__init_script__.php'; +// Contrary to the documentation, Git may pass a "-p" flag. If it does, respect +// it and move it before the "--" argument. +$args = new PhutilArgumentParser($argv); +$args->parsePartial( + array( + array( + 'name' => 'port', + 'short' => 'p', + 'param' => pht('port'), + 'help' => pht('Port number to connect to.'), + ), + )); +$unconsumed_argv = $args->getUnconsumedArgumentVector(); + $pattern = array(); $arguments = array(); @@ -31,9 +45,15 @@ if ($credential_phid) { $arguments[] = $key->getKeyfileEnvelope(); } +$port = $args->getArg('port'); +if ($port) { + $pattern[] = '-p %d'; + $arguments[] = $port; +} + $pattern[] = '--'; -$passthru_args = array_slice($argv, 1); +$passthru_args = $unconsumed_argv; foreach ($passthru_args as $passthru_arg) { $pattern[] = '%s'; $arguments[] = $passthru_arg; -- 2.51.2