0

サンプルコードは次のとおりです。

import pysvn
svnClient = pysvn.Client()
entry = svnClient.info('C:\\MyLibrary\\')
entry.url
headrev = svnClient.info(entry.url).revision.number

最後の行でエラーが発生します。entry.url は正しいようです: その値は

u'file:///G:/MyRepository/branches/branch_3.0'

最後の行を実行すると、

Traceback (most recent call last): File "<stdin>", line 1, in <module>   pysvn._pysvn_2_7.ClientError: 'file:\G:\MyRepository\branches' is not a working copy 'C:\Python27\file:\G:\MyRepository\branches' does not exist

WindowsでPython 2.7を使用しています(エラーメッセージから明らかです:-)。

些細なことである必要がありますが、それを機能させる方法がわかりません。何か案は?

ありがとう。

4

2 に答える 2

0

あなたが抱えている問題は、URLではなく、ローカル パスを期待するfile:///G:/MyRepository/branches/branch_3.0関数に渡すURL があることです。pysvn.Client.info関数が URL をファイル名として処理しようとすると、現在の作業ディレクトリを検索することになります (URL がドライブ文字または絶対パスを示す「/」文字で始まらないため)。当然のことながら、 で何も見つかりませんC:\Python27\file:\G:\MyRepository\branches

これを修正するには、URL を正しいファイル名に変換する必要があります。最初に、URL のプロトコル (つまり、file://.

import pysvn
import urllib # note, the url2pathname function is in urllib.request in Python 3

svnClient = pysvn.Client()
entry = svnClient.info('C:\\MyLibrary\\')

url = entry.url
assert(url.startswith("file://")     # basic error checking
pathPart = url[7:]                   # chop off "file://" prefix
path = urllib.url2pathname(pathPart) # convert path to something OS appropriate

headrev = svnClient.info(path).revision.number

これはやや壊れやすいことに注意してください。メソッドfile://への最初の呼び出しから URL以外の何かが返された場合は、 が発生しますが、これは必要なものではない可能性があります。あなたが何を達成しようとしているのか、またはそれを行うためのより良い方法があるかどうかを知るには、私は Subversion について十分に知りません。たとえば、ある種のリクエストの URL を受け入れるように見えるメソッドを調べる価値があるかもしれません。infoAssertionErrorpysvn.Client.info2

于 2012-08-02T06:30:15.273 に答える
0

string メソッドを使用して、entry.url から file:///C:/ をフィルタリングし、Python インストール ディレクトリを基準にして書き込みます。

于 2012-08-01T13:05:07.443 に答える