Вы можете использовать PySVN и зарегистрировать обратный вызов для каждого процесса "события". PySVN также может опрашивать "отменить" обратный вызов. Первый обратный вызов может запустить таймер, и, если время таймера истечет, вы можете сказать «отменить» обратный вызов для возврата False, тем самым отменяя извлечение.
#!/usr/bin/python
url = "svn://server/path/to/repo"
path = "/path/to/local/wc"
import pysvn
import threading
# Set to something reasonable
SVN_TIMEOUT = 1000
svn_timer = None
stop_svn = False
def timer_expired():
# Too long since last SVN event, so do something sensible...
print "SVN took too long!"
global stop_svn
stop_svn = True
def svn_cancel():
return stop_svn
def notify( event_dict ):
global svn_timer
if svn_timer:
svn_timer.cancel()
svn_timer = threading.Timer(SVN_TIMEOUT, timer_expired)
svn_timer.start()
svn_client = pysvn.Client()
svn_client.callback_notify = notify
svn_client.callback_cancel = svn_cancel
svn_timer = threading.Timer(SVN_TIMEOUT, timer_expired)
svn_timer.start()
revision = svn_client.checkout(url,path)
if svn_timer:
svn_timer.cancel()