为什么Mercurial在推送数据之前没有进行身份验证?
问题描述:
我有一个很大的克隆来推送Google代码,并且启动推送后需要很长时间才能显示验证对话框,所以TortoiseHg推送数据首先验证第二个验证对象?为什么Mercurial在推送数据之前没有进行身份验证?
答
更新:该错误现在是fixed。
编辑durin42:这不是完全固定。我们很接近,但在重写默认情况下仍然有一些工作要做。我们试图在切换时保持真正的保守态度。 (准确的状态为2012年1月,看发行说明的Mercurial进行进一步的更新。)
TL; DR:httplib的本质这里被打破,并导致此问题汞柱。人们正在努力解决这个问题。
这是urllib和httplib工作方式的不幸副作用。 httplib/urllib不会抢先发送授权,这是不幸的。
好消息是,目前正在进行的工作来解决这个问题,坏消息是它看起来好像要完全重写httplib才能使其合理行为。特别是,httplib是半双工的,并且无法窥探传入数据包(以检测早期响应),所以它必须首先发送请求,然后才能获得摘要身份验证提示(假设使用摘要身份验证,是最好的选择)。有些服务器实现甚至关闭套接字,一旦他们发出401需要授权,它实际上通过引发破损的管道错误完全破坏httplib。我提交了一个针对该问题的解决方法,该解决方案在1.4版中,但它只是一个用户烦恼修复程序,而不是实际的性能解决方案。
答
我希望它会从服务器收集变更集列表,以便知道哪些本地变更集不会出现在服务器上,因此需要转移。基本上相当于hg outgoing
。只有确定了推送的变更集之后,它才需要写入任何内容(如果没有差异,可能不会写入),以便在实际需要之前不会进行身份验证。
可能不是,我想不出有这样做的理由。 – 2009-12-14 08:43:30
,但验证过程确实需要很长时间,我可以看到我的上传带宽正在增加。它到底在做什么! – Benny 2009-12-14 08:49:10
请参阅http://mercurial.selenic.com/bts/issue1876 – tonfa 2009-12-14 11:58:52