@@ -2,7 +2,7 @@ require "./dependency"
2
2
3
3
module Shards
4
4
class DependencyDefinition
5
- record Parts , resolver_key : String , source : String , requirement : Requirement = Any
5
+ record Parts , resolver_key : String , source : String , requirement : Requirement
6
6
7
7
property dependency : Dependency
8
8
# resolver's key and source are normalized. We preserve the key and source to be used
@@ -47,28 +47,36 @@ module Shards
47
47
def self.parts_from_cli (value : String ) : Parts
48
48
uri = URI .parse(value)
49
49
50
+ # fragment parsing for version requirement
51
+ requirement = Any
52
+ if fragment = uri.fragment
53
+ uri.fragment = nil
54
+ value = value.rchop(" ##{ fragment } " )
55
+ requirement = VersionReq .new(" ~> #{ fragment } " )
56
+ end
57
+
50
58
case scheme = uri.scheme
51
59
when Nil
52
60
case value
53
61
when .starts_with?(" ./" ), .starts_with?(" ../" )
54
- Parts .new(" path" , Path [value].to_posix.to_s)
62
+ Parts .new(" path" , Path [value].to_posix.to_s, Any )
55
63
when .starts_with?(" .\\ " ), .starts_with?(" ..\\ " )
56
64
{% if flag?(:windows ) % }
57
- Parts .new(" path" , Path [value].to_posix.to_s)
65
+ Parts .new(" path" , Path [value].to_posix.to_s, Any )
58
66
{% else % }
59
67
raise Shards ::Error .new(" Invalid dependency format: #{ value } " )
60
68
{% end % }
61
69
when .starts_with?(" git@" )
62
- Parts .new(" git" , value)
70
+ Parts .new(" git" , value, requirement )
63
71
else
64
72
raise Shards ::Error .new(" Invalid dependency format: #{ value } " )
65
73
end
66
74
when " file"
67
75
raise Shards ::Error .new(" Invalid file URI: #{ uri } " ) if ! uri.host.in?(nil , " " , " localhost" ) || uri.port || uri.user
68
- Parts .new(" path" , uri.path)
76
+ Parts .new(" path" , uri.path, Any )
69
77
when " https"
70
78
if resolver_key = GitResolver ::KNOWN_PROVIDERS [uri.host]?
71
- Parts .new(resolver_key, uri.path[1 ..- 1 ].rchop(" .git" )) # drop first "/""
79
+ Parts .new(resolver_key, uri.path[1 ..- 1 ].rchop(" .git" ), requirement ) # drop first "/""
72
80
else
73
81
raise Shards ::Error .new(" Cannot determine resolver for HTTPS URI: #{ value } " )
74
82
end
@@ -79,12 +87,6 @@ module Shards
79
87
if uri.host.nil? || subscheme
80
88
uri.scheme = subscheme
81
89
end
82
- # narrow down requirement
83
- requirement = Any
84
- if version = uri.fragment
85
- uri.fragment = nil
86
- requirement = VersionReq .new(" ~> #{ version } " )
87
- end
88
90
return Parts .new(scheme, uri.to_s, requirement)
89
91
end
90
92
raise Shards ::Error .new(" Invalid dependency format: #{ value } " )
0 commit comments