2009-12-14 40 views
4

我有一個很大的克隆來推送Google代碼,並且啓動推送後需要很長時間才能顯示驗證對話框,所以TortoiseHg推送數據首先驗證第二個驗證對象?爲什麼Mercurial在推送數據之前沒有進行身份驗證?

+0

可能不是,我想不出有這樣做的理由。 – 2009-12-14 08:43:30

+0

,但驗證過程確實需要很長時間,我可以看到我的上傳帶寬正在增加。它到底在做什麼! – Benny 2009-12-14 08:49:10

+2

請參閱http://mercurial.selenic.com/bts/issue1876 – tonfa 2009-12-14 11:58:52

回答

3

更新:該錯誤現在是fixed

編輯durin42:這不是完全固定。我們很接近,但在重寫默認情況下仍然有一些工作要做。我們試圖在切換時保持真正的保守態度。 (準確的狀態爲2012年1月,看發行說明的Mercurial進行進一步的更新。)


TL; DR:httplib的本質這裏被打破,並導致此問題汞柱。人們正在努力解決這個問題。

這是urllib和httplib工作方式的不幸副作用。 httplib/urllib不會搶先發送授權,這是不幸的。

好消息是,目前正在進行的工作來解決這個問題,壞消息是它看起來好像要完全重寫httplib才能使其合理行爲。特別是,httplib是半雙工的,並且無法窺探傳入數據包(以檢測早期響應),所以它必須首先發送請求,然後才能獲得摘要身份驗證提示(假設使用摘要身份驗證,是最好的選擇)。有些服務器實現甚至關閉套接字,一旦他們發出401需要授權,它實際上通過引發破損的管道錯誤完全破壞httplib。我提交了一個針對該問題的解決方法,該解決方案在1.4版中,但它只是一個用戶煩惱修復程序,而不是實際的性能解決方案。

+0

我知道這個評論很舊,但..現在在Mercurial中完成了httplib重寫嗎? – GuiSim 2011-09-20 20:54:41

+3

對於任何人在這個評論中磕磕絆絆,似乎重寫是完整的http://mercurial.selenic.com/bts/issue1876 – GuiSim 2011-09-21 12:47:46

0

我希望它會從服務器收集變更集列表,以便知道哪些本地變更集不會出現在服務器上,因此需要轉移。基本上相當於hg outgoing。只有確定了推送的變更集之後,它才需要寫入任何內容(如果沒有差異,可能不會寫入),以便在實際需要之前不會進行身份驗證。

相關問題