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
94
95
96
97
98
|
# File 'lib/xccache/spm/desc/desc.rb', line 94
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
42
43
44
|
# File 'lib/xccache/spm/desc/desc.rb', line 42
def binary_targets
@binary_targets ||= targets.select(&:binary?)
end
|
#dependencies ⇒ Object
26
27
28
|
# File 'lib/xccache/spm/desc/desc.rb', line 26
def dependencies
@dependencies ||= fetch("dependencies", Dependency)
end
|
#get_target(name) ⇒ Object
50
51
52
|
# File 'lib/xccache/spm/desc/desc.rb', line 50
def get_target(name)
targets.find { |t| t.name == name }
end
|
#git ⇒ Object
90
91
92
|
# File 'lib/xccache/spm/desc/desc.rb', line 90
def git
@git ||= Git.new(src_dir) if Dir.git?(src_dir)
end
|
#has_target?(name) ⇒ Boolean
46
47
48
|
# File 'lib/xccache/spm/desc/desc.rb', line 46
def has_target?(name)
targets.any? { |t| t.name == name }
end
|
#local? ⇒ Boolean
60
61
62
63
|
# File 'lib/xccache/spm/desc/desc.rb', line 60
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
|
22
23
24
|
# File 'lib/xccache/spm/desc/desc.rb', line 22
def platforms
@platforms ||= raw.fetch("platforms", []).to_h { |h| [h["platformName"].to_sym, h["version"]] }
end
|
#products ⇒ Object
34
35
36
|
# File 'lib/xccache/spm/desc/desc.rb', line 34
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
38
39
40
|
# File 'lib/xccache/spm/desc/desc.rb', line 38
def targets
@targets ||= fetch("targets", Target).map(&:downcast)
end
|
#targets_of_products(name) ⇒ Object
54
55
56
57
58
|
# File 'lib/xccache/spm/desc/desc.rb', line 54
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
|
# File 'lib/xccache/spm/desc/desc.rb', line 65
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
|
30
31
32
|
# File 'lib/xccache/spm/desc/desc.rb', line 30
def uniform_dependencies
dependencies.filter_map(&:pkg_desc)
end
|