测试pysvn中的版本控制下的文件(python subversion)

时间:2012-05-16 15:56:56

标签: python svn pysvn

pysvn中,如何测试文件是否受版本控制?

1 个答案:

答案 0 :(得分:8)

使用client.status()并检查返回的状态对象的text_status属性。例如:

>>> import pysvn
>>> c = pysvn.Client()
>>> out = c.status("versioned.cpp")[0]  # .status() returns a list
>>> out.text_status
<wc_status_kind.normal>

这表明该文件已经过版本化和未修改。

>>> c.status("added.cpp")[0].text_status  # added file
<wc_status_kind.added>
>>> c.status("unversioned.cpp")[0].text_status  # unversioned file
<wc_status_kind.unversioned>

您可以使用dir (pysvn.wc_status_kind)

探索其他可能的状态

因此,您可以将其包含在以下内容中:

def under_version_control(filename):
    "returns true if file is unversioned"
    c = pysvn.Client()
    s = c.status(filename)[0].text_status
    return s not in (
        pysvn.wc_status_kind.added, 
        pysvn.wc_status_kind.unversioned,
        pysvn.wc_status_kind.ignored)

如果您还希望处理svn工作目录之外的文件,则需要捕获并处理ClientError。 E.g。

def under_version_control(filename):
    "returns true if file is unversioned"
    c = pysvn.Client()
    try:
        s = c.status(filename)[0].text_status
    catch pysvn.ClientError:
        return False
    else:
        return s not in (
            pysvn.wc_status_kind.added, 
            pysvn.wc_status_kind.unversioned,
            pysvn.wc_status_kind.ignored)