Как в pysvn проверить, находится ли файл под контролем версий?
Проверьте, находится ли файл под контролем версий в pysvn (подрывная деятельность python)
comment
Здесь есть два случая. Файла нет ни в одной рабочей копии, или файл есть в рабочей копии, но не добавлен.
- person Colonel Panic   schedule 28.05.2012
Ответы (1)
Используйте 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)
person
Shawn Chin
schedule
28.05.2012
@MattHickford Как и стандартная команда svn, она предназначена для использования с файлами, находящимися в рабочей копии. Если вы хотите также обрабатывать файлы вне рабочих копий, поместите вызов
.status
в блок try/except
. Будет обновляться с примером.
- person Shawn Chin; 29.05.2012