如何判断subversion工作目录是否被svn锁定?

2024-10-01 13:39:53 发布

您现在位置:Python中文网/ 问答频道 /正文

一个python脚本正在运行两个并行的python进程(通过os.fork操作系统())每个存储库最终都会尝试将subversion存储库叶签出到同一个工作拷贝目录中。在

在子进程中(通过python子进程模块)运行“svnco…”命令之前,父python代码检查工作拷贝目录是否已经存在。在

  if os.path.isdir(checkout_dir):
     # working copy dir already exists
     return checkout_dir

因此,如果这样做了,就不应该运行任何“svn co”,而是立即从父函数返回。在

不过,发生了一些冲突,其中一个python进程在“svn co..”上失败,并出现以下错误。在

^{pr2}$

所以第一个问题是为什么工作拷贝目录存在性检查不起作用,第二个问题是有没有办法找出一个工作拷贝目录被svn和loop锁定,直到它被解锁?在

谢谢。在


Tags: 模块命令目录脚本进程osdirsvn
2条回答

这听起来像是一种潜在的竞争状况,可能会发生如下情况:

  1. 处理A检查目录是否存在(它还没有)。在
  2. 进程B检查目录是否存在(它还没有)。在
  3. 进程A调用svn,它创建目录。在
  4. 进程B调用svn,但随后失败。在

避免这种情况的一个简单方法是让每个进程尝试创建目录,而不是检查它是否存在。如果另一个进程已经创建了目录,那么另一个进程就可以在各种各样的平台和文件系统下得到一个定义良好的错误代码。例如,这是在许多NFS实现上进行同步的唯一可靠方法之一。幸运的是,svn不会在意工作目录是否已经存在。在

Python代码如下所示:

import os, errno

# ...

try:
  os.mkdir(dirName)
except OSError, e:
  if e.errno != errno.EEXIST: raise # some other error
  print 'Directory already exists.'
else:
  print 'Successfully created new directory.'

这种技术易于实现,非常可靠,在各种情况下都很有用。在

在这个目录中,应该有一个名为'.svn'的目录。其中,名为“locked”的文件表示目录已锁定。在

相关问题 更多 >