2012-05-16 66 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'块中。将以示例更新。 –