我正在尝试创建一个perforce自定义类型 devtrack 但是我陷入了预取阶段。在那里我试图使用我的实例类方法来找到正确的提供者
def self.prefetch(resources)
instances.each do |prov|
if resource = resources[prov.name]
resource.provider = prov
end
end
end
在实例类方法中,我尝试使用命令
查找当前主机上的所有客户端p4 workspaces -u
使用以下代码
def self.get_list_of_workspaces_on_host(host)
ws_strs = p4(['workspaces', '-u', <USERNAME>]).split("\n")
ws_strs.select { |str| str.include?(host) }.map{ |ws| ws.split[1] }
end
def self.get_workspace_properties(ws)
md = /^(\w*)_.*_(main|\d{2})_managed$/.match(ws)
ws_props = {}
ws_props[:ensure] = :present
...
ws_props
end
def self.instances
host = `hostname`.strip
get_list_of_workspaces_on_host(host).collect do |ws|
ws_props = get_workspace_properties(ws)
new(ws_props)
end
end
并且p4命令定义为
has_command(:p4, "/usr/bin/p4") do
environment :P4PORT => <PERFORCE SERVER>, :P4USER => <USERNAME>
end
我遇到的问题是,要使任何p4命令工作,我需要访问服务器,这在类型
中指定devtrack { '36': source => '<PERFORCE SERVER>'}
但如何从预取中访问此值?问题在于预取是一种类方法,因此无法访问 @properties_hash 或资源哈希。有办法解决这个问题吗?我设计这个完全错了吗?