Class: Pindo::TaskSystem::TaskResources::DirectoryBasedResourceType
- Inherits:
-
ResourceType
- Object
- ResourceType
- Pindo::TaskSystem::TaskResources::DirectoryBasedResourceType
- Defined in:
- lib/pindo/module/task/task_resources/types/directory_based_resource.rb
Overview
基于目录的资源类型
特性:
-
相同目录的资源互斥(不能并发)
-
不同目录的资源可以并行
适用资源:
-
Xcode(相同项目目录互斥)
-
Git(相同仓库目录互斥)
-
Unity(相同项目目录互斥)
-
Gradle(相同项目目录互斥)
Instance Attribute Summary
Attributes inherited from ResourceType
Instance Method Summary collapse
-
#conflicts?(instance1, instance2) ⇒ Boolean
检查两个资源实例是否冲突 规则: 1.
-
#initialize(name) ⇒ DirectoryBasedResourceType
constructor
A new instance of DirectoryBasedResourceType.
Methods inherited from ResourceType
#directory_based?, #global_exclusive?, #global_shared?, #to_s
Constructor Details
#initialize(name) ⇒ DirectoryBasedResourceType
Returns a new instance of DirectoryBasedResourceType.
19 20 21 |
# File 'lib/pindo/module/task/task_resources/types/directory_based_resource.rb', line 19 def initialize(name) super(name, :directory_based) end |
Instance Method Details
#conflicts?(instance1, instance2) ⇒ Boolean
检查两个资源实例是否冲突规则:
-
如果任一资源未指定目录,视为全局冲突(为了安全起见,防止漏锁)
-
相同目录冲突
-
不同目录不冲突
32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/pindo/module/task/task_resources/types/directory_based_resource.rb', line 32 def conflicts?(instance1, instance2) dir1 = instance1.context[:directory] dir2 = instance2.context[:directory] # 修改:如果任一资源没有指定目录,视为冲突(Fail-safe 策略) # 这确保了如果某个任务忘记或者无法指定目录,它会独占该类型资源,而不是并发执行 return true if dir1.nil? || dir2.nil? # 规范化路径后比较 normalize_path(dir1) == normalize_path(dir2) end |