Class: XCCache::SPM::Package::Description
Constant Summary
Constants inherited
from BaseObject
BaseObject::ATTRS
Instance Attribute Summary
#path, #raw
Class Method Summary
collapse
Instance Method Summary
collapse
Methods included from Cacheable
#__cacheable_module_name, #cacheable, included
Methods inherited from BaseObject
#cast_to, #display_name, #fetch, #full_name, #inspect, #name, #pkg_desc_of, #pkg_name, #pkg_slug, #src_dir, #to_s
#config
#load, #save
#[], #[]=, #initialize, #load, #merge!, #reload, #save
Class Method Details
.combine_descs(descs) ⇒ Object
90
91
92
93
94
|
# File 'lib/xccache/spm/desc/desc.rb', line 90
def self.combine_descs(descs)
descs_by_name = descs.flat_map { |d| [[d.name, d], [d.pkg_slug, d]] }.to_h
descs.each { |d| d.retrieve_pkg_desc = proc { |name| descs_by_name[name] } }
descs_by_name
end
|
9
10
11
12
|
# File 'lib/xccache/spm/desc/desc.rb', line 9
def self.descs_in_metadata_dir(dir)
descs = dir.glob("*.json").map { |p| Description.new(p) }
[descs, combine_descs(descs)]
end
|
Instance Method Details
#binary_targets ⇒ Object
38
39
40
|
# File 'lib/xccache/spm/desc/desc.rb', line 38
def binary_targets
@binary_targets ||= targets.select(&:binary?)
end
|
#dependencies ⇒ Object
22
23
24
|
# File 'lib/xccache/spm/desc/desc.rb', line 22
def dependencies
@dependencies ||= fetch("dependencies", Dependency)
end
|
#get_target(name) ⇒ Object
46
47
48
|
# File 'lib/xccache/spm/desc/desc.rb', line 46
def get_target(name)
targets.find { |t| t.name == name }
end
|
#git ⇒ Object
86
87
88
|
# File 'lib/xccache/spm/desc/desc.rb', line 86
def git
@git ||= Git.new(src_dir) if Dir.git?(src_dir)
end
|
#has_target?(name) ⇒ Boolean
42
43
44
|
# File 'lib/xccache/spm/desc/desc.rb', line 42
def has_target?(name)
targets.any? { |t| t.name == name }
end
|
#local? ⇒ Boolean
56
57
58
59
|
# File 'lib/xccache/spm/desc/desc.rb', line 56
def local?
!src_dir.to_s.start_with?((config.spm_build_dir / "checkouts").to_s)
end
|
18
19
20
|
# File 'lib/xccache/spm/desc/desc.rb', line 18
def metadata
raw["_metadata"] ||= {}
end
|
#products ⇒ Object
30
31
32
|
# File 'lib/xccache/spm/desc/desc.rb', line 30
def products
@products ||= fetch("products", Product)
end
|
#root ⇒ Object
14
15
16
|
# File 'lib/xccache/spm/desc/desc.rb', line 14
def root
self
end
|
#targets ⇒ Object
34
35
36
|
# File 'lib/xccache/spm/desc/desc.rb', line 34
def targets
@targets ||= fetch("targets", Target).map(&:downcast)
end
|
#targets_of_products(name) ⇒ Object
50
51
52
53
54
|
# File 'lib/xccache/spm/desc/desc.rb', line 50
def targets_of_products(name)
matched_products = products.select { |p| p.name == name }
matched_products
.flat_map { |p| targets.select { |t| p.target_names.include?(t.name) } }
end
|
#traverse ⇒ Object
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
|
# File 'lib/xccache/spm/desc/desc.rb', line 61
def traverse
nodes, edges, parents = [], [], {}
to_visit = targets.dup
visited = Set.new
until to_visit.empty?
cur = to_visit.pop
next if visited.include?(cur)
visited << cur
nodes << cur
yield cur if block_given?
next if cur.macro?
cur.direct_dependency_targets.each do |t|
to_visit << t
edges << [cur, t]
parents[t] ||= []
parents[t] << cur
end
end
[nodes, edges, parents]
end
|
26
27
28
|
# File 'lib/xccache/spm/desc/desc.rb', line 26
def uniform_dependencies
dependencies.filter_map(&:pkg_desc)
end
|