remote-bzr: reuse bzrlib transports when possible
commitbd5424f0d6257b55f7269ee5f009c5ce5eb71c6e
authorRichard Hansen <rhansen@bbn.com>
Sun, 8 Sep 2013 05:47:49 +0000 (8 01:47 -0400)
committerJunio C Hamano <gitster@pobox.com>
Sun, 8 Sep 2013 18:15:33 +0000 (8 11:15 -0700)
treea404215769e3d89f73a4ba063fd6901b010be543
parentd2dbd399fa03b37ce797ed6fc609574a7e677079
remote-bzr: reuse bzrlib transports when possible

Pass a list of open bzrlib.transport.Transport objects to each bzrlib
function that might create a transport.  This enables bzrlib to reuse
existing transports when possible, avoiding multiple concurrent
connections to the same remote server.

If the remote server is accessed via ssh, this fixes a couple of
problems:
  * If the user does not have keys loaded into an ssh agent, the user
    may be prompted for a password multiple times.
  * If the user is using OpenSSH and the ControlMaster setting is set
    to auto, git-remote-bzr might hang.  This is because bzrlib closes
    the multiple ssh sessions in an undefined order and might try to
    close the master ssh session before the other sessions.  The
    master ssh process will not exit until the other sessions have
    exited, causing a deadlock.  (The ssh sessions are closed in an
    undefined order because bzrlib relies on the Python garbage
    collector to trigger ssh session termination.)

Signed-off-by: Richard Hansen <rhansen@bbn.com>
Acked-by: Felipe Contreras <felipe.contreras@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
contrib/remote-helpers/git-remote-bzr