我有一个 python 脚本可以从存储库列表中下载源代码,其中一些很大。
有时,svn 在结帐过程中挂起。有没有办法监视 svn 进程,所以我知道它是否挂起?
我有一个 python 脚本可以从存储库列表中下载源代码,其中一些很大。
有时,svn 在结帐过程中挂起。有没有办法监视 svn 进程,所以我知道它是否挂起?
您可以使用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()
您可以继续轮询 svn 进程的标准输出,并测试您获得新文件的频率。如果您在 x 秒内没有获得新文件,请退回该过程。
在主脚本中使用子进程启动 svn,并在等待进程完成时轮询 stdout。