TrivialRebase: Support alternative ssh executable

like plink.

Two arguments are added:

--ssh - ssh executable to be used (default: "ssh")
--ssh-port-flag - port flag for ssh (default: "-p")

Since ssh-port-flag receives a flag it can only be
used with --arg=value notation

plink requires "--ssh plink --ssh-port-flag=-P"

Change-Id: I7f494e099de9a9877a3336fcd4e735a9d9dfd921
This commit is contained in:
Orgad Shaneh
2013-04-10 22:24:17 +03:00
committed by Gerrit Code Review
parent 5fe0860ca1
commit eecfa12b27

View File

@@ -55,6 +55,9 @@ class TrivialRebase:
parser.add_argument("--server-port", dest="port", default='29418',
help="Port to connect to Gerrit's SSH daemon "
"[default: %(default)s]")
parser.add_argument("--ssh", default="ssh", help="SSH executable")
parser.add_argument("--ssh-port-flag", dest="ssh_port_flag", default="-p", help="SSH port flag")
args = parser.parse_known_args()[0]
if None in [args.changeUrl, args.project, args.commit, args.patchset]:
parser.error("Incomplete arguments")
@@ -68,6 +71,8 @@ class TrivialRebase:
self.private_key_path = args.private_key_path
self.server = args.server
self.port = args.port
self.ssh = args.ssh
self.ssh_port_flag = args.ssh_port_flag
class CheckCallError(OSError):
"""CheckCall() returned non-0."""
@@ -85,7 +90,7 @@ class TrivialRebase:
Works on python 2.4
"""
try:
process = subprocess.Popen(command, cwd=cwd, stdout=subprocess.PIPE)
process = subprocess.Popen(command, cwd=cwd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
std_out, std_err = process.communicate()
except OSError, e:
raise self.CheckCallError(command, cwd, e.errno, None)
@@ -95,7 +100,7 @@ class TrivialRebase:
def GsqlQuery(self, sql_query):
"""Runs a gerrit gsql query and returns the result"""
gsql_cmd = ['ssh', '-p', self.port, self.server, 'gerrit', 'gsql',
gsql_cmd = [self.ssh, self.ssh_port_flag, self.port, self.server, 'gerrit', 'gsql',
'--format', 'JSON', '-c', sql_query]
try:
(gsql_out, _gsql_stderr) = self.CheckCall(gsql_cmd)
@@ -150,7 +155,7 @@ class TrivialRebase:
return patch_id_process.communicate()[0]
def SuExec(self, as_user, cmd):
suexec_cmd = ['ssh', '-l', "Gerrit Code Review", '-p', self.port, self.server]
suexec_cmd = [self.ssh, '-l', "Gerrit Code Review", self.ssh_port_flag, self.port, self.server]
if self.private_key_path:
suexec_cmd += ['-i', self.private_key_path]
suexec_cmd += ['suexec', '--as', as_user, '--', cmd]
@@ -194,8 +199,8 @@ class TrivialRebase:
# commit message changed
comment_msg = ("\'--message=New patchset patch-id matches previous patchset"
", but commit message has changed.'")
comment_cmd = ['ssh', '-p', self.port, self.server, 'gerrit', 'approve',
'--project', self.project, comment_msg, self.commit]
comment_cmd = [self.ssh, self.ssh_port_flag, self.port, self.server, 'gerrit',
'approve', '--project', self.project, comment_msg, self.commit]
self.CheckCall(comment_cmd)
return