1

これが私のコードです

#!/usr/bin/python
# -*- coding:utf-8 -*-
import sys
import pysvn
def main():
    client = pysvn.Client()
    client.callback_get_login = lambda realm, username, may_save:(True, "myusername", "mypasswd", True)
    print client.cat('http://svn.mydomain.com/file1.py')
    print client.cat('http://svn.mydomain.com/file2.py')
    return 0

if __name__ == "__main__":
    sys.exit(main())

pysvnが2つのHTTPセッションを確立したことに気付きましたが、各セッションで、最初に「Authorization」ヘッダーなしでOPTIONメソッドを試し、サーバー応答401の後、「Authorization」ヘッダーを送信しました。

2つのURLは同じドメインにあるので、pysvnがサブシーケンスセッションでユーザー名/ passwdを直接送信しないのはなぜですか?

401が多すぎると、svnサーバーが応答しなくなったのではないかと思われるため、この質問があります。また、eclipseのsvnkitは正常に機能し、「Authorization」ヘッダーを自動的に送信します。

編集:アレックスマルテッリに:

Clientを呼び出すときに、書き込み可能であることがわかっている構成ディレクトリに明示的なパスを渡してみてください。

試したが、うまくいかなかった

サービングが2つのファイルに対して異なるレルムを送信している可能性があります

2つの応答の領域は同じです。

pysvnがlibsvnから「svn_client_cat2()」を呼び出しているように見えます。この関数は、同じURLと同じレルムに対しても、呼び出しの間にユーザー名/passwdをキャッシュしません。したがって、この問題に対してこれ以上できることはないと思います。libsvnに新しいインターフェイスを追加し、将来のアクションのためにusername / passwdをキャッシュすると、タスクに時間がかかりすぎます。とにかくありがとう!

4

1 に答える 1

1

(バグ仮説番号 1) 構成ディレクトリが書き込み可能ではない可能性があるようです - を呼び出すときに、書き込み可能であることがわかっている構成ディレクトリへの明示的なパスを渡してみてくださいClient

それでも問題が解決しない場合 (バグ仮説 2)、サービングが 2 つのファイルに対して異なるレルムを送信している可能性があります (同じドメインであるという事実は、サーバーがそれを実行するのを止めません。サーバー側の構成の選択または構成エラー...しかし、「401が多すぎる」ために失敗したサーバーには、とにかく独特の何かがあるため、すでに疑わしいです;-)。

于 2010-07-24T15:34:11.167 に答える