检查目录是否存在时出现问题。
我正在编写一个小型Ruby应用程序,它从存储库执行svn checkout,然后查看工作副本以查看某个目录是否存在。
我有一个执行svn操作的SVNClient类,使用open3.popen3
调用命令行客户端(我没有找到任何ruby gem来使用svn):
class SVNClient
require 'open3'
def initialize(repoUrl, wcPath, username, password)
@repoUrl = repoUrl
@wcPath = wcPath
@username = username
@password = password
end
def checkout
cmd = "svn co %s %s --non-interactive --trust-server-cert --username %s --password %s" % [@repoUrl, @wcPath, @username, @password]
stdin, stdout, stderr = Open3.popen3(cmd)
end
def createDirIfNotExists(dirname)
@subdirPath = @wcPath + "/" + dirname
a = File.directory? @subdirPath
b = File.exist? @subdirPath
c = Dir.exist? @subdirPath
Rails.logger.debug("#{a}")
Rails.logger.debug("#{b}")
Rails.logger.debug("#{c}")
if !Dir.exist? @subdirPath
Rails.logger.debug("#{@subdirPath} does not exist")
Dir.mkdir @subdirPath
end
end
end
这个类的用法如下:
wcDir = "/the/workingcopy/dir"
logger.debug("#{wcDir}")
urlToCkeckout = "http://somerepo/path
client = SVNClient.new(urlToCkeckout, wcDir, username, password)
client.checkout
client.createDirIfNotExists("subdir")
现在,我正在做一些测试,我确信当我结帐时,"subdir"
目录位于工作副本目录中。但是在createDirIfNotExists
方法中,Dir.exist?
调用返回false(以及File.directory?
和File.exist?
),我得到" ...不存在&# 34;记录消息。
我错过了一些明显的东西吗?我已经检查了目录的权限,看起来很不错。
顺便说一句,代码在Rails应用程序中运行。
答案 0 :(得分:1)
解决方案是在我的 Dmat <- Dmat / 10^6
方法中使用open3.popen3
的块版本,以确保命令在检查目录存在之前结束:
checkout
现在,在结帐结束后调用 Open3.popen3(cmd) do |stdin, stdout, stderr, wait_thr|
pid = wait_thr.pid # pid of the started process.
Rails.logger.debug("#{pid}")
end
,因此正确找到了目录。