Skip to content

Commit 22b776e

Browse files
committed
Fix: resolve default HEAD refs in Solver::Graph
1 parent 25f0661 commit 22b776e

File tree

3 files changed

+29
-10
lines changed

3 files changed

+29
-10
lines changed

src/solver/graph.cr

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -71,16 +71,25 @@ module Shards
7171
end
7272

7373
private def versions_for(dependency, resolver) : Array(String)
74-
if requirement = dependency.version?
75-
if requirement == "HEAD"
76-
versions_for_refs("HEAD", dependency, resolver)
74+
matching =
75+
if requirement = dependency.version?
76+
if requirement == "HEAD"
77+
return versions_for_refs("HEAD", dependency, resolver)
78+
else
79+
Versions.resolve(resolver.available_versions, requirement)
80+
end
81+
elsif refs = dependency.refs
82+
versions_for_refs(refs, dependency, resolver)
7783
else
78-
Versions.resolve(resolver.available_versions, requirement)
84+
resolver.available_versions
7985
end
80-
elsif refs = dependency.refs
81-
versions_for_refs(refs, dependency, resolver)
86+
87+
if matching.size == 1 && matching.first == "HEAD"
88+
# NOTE: dependency doesn't have any version number tag, and defaults
89+
# to [HEAD], we must resolve the refs to an actual version:
90+
versions_for_refs("HEAD", dependency, resolver)
8291
else
83-
resolver.available_versions
92+
matching
8493
end
8594
end
8695

test/integration/install_test.cr

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,12 @@ class InstallCommandTest < Minitest::Test
109109
end
110110
end
111111

112+
def test_resolves_dependency_at_head_when_no_version_tags
113+
metadata = {dependencies: {"missing": "*"}}
114+
with_shard(metadata) { run "shards install" }
115+
assert_installed "missing", "0.1.0"
116+
end
117+
112118
def test_installs_dependency_at_locked_commit_when_refs_is_a_branch
113119
metadata = {
114120
dependencies: {

test/integration_helper.cr

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,9 +52,13 @@ class Minitest::Test
5252
# path dependency:
5353
create_path_repository "foo", "0.1.0"
5454

55-
# dependency with neither a shard.yml nor version tags:
56-
create_git_repository "empty"
57-
create_git_commit "empty", "initial release"
55+
# dependency with neither a shard.yml and/or version tags:
56+
#create_git_repository "empty"
57+
#create_git_commit "empty", "initial release"
58+
59+
create_git_repository "missing"
60+
create_shard "missing", "name: missing\nversion: 0.1.0\n"
61+
create_git_commit "missing", "initial release"
5862

5963
# dependencies with postinstall scripts:
6064
create_git_repository "post"

0 commit comments

Comments
 (0)