[mercurial][cygwin] mercurialで DIGEST認証のリポジトリにアクセスすると "abort: Error"

Cygwinmercurial で DIGEST認証のリポジトリにアクセスすすると、ユーザーIDとパスワードを入力後に "abort: Error" が発生してしまう。
似たような報告が http://www.nabble.com/hg-1.0-exits-with-abort:-Error-td19021833.html にある。



■解決
上記のページにも記述があるが、a/lib/python2.5/liburl2.py の下記引用部分 f.close() で処理が落ちている

    if os.path.exists("/dev/urandom"):
        f = open("/dev/urandom")
        s = f.read(n)
        f.close()
        return s
    else:
        L = [chr(random.randrange(0, 256)) for i in range(n)]
        return "".join(L)

乱数を取得するために、/dev/urandom にアクセスしているのだが、どうやらCygwinでは(?) read した後の close が上手くいかないようだ。
試しに、f.close() の部分をコメントアウトすると、正常に動作する。
流石に close しないのはどうかと思うので、/dev/urandom をサポートしていないケースの else節を有効にするため、/dev/urandom の存在確認部分を適当なパスに変えて常に失敗するようにした。
※偽になる条件なら何でも良いんだけど、後で見たときに思い出しやすいように変なパス名を設定してみた。

    if os.path.exists("/dev/urandom--It-is-not-possible-to-use-this-by-Cygwin"):
        f = open("/dev/urandom")
        s = f.read(n)
        f.close()
        return s
    else:
        L = [chr(random.randrange(0, 256)) for i in range(n)]
        return "".join(L)