Skip to content

Commit 6a8c9bf

Browse files
committed
fixup: cleanup lock command a little
1 parent abd6f67 commit 6a8c9bf

File tree

1 file changed

+26
-29
lines changed

1 file changed

+26
-29
lines changed

src/commands/lock.cr

Lines changed: 26 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -17,43 +17,29 @@ module Shards
1717
end
1818

1919
Shards.logger.info do
20-
total = pkgs.reduce(0) { |acc, (name, pkg)| acc + pkg.versions.size }
20+
total = pkgs.reduce(0) { |acc, (_, pkg)| acc + pkg.versions.size }
2121
"Collected #{pkgs.size} dependencies (total: #{total} specs, duration: #{spent})"
2222
end
2323

24-
sat = Shards::SAT.new
25-
2624
Shards.logger.info { "Building SAT clauses..." }
2725

2826
spent = Time.measure do
29-
negation = "~#{spec.name}"
30-
3127
# the package to install dependencies for:
3228
sat.add_clause [spec.name]
3329

3430
# main dependencies:
35-
spec.dependencies.each do |d|
36-
clause = [negation]
37-
Versions
38-
.resolve(pkgs[d.name].versions.keys, {d.version})
39-
.each { |v| clause << "#{d.name}:#{v}" }
40-
sat.add_clause(clause)
41-
end
31+
negation = "~#{spec.name}"
32+
add_dependencies(negation, spec.dependencies)
33+
add_dependencies(negation, spec.development_dependencies) unless Shards.production?
4234

4335
# nested dependencies:
4436
pkgs.each do |name, pkg|
4537
pkg.versions.each do |version, s|
46-
s.dependencies.each do |d|
47-
clause = ["~#{name}:#{version}"]
48-
Versions
49-
.resolve(pkgs[d.name].versions.keys, {d.version})
50-
.map { |v| clause << "#{d.name}:#{v}" }
51-
sat.add_clause(clause) unless clause.size == 1
52-
end
38+
add_dependencies("~#{name}:#{version}", s.dependencies)
5339
end
5440
end
5541

56-
# version conflicts (only 1 version per package)
42+
# version conflicts (we want only 1 version per package):
5743
pkgs.each do |name, pkg|
5844
pkg.versions.keys.each_combination(2) do |(a, b)|
5945
sat.add_clause ["~#{name}:#{a}", "~#{name}:#{b}"]
@@ -62,9 +48,9 @@ module Shards
6248
end
6349
Shards.logger.info { "Built #{sat.@clauses.size} clauses (duration: #{spent})" }
6450

65-
sat.@clauses.each do |clause|
66-
STDERR.puts sat.clause_to_s(clause)
67-
end
51+
# [email protected] do |clause|
52+
# STDERR.puts sat.clause_to_s(clause)
53+
# end
6854

6955
Shards.logger.info { "Solving dependencies..." }
7056
count = 0
@@ -73,10 +59,8 @@ module Shards
7359
sat.solve do |solution|
7460
# p solution
7561
count += 1
76-
print "found: #{count} solutions\r" if count == 100
7762
end
7863
end
79-
print "found: #{count} solutions\n"
8064

8165
if count == 0
8266
Shards.logger.error { "Failed to find a solution (duration: #{spent})" }
@@ -85,15 +69,29 @@ module Shards
8569
end
8670
end
8771

88-
protected def sat
72+
private def sat
8973
@sat ||= SAT.new
9074
end
9175

92-
protected def pkgs
76+
private def add_dependencies(negation, dependencies)
77+
dependencies.each do |d|
78+
versions = Versions.resolve(pkgs[d.name].versions.keys, {d.version})
79+
80+
# FIXME: looks like we couldn't resolve a constraint here; maybe it's
81+
# related to a git refs, or something?
82+
next if versions.empty?
83+
84+
clause = [negation]
85+
versions.each { |v| clause << "#{d.name}:#{v}" }
86+
sat.add_clause(clause)
87+
end
88+
end
89+
90+
private def pkgs
9391
@pkgs ||= {} of String => Pkg
9492
end
9593

96-
protected def dig(dependencies, resolve = false)
94+
private def dig(dependencies, resolve = false)
9795
dependencies.each do |dependency|
9896
next if pkgs.has_key?(dependency.name)
9997

@@ -109,7 +107,6 @@ module Shards
109107
pkg.versions.each do |version, spec|
110108
next unless version =~ VERSION_REFERENCE
111109
dig(spec.dependencies)
112-
dig(spec.development_dependencies) unless Shards.production?
113110
end
114111
end
115112
end

0 commit comments

Comments
 (0)