{"thread":{"id":"34873","subject":"[PATCH] remote-bzr: reuse bzrlib transports when possible","startedAt":"2013-09-07T23:58:20Z","lastAt":"2013-09-12T21:11:12Z","messageCount":10,"participants":["Richard Hansen","Felipe Contreras","Junio C Hamano"],"isPatch":true,"patchVersion":1,"patchTotal":null},"messages":[{"id":"227035","messageId":"1378598300-22737-1-git-send-email-rhansen@bbn.com","threadId":"34873","inReplyTo":null,"subject":"[PATCH] remote-bzr: reuse bzrlib transports when possible","fromName":"Richard Hansen","fromEmail":"rhansen@bbn.com","sentAt":"2013-09-07T23:58:20Z","receivedAt":"2013-09-07T23:58:20Z","isPatch":true,"sender":{"key":"rhansen@rhansen.org","avatar":null},"body":"Pass a list of open bzrlib.transport.Transport objects to each bzrlib\nfunction that might create a transport.  This enables bzrlib to reuse\nexisting transports when possible, avoiding multiple concurrent\nconnections to the same remote server.\n\nIf the remote server is accessed via ssh, this fixes a couple of\nproblems:\n  * If the user does not have keys loaded into an ssh agent, the user\n    may be prompted for a password multiple times.\n  * If the user is using OpenSSH and the ControlMaster setting is set\n    to auto, git-remote-bzr might hang.  This is because bzrlib closes\n    the multiple ssh sessions in an undefined order and might try to\n    close the master ssh session before the other sessions.  The\n    master ssh process will not exit until the other sessions have\n    exited, causing a deadlock.  (The ssh sessions are closed in an\n    undefined order because bzrlib relies on the Python garbage\n    collector to trigger ssh session termination.)\n---\n contrib/remote-helpers/git-remote-bzr | 33 +++++++++++++++++++++------------\n 1 file changed, 21 insertions(+), 12 deletions(-)\n\ndiff --git a/contrib/remote-helpers/git-remote-bzr b/contrib/remote-helpers/git-remote-bzr\nindex c3a3cac..1e0044b 100755\n--- a/contrib/remote-helpers/git-remote-bzr\n+++ b/contrib/remote-helpers/git-remote-bzr\n@@ -674,7 +674,7 @@ def parse_reset(parser):\n     parsed_refs[ref] = mark_to_rev(from_mark)\n \n def do_export(parser):\n-    global parsed_refs, dirname\n+    global parsed_refs, dirname, transports\n \n     parser.next()\n \n@@ -699,7 +699,8 @@ def do_export(parser):\n             branch.generate_revision_history(revid, marks.get_tip(name))\n \n             if name in peers:\n-                peer = bzrlib.branch.Branch.open(peers[name])\n+                peer = bzrlib.branch.Branch.open(peers[name],\n+                                                 possible_transports=transports)\n                 try:\n                     peer.bzrdir.push_branch(branch, revision_id=revid)\n                 except bzrlib.errors.DivergedBranches:\n@@ -769,25 +770,28 @@ def do_list(parser):\n     print\n \n def clone(path, remote_branch):\n+    global transports\n     try:\n-        bdir = bzrlib.bzrdir.BzrDir.create(path)\n+        bdir = bzrlib.bzrdir.BzrDir.create(path, possible_transports=transports)\n     except bzrlib.errors.AlreadyControlDirError:\n-        bdir = bzrlib.bzrdir.BzrDir.open(path)\n+        bdir = bzrlib.bzrdir.BzrDir.open(path, possible_transports=transports)\n     repo = bdir.find_repository()\n     repo.fetch(remote_branch.repository)\n     return remote_branch.sprout(bdir, repository=repo)\n \n def get_remote_branch(name):\n-    global dirname, branches\n+    global dirname, branches, transports\n \n-    remote_branch = bzrlib.branch.Branch.open(branches[name])\n+    remote_branch = bzrlib.branch.Branch.open(branches[name],\n+                                              possible_transports=transports)\n     if isinstance(remote_branch.user_transport, bzrlib.transport.local.LocalTransport):\n         return remote_branch\n \n     branch_path = os.path.join(dirname, 'clone', name)\n \n     try:\n-        branch = bzrlib.branch.Branch.open(branch_path)\n+        branch = bzrlib.branch.Branch.open(branch_path,\n+                                           possible_transports=transports)\n     except bzrlib.errors.NotBranchError:\n         # clone\n         branch = clone(branch_path, remote_branch)\n@@ -821,17 +825,19 @@ def find_branches(repo):\n             yield name, branch.base\n \n def get_repo(url, alias):\n-    global dirname, peer, branches\n+    global dirname, peer, branches, transports\n \n     normal_url = bzrlib.urlutils.normalize_url(url)\n-    origin = bzrlib.bzrdir.BzrDir.open(url)\n+    origin = bzrlib.bzrdir.BzrDir.open(url, possible_transports=transports)\n     is_local = isinstance(origin.transport, bzrlib.transport.local.LocalTransport)\n \n     shared_path = os.path.join(gitdir, 'bzr')\n     try:\n-        shared_dir = bzrlib.bzrdir.BzrDir.open(shared_path)\n+        shared_dir = bzrlib.bzrdir.BzrDir.open(shared_path,\n+                                               possible_transports=transports)\n     except bzrlib.errors.NotBranchError:\n-        shared_dir = bzrlib.bzrdir.BzrDir.create(shared_path)\n+        shared_dir = bzrlib.bzrdir.BzrDir.create(shared_path,\n+                                                 possible_transports=transports)\n     try:\n         shared_repo = shared_dir.open_repository()\n     except bzrlib.errors.NoRepositoryPresent:\n@@ -844,7 +850,8 @@ def get_repo(url, alias):\n         else:\n             # check and remove old organization\n             try:\n-                bdir = bzrlib.bzrdir.BzrDir.open(clone_path)\n+                bdir = bzrlib.bzrdir.BzrDir.open(clone_path,\n+                                                 possible_transports=transports)\n                 bdir.destroy_repository()\n             except bzrlib.errors.NotBranchError:\n                 pass\n@@ -897,6 +904,7 @@ def main(args):\n     global files_cache\n     global is_tmp\n     global branches, peers\n+    global transports\n \n     alias = args[1]\n     url = args[2]\n@@ -909,6 +917,7 @@ def main(args):\n     marks = None\n     branches = {}\n     peers = {}\n+    transports = []\n \n     if alias[5:] == url:\n         is_tmp = True\n-- \n1.8.4\n"},{"id":"227036","messageId":"522BBE87.10206@bbn.com","threadId":"34873","inReplyTo":"1378598300-22737-1-git-send-email-rhansen@bbn.com","subject":"Re: [PATCH] remote-bzr: reuse bzrlib transports when possible","fromName":"Richard Hansen","fromEmail":"rhansen@bbn.com","sentAt":"2013-09-08T00:02:15Z","receivedAt":"2013-09-08T00:02:15Z","isPatch":true,"sender":{"key":"rhansen@rhansen.org","avatar":null},"body":"On 2013-09-07 19:58, Richard Hansen wrote:\n> Pass a list of open bzrlib.transport.Transport objects to each bzrlib\n> function that might create a transport.  This enables bzrlib to reuse\n> existing transports when possible, avoiding multiple concurrent\n> connections to the same remote server.\n> \n> If the remote server is accessed via ssh, this fixes a couple of\n> problems:\n>   * If the user does not have keys loaded into an ssh agent, the user\n>     may be prompted for a password multiple times.\n>   * If the user is using OpenSSH and the ControlMaster setting is set\n>     to auto, git-remote-bzr might hang.  This is because bzrlib closes\n>     the multiple ssh sessions in an undefined order and might try to\n>     close the master ssh session before the other sessions.  The\n>     master ssh process will not exit until the other sessions have\n>     exited, causing a deadlock.  (The ssh sessions are closed in an\n>     undefined order because bzrlib relies on the Python garbage\n>     collector to trigger ssh session termination.)\n\nI forgot to mention:  I didn't add a Signed-off-by line because there is\nno mention of a copyright license at the top of git-remote-bzr.\n\n-Richard\n"},{"id":"227037","messageId":"CAMP44s3Vw4GX+yL22F49uKFZcEvYmXC7nT9TCGW_jybhFHo1Og@mail.gmail.com","threadId":"34873","inReplyTo":"1378598300-22737-1-git-send-email-rhansen@bbn.com","subject":"Re: [PATCH] remote-bzr: reuse bzrlib transports when possible","fromName":"Felipe Contreras","fromEmail":"felipe.contreras@gmail.com","sentAt":"2013-09-08T00:27:42Z","receivedAt":"2013-09-08T00:27:42Z","isPatch":true,"sender":{"key":"felipe.contreras@gmail.com","avatar":"https://avatars.githubusercontent.com/u/8358?v=4"},"body":"On Sat, Sep 7, 2013 at 6:58 PM, Richard Hansen <rhansen@bbn.com> wrote:\n> Pass a list of open bzrlib.transport.Transport objects to each bzrlib\n> function that might create a transport.  This enables bzrlib to reuse\n> existing transports when possible, avoiding multiple concurrent\n> connections to the same remote server.\n>\n> If the remote server is accessed via ssh, this fixes a couple of\n> problems:\n>   * If the user does not have keys loaded into an ssh agent, the user\n>     may be prompted for a password multiple times.\n>   * If the user is using OpenSSH and the ControlMaster setting is set\n>     to auto, git-remote-bzr might hang.  This is because bzrlib closes\n>     the multiple ssh sessions in an undefined order and might try to\n>     close the master ssh session before the other sessions.  The\n>     master ssh process will not exit until the other sessions have\n>     exited, causing a deadlock.  (The ssh sessions are closed in an\n>     undefined order because bzrlib relies on the Python garbage\n>     collector to trigger ssh session termination.)\n\nLooks good to me. I'll apply in my personal repository.\n\n-- \nFelipe Contreras\n"},{"id":"227038","messageId":"CAMP44s0uHs8=r1eh2D-jdj563co5y7Rr1_6u=xoZDC52A6CPTQ@mail.gmail.com","threadId":"34873","inReplyTo":"522BBE87.10206@bbn.com","subject":"Re: [PATCH] remote-bzr: reuse bzrlib transports when possible","fromName":"Felipe Contreras","fromEmail":"felipe.contreras@gmail.com","sentAt":"2013-09-08T00:30:10Z","receivedAt":"2013-09-08T00:30:10Z","isPatch":true,"sender":{"key":"felipe.contreras@gmail.com","avatar":"https://avatars.githubusercontent.com/u/8358?v=4"},"body":"On Sat, Sep 7, 2013 at 7:02 PM, Richard Hansen <rhansen@bbn.com> wrote:\n> On 2013-09-07 19:58, Richard Hansen wrote:\n>> Pass a list of open bzrlib.transport.Transport objects to each bzrlib\n>> function that might create a transport.  This enables bzrlib to reuse\n>> existing transports when possible, avoiding multiple concurrent\n>> connections to the same remote server.\n>>\n>> If the remote server is accessed via ssh, this fixes a couple of\n>> problems:\n>>   * If the user does not have keys loaded into an ssh agent, the user\n>>     may be prompted for a password multiple times.\n>>   * If the user is using OpenSSH and the ControlMaster setting is set\n>>     to auto, git-remote-bzr might hang.  This is because bzrlib closes\n>>     the multiple ssh sessions in an undefined order and might try to\n>>     close the master ssh session before the other sessions.  The\n>>     master ssh process will not exit until the other sessions have\n>>     exited, causing a deadlock.  (The ssh sessions are closed in an\n>>     undefined order because bzrlib relies on the Python garbage\n>>     collector to trigger ssh session termination.)\n>\n> I forgot to mention:  I didn't add a Signed-off-by line because there is\n> no mention of a copyright license at the top of git-remote-bzr.\n\nAnd why is that relevant? A signed-off-by line means you wrote the\ncode and you are fine with the patch being applied, or you are\nresponsible somehow.\n\n-- \nFelipe Contreras\n"},{"id":"227073","messageId":"522C0B66.1080707@bbn.com","threadId":"34873","inReplyTo":"CAMP44s0uHs8=r1eh2D-jdj563co5y7Rr1_6u=xoZDC52A6CPTQ@mail.gmail.com","subject":"Re: [PATCH] remote-bzr: reuse bzrlib transports when possible","fromName":"Richard Hansen","fromEmail":"rhansen@bbn.com","sentAt":"2013-09-08T05:30:14Z","receivedAt":"2013-09-08T05:30:14Z","isPatch":true,"sender":{"key":"rhansen@rhansen.org","avatar":null},"body":"On 2013-09-07 20:30, Felipe Contreras wrote:\n> On Sat, Sep 7, 2013 at 7:02 PM, Richard Hansen <rhansen@bbn.com> wrote:\n>> On 2013-09-07 19:58, Richard Hansen wrote:\n>>> Pass a list of open bzrlib.transport.Transport objects to each bzrlib\n>>> function that might create a transport.  This enables bzrlib to reuse\n>>> existing transports when possible, avoiding multiple concurrent\n>>> connections to the same remote server.\n>>>\n>>> If the remote server is accessed via ssh, this fixes a couple of\n>>> problems:\n>>>   * If the user does not have keys loaded into an ssh agent, the user\n>>>     may be prompted for a password multiple times.\n>>>   * If the user is using OpenSSH and the ControlMaster setting is set\n>>>     to auto, git-remote-bzr might hang.  This is because bzrlib closes\n>>>     the multiple ssh sessions in an undefined order and might try to\n>>>     close the master ssh session before the other sessions.  The\n>>>     master ssh process will not exit until the other sessions have\n>>>     exited, causing a deadlock.  (The ssh sessions are closed in an\n>>>     undefined order because bzrlib relies on the Python garbage\n>>>     collector to trigger ssh session termination.)\n>>\n>> I forgot to mention:  I didn't add a Signed-off-by line because there is\n>> no mention of a copyright license at the top of git-remote-bzr.\n> \n> And why is that relevant? A signed-off-by line means you wrote the\n> code and you are fine with the patch being applied, or you are\n> responsible somehow.\n\nThe \"Developer's Certificate of Origin 1.1\" in\nDocumentation/SubmittingPatches refers to \"the open source license\nindicated in the file\", but there is no such indication.\n\nHowever, it looks like most of the files in the repository don't\nindicate which license applies.  So I guess the license in the COPYING\nfile (GPLv2) applies by default?  I'll re-send with the Signed-off-by\nline.\n\nPerhaps SubmittingPatches should be updated to clarify what happens if\nthe file doesn't indicate which license applies to the file (see\nexample below).\n\n-Richard\n\n\ndiff --git a/Documentation/SubmittingPatches b/Documentation/SubmittingPatches\nindex 7055576..c5ff744 100644\n--- a/Documentation/SubmittingPatches\n+++ b/Documentation/SubmittingPatches\n@@ -227,13 +227,15 @@ the patch, which certifies that you wrote it or otherwise have\n the right to pass it on as a open-source patch.  The rules are\n pretty simple: if you can certify the below:\n\n-        Developer's Certificate of Origin 1.1\n+        Developer's Certificate of Origin 1.2\n\n         By making a contribution to this project, I certify that:\n\n         (a) The contribution was created in whole or in part by me and I\n             have the right to submit it under the open source license\n-            indicated in the file; or\n+            indicated in the file (or, if no license is indicated in\n+            the file, the license in COPYING that accompanies the\n+            file); or\n\n         (b) The contribution is based upon previous work that, to the best\n             of my knowledge, is covered under an appropriate open source\n@@ -241,7 +243,8 @@ pretty simple: if you can certify the below:\n             work with modifications, whether created in whole or in part\n             by me, under the same open source license (unless I am\n             permitted to submit under a different license), as indicated\n-            in the file; or\n+            in the file (or, if no license is indicated in the file,\n+            the license in COPYING that accompanies the file); or\n\n         (c) The contribution was provided directly to me by some other\n             person who certified (a), (b) or (c) and I have not modified\n"},{"id":"227074","messageId":"1378619269-21991-1-git-send-email-rhansen@bbn.com","threadId":"34873","inReplyTo":"522C0B66.1080707@bbn.com","subject":"[PATCH v2] remote-bzr: reuse bzrlib transports when possible","fromName":"Richard Hansen","fromEmail":"rhansen@bbn.com","sentAt":"2013-09-08T05:47:49Z","receivedAt":"2013-09-08T05:47:49Z","isPatch":true,"sender":{"key":"rhansen@rhansen.org","avatar":null},"body":"Pass a list of open bzrlib.transport.Transport objects to each bzrlib\nfunction that might create a transport.  This enables bzrlib to reuse\nexisting transports when possible, avoiding multiple concurrent\nconnections to the same remote server.\n\nIf the remote server is accessed via ssh, this fixes a couple of\nproblems:\n  * If the user does not have keys loaded into an ssh agent, the user\n    may be prompted for a password multiple times.\n  * If the user is using OpenSSH and the ControlMaster setting is set\n    to auto, git-remote-bzr might hang.  This is because bzrlib closes\n    the multiple ssh sessions in an undefined order and might try to\n    close the master ssh session before the other sessions.  The\n    master ssh process will not exit until the other sessions have\n    exited, causing a deadlock.  (The ssh sessions are closed in an\n    undefined order because bzrlib relies on the Python garbage\n    collector to trigger ssh session termination.)\n\nSigned-off-by: Richard Hansen <rhansen@bbn.com>\n---\nChanges from v1:\n  * add Signed-off-by line\n\n contrib/remote-helpers/git-remote-bzr | 33 +++++++++++++++++++++------------\n 1 file changed, 21 insertions(+), 12 deletions(-)\n\ndiff --git a/contrib/remote-helpers/git-remote-bzr b/contrib/remote-helpers/git-remote-bzr\nindex c3a3cac..1e0044b 100755\n--- a/contrib/remote-helpers/git-remote-bzr\n+++ b/contrib/remote-helpers/git-remote-bzr\n@@ -674,7 +674,7 @@ def parse_reset(parser):\n     parsed_refs[ref] = mark_to_rev(from_mark)\n \n def do_export(parser):\n-    global parsed_refs, dirname\n+    global parsed_refs, dirname, transports\n \n     parser.next()\n \n@@ -699,7 +699,8 @@ def do_export(parser):\n             branch.generate_revision_history(revid, marks.get_tip(name))\n \n             if name in peers:\n-                peer = bzrlib.branch.Branch.open(peers[name])\n+                peer = bzrlib.branch.Branch.open(peers[name],\n+                                                 possible_transports=transports)\n                 try:\n                     peer.bzrdir.push_branch(branch, revision_id=revid)\n                 except bzrlib.errors.DivergedBranches:\n@@ -769,25 +770,28 @@ def do_list(parser):\n     print\n \n def clone(path, remote_branch):\n+    global transports\n     try:\n-        bdir = bzrlib.bzrdir.BzrDir.create(path)\n+        bdir = bzrlib.bzrdir.BzrDir.create(path, possible_transports=transports)\n     except bzrlib.errors.AlreadyControlDirError:\n-        bdir = bzrlib.bzrdir.BzrDir.open(path)\n+        bdir = bzrlib.bzrdir.BzrDir.open(path, possible_transports=transports)\n     repo = bdir.find_repository()\n     repo.fetch(remote_branch.repository)\n     return remote_branch.sprout(bdir, repository=repo)\n \n def get_remote_branch(name):\n-    global dirname, branches\n+    global dirname, branches, transports\n \n-    remote_branch = bzrlib.branch.Branch.open(branches[name])\n+    remote_branch = bzrlib.branch.Branch.open(branches[name],\n+                                              possible_transports=transports)\n     if isinstance(remote_branch.user_transport, bzrlib.transport.local.LocalTransport):\n         return remote_branch\n \n     branch_path = os.path.join(dirname, 'clone', name)\n \n     try:\n-        branch = bzrlib.branch.Branch.open(branch_path)\n+        branch = bzrlib.branch.Branch.open(branch_path,\n+                                           possible_transports=transports)\n     except bzrlib.errors.NotBranchError:\n         # clone\n         branch = clone(branch_path, remote_branch)\n@@ -821,17 +825,19 @@ def find_branches(repo):\n             yield name, branch.base\n \n def get_repo(url, alias):\n-    global dirname, peer, branches\n+    global dirname, peer, branches, transports\n \n     normal_url = bzrlib.urlutils.normalize_url(url)\n-    origin = bzrlib.bzrdir.BzrDir.open(url)\n+    origin = bzrlib.bzrdir.BzrDir.open(url, possible_transports=transports)\n     is_local = isinstance(origin.transport, bzrlib.transport.local.LocalTransport)\n \n     shared_path = os.path.join(gitdir, 'bzr')\n     try:\n-        shared_dir = bzrlib.bzrdir.BzrDir.open(shared_path)\n+        shared_dir = bzrlib.bzrdir.BzrDir.open(shared_path,\n+                                               possible_transports=transports)\n     except bzrlib.errors.NotBranchError:\n-        shared_dir = bzrlib.bzrdir.BzrDir.create(shared_path)\n+        shared_dir = bzrlib.bzrdir.BzrDir.create(shared_path,\n+                                                 possible_transports=transports)\n     try:\n         shared_repo = shared_dir.open_repository()\n     except bzrlib.errors.NoRepositoryPresent:\n@@ -844,7 +850,8 @@ def get_repo(url, alias):\n         else:\n             # check and remove old organization\n             try:\n-                bdir = bzrlib.bzrdir.BzrDir.open(clone_path)\n+                bdir = bzrlib.bzrdir.BzrDir.open(clone_path,\n+                                                 possible_transports=transports)\n                 bdir.destroy_repository()\n             except bzrlib.errors.NotBranchError:\n                 pass\n@@ -897,6 +904,7 @@ def main(args):\n     global files_cache\n     global is_tmp\n     global branches, peers\n+    global transports\n \n     alias = args[1]\n     url = args[2]\n@@ -909,6 +917,7 @@ def main(args):\n     marks = None\n     branches = {}\n     peers = {}\n+    transports = []\n \n     if alias[5:] == url:\n         is_tmp = True\n-- \n1.8.4\n"},{"id":"227280","messageId":"xmqqa9jl1u7j.fsf@gitster.dls.corp.google.com","threadId":"34873","inReplyTo":"1378619269-21991-1-git-send-email-rhansen@bbn.com","subject":"Re: [PATCH v2] remote-bzr: reuse bzrlib transports when possible","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2013-09-09T17:55:51Z","receivedAt":"2013-09-09T17:55:51Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Richard Hansen <rhansen@bbn.com> writes:\n\n>  def do_export(parser):\n> -    global parsed_refs, dirname\n> +    global parsed_refs, dirname, transports\n\nAs this has been acked by Felipe who knows the script the best, I'll\napply this directly to 'master'.\n\nThese additions of \"global transports\" however have trivial\ninteractions with fc/contrib-bzr-hg-fixes topic Felipe posted\nearlier, which I was planning to start merging down to 'next' and\nthen to 'master'.  Most funcions merely use the variable without\nassigning, so \"global transports\" can be removed, in line with the\nspirit of 641a2b5b (remote-helpers: cleanup more global variables,\n2013-08-28), except for the obvious initialisation in main(), I\nthink.  Please double check the conflict resolution result in a\ncommit on 'pu' with\n\n    git show 'origin/pu^{/Merge fc/contrib-bzr}'\n\nwhen I push the result out.\n\nThanks.\n"},{"id":"227374","messageId":"xmqqbo40wd3d.fsf@gitster.dls.corp.google.com","threadId":"34873","inReplyTo":"xmqqa9jl1u7j.fsf@gitster.dls.corp.google.com","subject":"Re: [PATCH v2] remote-bzr: reuse bzrlib transports when possible","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2013-09-10T22:01:26Z","receivedAt":"2013-09-10T22:01:26Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Junio C Hamano <gitster@pobox.com> writes:\n\n> Richard Hansen <rhansen@bbn.com> writes:\n>\n>>  def do_export(parser):\n>> -    global parsed_refs, dirname\n>> +    global parsed_refs, dirname, transports\n>\n> As this has been acked by Felipe who knows the script the best, I'll\n> apply this directly to 'master'.\n>\n> These additions of \"global transports\" however have trivial\n> interactions with fc/contrib-bzr-hg-fixes topic Felipe posted\n> earlier, which I was planning to start merging down to 'next' and\n> then to 'master'.  Most funcions merely use the variable without\n> assigning, so \"global transports\" can be removed, in line with the\n> spirit of 641a2b5b (remote-helpers: cleanup more global variables,\n> 2013-08-28), except for the obvious initialisation in main(), I\n> think.  Please double check the conflict resolution result in a\n> commit on 'pu' with\n>\n>     git show 'origin/pu^{/Merge fc/contrib-bzr}'\n>\n> when I push the result out.\n>\n> Thanks.\n\nPing?  I'd like to merge fc/contrib-bzr.hg-fixes topic to 'next'\n(and fast track it to 'master' after that), and it would be helpful\nto get an Ack on the conflict resolution I have.\n"},{"id":"227577","messageId":"52322C8C.4000501@bbn.com","threadId":"34873","inReplyTo":"xmqqbo40wd3d.fsf@gitster.dls.corp.google.com","subject":"Re: [PATCH v2] remote-bzr: reuse bzrlib transports when possible","fromName":"Richard Hansen","fromEmail":"rhansen@bbn.com","sentAt":"2013-09-12T21:05:16Z","receivedAt":"2013-09-12T21:05:16Z","isPatch":true,"sender":{"key":"rhansen@rhansen.org","avatar":null},"body":"On 2013-09-10 18:01, Junio C Hamano wrote:\n> Junio C Hamano <gitster@pobox.com> writes:\n> \n>> Richard Hansen <rhansen@bbn.com> writes:\n>>\n>>>  def do_export(parser):\n>>> -    global parsed_refs, dirname\n>>> +    global parsed_refs, dirname, transports\n>>\n>> As this has been acked by Felipe who knows the script the best, I'll\n>> apply this directly to 'master'.\n>>\n>> These additions of \"global transports\" however have trivial\n>> interactions with fc/contrib-bzr-hg-fixes topic Felipe posted\n>> earlier, which I was planning to start merging down to 'next' and\n>> then to 'master'.  Most funcions merely use the variable without\n>> assigning, so \"global transports\" can be removed, in line with the\n>> spirit of 641a2b5b (remote-helpers: cleanup more global variables,\n>> 2013-08-28), except for the obvious initialisation in main(), I\n>> think.  Please double check the conflict resolution result in a\n>> commit on 'pu' with\n>>\n>>     git show 'origin/pu^{/Merge fc/contrib-bzr}'\n>>\n>> when I push the result out.\n>>\n>> Thanks.\n> \n> Ping?  I'd like to merge fc/contrib-bzr.hg-fixes topic to 'next'\n> (and fast track it to 'master' after that), and it would be helpful\n> to get an Ack on the conflict resolution I have.\n\nSorry for the delay.\n\nLooks good to me, and the tests still pass.\n\n-Richard\n"},{"id":"227579","messageId":"xmqqeh8toidr.fsf@gitster.dls.corp.google.com","threadId":"34873","inReplyTo":"52322C8C.4000501@bbn.com","subject":"Re: [PATCH v2] remote-bzr: reuse bzrlib transports when possible","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2013-09-12T21:11:12Z","receivedAt":"2013-09-12T21:11:12Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Richard Hansen <rhansen@bbn.com> writes:\n\n>> Ping?  I'd like to merge fc/contrib-bzr.hg-fixes topic to 'next'\n>> (and fast track it to 'master' after that), and it would be helpful\n>> to get an Ack on the conflict resolution I have.\n>\n> Sorry for the delay.\n>\n> Looks good to me, and the tests still pass.\n\nThanks.\n"}]}