Skip to content

Commit c98fcff

Browse files
committed
Support installing shards that were renamed
1 parent 134850e commit c98fcff

File tree

3 files changed

+38
-4
lines changed

3 files changed

+38
-4
lines changed

spec/integration/install_spec.cr

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -341,6 +341,30 @@ describe "install" do
341341
end
342342
end
343343

344+
it "test install old with version when shard was renamed" do
345+
metadata = {
346+
dependencies: {
347+
old_name: {git: git_url(:renamed), version: "0.1.0"},
348+
},
349+
}
350+
with_shard(metadata) do
351+
run "shards install"
352+
assert_installed "old_name", "0.1.0"
353+
end
354+
end
355+
356+
it "test install new when shard was renamed" do
357+
metadata = {
358+
dependencies: {
359+
new_name: {git: git_url(:renamed)},
360+
},
361+
}
362+
with_shard(metadata) do
363+
run "shards install"
364+
assert_installed "new_name", "0.2.0"
365+
end
366+
end
367+
344368
it "installs executables at version" do
345369
metadata = {
346370
dependencies: {binary: "0.1.0"},

spec/integration/spec_helper.cr

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,10 @@ private def setup_repositories
6161
create_file "version", "src/version.cr", %(module Version; STRING = "version @ 0.1.0"; end)
6262
create_git_release "version", "0.1.0"
6363

64+
create_git_repository "renamed"
65+
create_git_release "renamed", "0.1.0", "name: old_name\nversion: 0.1.0"
66+
create_git_release "renamed", "0.2.0", "name: new_name\nversion: 0.2.0"
67+
6468
create_git_repository "transitive"
6569
create_file "transitive", "src/version.cr", %(require "version"; puts Version::STRING)
6670
create_git_release "transitive", "0.2.0", <<-YAML

src/molinillo_solver.cr

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,11 @@ module Shards
4646
packages = [] of Package
4747
result.each do |v|
4848
spec = v.payload.as(Spec) || raise "BUG: returned graph payload was not a Spec"
49+
v.requirements.each do |dependency|
50+
unless dependency.name == spec.name
51+
raise Error.new("Error shard name (#{spec.name}) doesn't match dependency name (#{dependency.name})")
52+
end
53+
end
4954
resolver = spec.resolver || raise "BUG: returned Spec has no resolver"
5055
version = spec.version
5156

@@ -60,7 +65,11 @@ module Shards
6065
packages
6166
end
6267

63-
def name_for(dependency)
68+
def name_for(spec : Shards::Spec)
69+
spec.resolver.not_nil!.dependency.name
70+
end
71+
72+
def name_for(dependency : Shards::Dependency)
6473
dependency.name
6574
end
6675

@@ -74,9 +83,6 @@ module Shards
7483
result = versions.map do |version|
7584
@specs[{dependency.name, version}] ||= begin
7685
resolver.spec(version).tap do |spec|
77-
unless dependency.name == spec.name
78-
raise Error.new("Error shard name (#{spec.name}) doesn't match dependency name (#{dependency.name})")
79-
end
8086
spec.version = version
8187
end
8288
end

0 commit comments

Comments
 (0)