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在 shell 上运行命令以获取输出时,我得到了正确的结果。

我无法理解这个奥秘。请帮忙。

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 回答