Re: [PATCH v2] remote-bzr: reuse bzrlib transports when possible

2013-09-12 Thread Junio C Hamano
Richard Hansen rhan...@bbn.com writes:

 Ping?  I'd like to merge fc/contrib-bzr.hg-fixes topic to 'next'
 (and fast track it to 'master' after that), and it would be helpful
 to get an Ack on the conflict resolution I have.

 Sorry for the delay.

 Looks good to me, and the tests still pass.

Thanks.

--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v2] remote-bzr: reuse bzrlib transports when possible

2013-09-12 Thread Richard Hansen
On 2013-09-10 18:01, Junio C Hamano wrote:
 Junio C Hamano gits...@pobox.com writes:
 
 Richard Hansen rhan...@bbn.com writes:

  def do_export(parser):
 -global parsed_refs, dirname
 +global parsed_refs, dirname, transports

 As this has been acked by Felipe who knows the script the best, I'll
 apply this directly to 'master'.

 These additions of global transports however have trivial
 interactions with fc/contrib-bzr-hg-fixes topic Felipe posted
 earlier, which I was planning to start merging down to 'next' and
 then to 'master'.  Most funcions merely use the variable without
 assigning, so global transports can be removed, in line with the
 spirit of 641a2b5b (remote-helpers: cleanup more global variables,
 2013-08-28), except for the obvious initialisation in main(), I
 think.  Please double check the conflict resolution result in a
 commit on 'pu' with

 git show 'origin/pu^{/Merge fc/contrib-bzr}'

 when I push the result out.

 Thanks.
 
 Ping?  I'd like to merge fc/contrib-bzr.hg-fixes topic to 'next'
 (and fast track it to 'master' after that), and it would be helpful
 to get an Ack on the conflict resolution I have.

Sorry for the delay.

Looks good to me, and the tests still pass.

-Richard

--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v2] remote-bzr: reuse bzrlib transports when possible

2013-09-10 Thread Junio C Hamano
Junio C Hamano gits...@pobox.com writes:

 Richard Hansen rhan...@bbn.com writes:

  def do_export(parser):
 -global parsed_refs, dirname
 +global parsed_refs, dirname, transports

 As this has been acked by Felipe who knows the script the best, I'll
 apply this directly to 'master'.

 These additions of global transports however have trivial
 interactions with fc/contrib-bzr-hg-fixes topic Felipe posted
 earlier, which I was planning to start merging down to 'next' and
 then to 'master'.  Most funcions merely use the variable without
 assigning, so global transports can be removed, in line with the
 spirit of 641a2b5b (remote-helpers: cleanup more global variables,
 2013-08-28), except for the obvious initialisation in main(), I
 think.  Please double check the conflict resolution result in a
 commit on 'pu' with

 git show 'origin/pu^{/Merge fc/contrib-bzr}'

 when I push the result out.

 Thanks.

Ping?  I'd like to merge fc/contrib-bzr.hg-fixes topic to 'next'
(and fast track it to 'master' after that), and it would be helpful
to get an Ack on the conflict resolution I have.

--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v2] remote-bzr: reuse bzrlib transports when possible

2013-09-09 Thread Junio C Hamano
Richard Hansen rhan...@bbn.com writes:

  def do_export(parser):
 -global parsed_refs, dirname
 +global parsed_refs, dirname, transports

As this has been acked by Felipe who knows the script the best, I'll
apply this directly to 'master'.

These additions of global transports however have trivial
interactions with fc/contrib-bzr-hg-fixes topic Felipe posted
earlier, which I was planning to start merging down to 'next' and
then to 'master'.  Most funcions merely use the variable without
assigning, so global transports can be removed, in line with the
spirit of 641a2b5b (remote-helpers: cleanup more global variables,
2013-08-28), except for the obvious initialisation in main(), I
think.  Please double check the conflict resolution result in a
commit on 'pu' with

git show 'origin/pu^{/Merge fc/contrib-bzr}'

when I push the result out.

Thanks.

--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH v2] remote-bzr: reuse bzrlib transports when possible

2013-09-07 Thread Richard Hansen
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 rhan...@bbn.com
---
Changes from v1:
  * add Signed-off-by line

 contrib/remote-helpers/git-remote-bzr | 33 +
 1 file changed, 21 insertions(+), 12 deletions(-)

diff --git a/contrib/remote-helpers/git-remote-bzr 
b/contrib/remote-helpers/git-remote-bzr
index c3a3cac..1e0044b 100755
--- a/contrib/remote-helpers/git-remote-bzr
+++ b/contrib/remote-helpers/git-remote-bzr
@@ -674,7 +674,7 @@ def parse_reset(parser):
 parsed_refs[ref] = mark_to_rev(from_mark)
 
 def do_export(parser):
-global parsed_refs, dirname
+global parsed_refs, dirname, transports
 
 parser.next()
 
@@ -699,7 +699,8 @@ def do_export(parser):
 branch.generate_revision_history(revid, marks.get_tip(name))
 
 if name in peers:
-peer = bzrlib.branch.Branch.open(peers[name])
+peer = bzrlib.branch.Branch.open(peers[name],
+ 
possible_transports=transports)
 try:
 peer.bzrdir.push_branch(branch, revision_id=revid)
 except bzrlib.errors.DivergedBranches:
@@ -769,25 +770,28 @@ def do_list(parser):
 print
 
 def clone(path, remote_branch):
+global transports
 try:
-bdir = bzrlib.bzrdir.BzrDir.create(path)
+bdir = bzrlib.bzrdir.BzrDir.create(path, 
possible_transports=transports)
 except bzrlib.errors.AlreadyControlDirError:
-bdir = bzrlib.bzrdir.BzrDir.open(path)
+bdir = bzrlib.bzrdir.BzrDir.open(path, possible_transports=transports)
 repo = bdir.find_repository()
 repo.fetch(remote_branch.repository)
 return remote_branch.sprout(bdir, repository=repo)
 
 def get_remote_branch(name):
-global dirname, branches
+global dirname, branches, transports
 
-remote_branch = bzrlib.branch.Branch.open(branches[name])
+remote_branch = bzrlib.branch.Branch.open(branches[name],
+  possible_transports=transports)
 if isinstance(remote_branch.user_transport, 
bzrlib.transport.local.LocalTransport):
 return remote_branch
 
 branch_path = os.path.join(dirname, 'clone', name)
 
 try:
-branch = bzrlib.branch.Branch.open(branch_path)
+branch = bzrlib.branch.Branch.open(branch_path,
+   possible_transports=transports)
 except bzrlib.errors.NotBranchError:
 # clone
 branch = clone(branch_path, remote_branch)
@@ -821,17 +825,19 @@ def find_branches(repo):
 yield name, branch.base
 
 def get_repo(url, alias):
-global dirname, peer, branches
+global dirname, peer, branches, transports
 
 normal_url = bzrlib.urlutils.normalize_url(url)
-origin = bzrlib.bzrdir.BzrDir.open(url)
+origin = bzrlib.bzrdir.BzrDir.open(url, possible_transports=transports)
 is_local = isinstance(origin.transport, 
bzrlib.transport.local.LocalTransport)
 
 shared_path = os.path.join(gitdir, 'bzr')
 try:
-shared_dir = bzrlib.bzrdir.BzrDir.open(shared_path)
+shared_dir = bzrlib.bzrdir.BzrDir.open(shared_path,
+   possible_transports=transports)
 except bzrlib.errors.NotBranchError:
-shared_dir = bzrlib.bzrdir.BzrDir.create(shared_path)
+shared_dir = bzrlib.bzrdir.BzrDir.create(shared_path,
+ 
possible_transports=transports)
 try:
 shared_repo = shared_dir.open_repository()
 except bzrlib.errors.NoRepositoryPresent:
@@ -844,7 +850,8 @@ def get_repo(url, alias):
 else:
 # check and remove old organization
 try:
-bdir = bzrlib.bzrdir.BzrDir.open(clone_path)
+bdir = bzrlib.bzrdir.BzrDir.open(clone_path,
+ 
possible_transports=transports)
 bdir.destroy_repository()
 except