Skip to content

Commit f2e4c72

Browse files
committed
Fix: recursion when shard name doesn't match dependency name
fixes #72
1 parent 6c44184 commit f2e4c72

File tree

3 files changed

+26
-4
lines changed

3 files changed

+26
-4
lines changed

src/package.cr

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,10 @@ module Shards
9898
self << package
9999
end
100100

101+
if dependency.name != package.spec.name
102+
raise Error.new("Error shard name (#{package.spec.name}) doesn't match dependency name (#{dependency.name})")
103+
end
104+
101105
package.requirements << dependency.version
102106
package
103107
end

test/integration/install_test.cr

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -224,4 +224,16 @@ class InstallCommandTest < Minitest::Test
224224
refute Dir.exists?(File.join(application_path, "libs", "fails"))
225225
end
226226
end
227+
228+
def test_fails_when_shard_name_doesnt_match
229+
metadata = {
230+
dependencies: {
231+
typo: { git: git_url(:mock), version: "*" }
232+
}
233+
}
234+
with_shard(metadata) do
235+
ex = assert_raises(FailedCommand) { run "shards install --no-color" }
236+
assert_match "Error shard name (mock) doesn't match dependency name (typo)", ex.stdout
237+
end
238+
end
227239
end

test/support/cli.cr

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,14 +34,20 @@ module Shards
3434
yml << "\n"
3535
value.each do |name, version|
3636
yml << " " << name << ":\n"
37-
yml << " git: " << git_url(name).inspect << "\n"
3837

39-
if version.is_a?(String)
38+
case version
39+
when String
40+
yml << " git: " << git_url(name).inspect << "\n"
4041
yml << " version: " << version.inspect << "\n"
41-
elsif version
42+
when Hash
43+
unless version.keys.includes?(:git)
44+
yml << " git: " << git_url(name).inspect << "\n"
45+
end
4246
version.each do |k, v|
43-
yml << " " << k << ": " << v << "\n"
47+
yml << " " << k << ": " << v.inspect << "\n"
4448
end
49+
else
50+
yml << " git: " << git_url(name).inspect << "\n"
4551
end
4652
end
4753
else

0 commit comments

Comments
 (0)