5

pysvnで、ファイルがバージョン管理下にあるかどうかをテストするにはどうすればよいですか

4

1 に答える 1

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。例えば

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)
于 2012-05-28T10:01:01.550 に答える