2012-05-16 114 views

回答

7

使用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) 
+0

'文件「」,第1行,在 pysvn._pysvn_2_7.ClientError:'...'不是工作副本' –

+0

@MattHickford與標準svn命令一樣,它的意思是用於內部文件一個工作副本。如果您還想處理工作副本以外的文件,請將'.status'調用放在'try/except'塊中。將以示例更新。 –