2

svn の一連のファイルについて、最後に変更された作成者名を取得しようとしています。

私は自分のマシンでコードをチェックアウトしました。

私のスクリプトでは、すべてのファイルの絶対パスがリストで読み取られます。次のコードを使用して、各ファイルの最終編集者を抽出しようとしています。

for file in all_files:
    dir = os.path.dirname(file)
    entry = client.info(dir)
    print "Folder:"+dir+" And author:"+entry['commit_author']

しかし、次のエラーが表示されます:

File "test_main.py", line 110, in main
entry = client.info(dir)
pysvn._pysvn.ClientError: '.' is not a working copy

ファイル名全体を引数として指定しようとしましたclient.info()が、同じ結果が得られました。

これは非常に単純な問題かもしれませんが、私はPythonの初心者なので、理解できません。

編集:

フォルダーパスを次のようにハードコーディングしてみました:

  temp = "/home/gajananh/scripts/test/repo/test_proj/src";
  entry = client.info(temp)
  print "Folder:"+dir+" And author:"+entry['commit_author']

そしてそれは動作します!

最初のスクリプトdirでは、変数をループで出力しようとすると、正しいパスが出力されます。svn info出力のためにシェルでコマンドを実行しようとすると、適切な結果が得られます。

この謎が解りません。助けてください。

4

2 に答える 2

0

for file in all_files:次のような相対パスを持つファイルを返すと思います./file.txt

を実行するos.path.dirname(file)と、返されるパスは「.」だけになります。(ドット) svn への引数として与えられます。

関数を呼び出すときに絶対パスを使用してみてください。

于 2012-12-17T17:26:58.323 に答える
0

info2 を使用する必要があります。

path="http://svn/svn/foo/trunk/baz.c"
name_info_list = client.info2(path)
assert len(name_info_list) == 1

name, info = name_info_list[0]
for k, v in info.items():
    print "%s: %s" % (k, v)

http://pysvn.tigris.org/docs/pysvn_prog_ref.html#pysvn_client_info2

于 2013-03-19T22:39:45.543 に答える