代码之家  ›  专栏  ›  技术社区  ›  Benny

为什么Mercurial在推送数据之前不进行身份验证?

  •  4
  • Benny  · 技术社区  · 15 年前

    我有一个大尺寸的克隆来推送到Google代码,在启动推送之后,验证对话框需要很长时间才能显示出来,所以TortoiseHg推送数据是第一次验证还是第二次验证?

    2 回复  |  直到 6 年前
        1
  •  3
  •   Vadim Kotov First Zero    6 年前

    更新 :bug现在 fixed .

    Duri42编辑 不是这样 完全地 固定的。我们已经接近尾声了,但在默认情况下,重写打开之前,我还有一些工作要做。我们正努力在转换过程中保持保守。(截至2012年1月的准确状态,请查看Mercurial的发行说明以获取进一步更新。)


    tl;dr:httplib在这里基本上被破坏了,这导致了这个问题hg。人们正在努力解决这个问题。

    这是Urllib和httplib工作方式的一个不幸的副作用。httplib/urllib不会预先发送授权,这很不幸。

    好消息是有正在进行的工作来解决这个问题,坏消息是看起来需要彻底重写httplib才能使其达到合理的行为。特别是,httplib是半双工的,无法查看传入的数据包(以检测早期响应),因此它必须先发送请求,然后才能获得摘要式身份验证提示(假设使用摘要式身份验证,这是最佳选项)。一些服务器实现甚至在发送401授权后关闭套接字,这实际上通过引发中断的管道错误完全破坏了httplib。我为hg 1.4中的问题提交了一个解决方案,但它只是一个用户烦恼的解决方案,而不是实际的性能解决方案。

        2
  •  0
  •   gavinb    15 年前

    我希望它将从服务器收集变更集列表,这样它就知道哪些本地变更集不会出现在服务器上,因此需要传输。基本上相当于 hg outgoing . 只有在确定了要推送的变更集之后,它才需要编写任何内容(如果没有差异,则可能不需要编写任何内容),因此在实际需要之前,它不会进行身份验证。