11
11
extension Package . Dependency {
12
12
13
13
/// Create a package dependency that uses the version requirement, starting with the given minimum version,
14
- /// going up to the next major version.
14
+ /// going up to the next major version.
15
15
///
16
16
/// This is the recommended way to specify a remote package dependency.
17
17
/// It allows you to specify the minimum version you require, allows updates that include bug fixes
@@ -26,26 +26,74 @@ extension Package.Dependency {
26
26
/// .package(url: "https://example.com/example-package.git", from: "1.2.3"),
27
27
///
28
28
/// - Parameters:
29
+ /// - name: The name of the package, or nil to deduce it from the URL.
29
30
/// - url: The valid Git URL of the package.
30
31
/// - version: The minimum version requirement.
32
+ @available ( _PackageDescription, obsoleted: 5.2 )
31
33
public static func package (
32
34
url: String ,
33
35
from version: Version
34
36
) -> Package . Dependency {
35
- return . package ( url: url, . upToNextMajor( from: version) )
37
+ return . init( name: nil , url: url, requirement: . upToNextMajor( from: version) )
38
+ }
39
+
40
+ /// Create a package dependency that uses the version requirement, starting with the given minimum version,
41
+ /// going up to the next major version.
42
+ ///
43
+ /// This is the recommended way to specify a remote package dependency.
44
+ /// It allows you to specify the minimum version you require, allows updates that include bug fixes
45
+ /// and backward-compatible feature updates, but requires you to explicitly update to a new major version of the dependency.
46
+ /// This approach provides the maximum flexibility on which version to use,
47
+ /// while making sure you don't update to a version with breaking changes,
48
+ /// and helps to prevent conflicts in your dependency graph.
49
+ ///
50
+ /// The following example allows the Swift package manager to select a version
51
+ /// like a `1.2.3`, `1.2.4`, or `1.3.0`, but not `2.0.0`.
52
+ ///
53
+ /// .package(url: "https://example.com/example-package.git", from: "1.2.3"),
54
+ ///
55
+ /// - Parameters:
56
+ /// - name: The name of the package, or nil to deduce it from the URL.
57
+ /// - url: The valid Git URL of the package.
58
+ /// - version: The minimum version requirement.
59
+ @available ( _PackageDescription, introduced: 5.2 )
60
+ public static func package (
61
+ name: String ? = nil ,
62
+ url: String ,
63
+ from version: Version
64
+ ) -> Package . Dependency {
65
+ return . init( name: name, url: url, requirement: . upToNextMajor( from: version) )
36
66
}
37
67
38
68
/// Add a remote package dependency given a version requirement.
39
69
///
40
70
/// - Parameters:
71
+ /// - name: The name of the package, or nil to deduce it from the URL.
41
72
/// - url: The valid Git URL of the package.
42
73
/// - requirement: A dependency requirement. See static methods on `Package.Dependency.Requirement` for available options.
74
+ @available ( _PackageDescription, obsoleted: 5.2 )
43
75
public static func package (
44
76
url: String ,
45
77
_ requirement: Package . Dependency . Requirement
46
78
) -> Package . Dependency {
47
79
precondition ( !requirement. isLocalPackage, " Use `.package(path:)` API to declare a local package dependency " )
48
- return . init( url: url, requirement: requirement)
80
+ return . init( name: nil , url: url, requirement: requirement)
81
+ }
82
+
83
+ /// Add a remote package dependency given a version requirement.
84
+ ///
85
+ /// - Parameters:
86
+ /// - name: The name of the package, or nil to deduce it from the URL.
87
+ /// - url: The valid Git URL of the package.
88
+ /// - requirement: A dependency requirement. See static methods on `Package.Dependency.Requirement` for available options.
89
+ @available ( _PackageDescription, introduced: 5.2 )
90
+ public static func package (
91
+ name: String ? = nil ,
92
+ url: String ,
93
+ _ requirement: Package . Dependency . Requirement
94
+ ) -> Package . Dependency {
95
+ precondition ( !requirement. isLocalPackage, " Use `.package(path:)` API to declare a local package dependency " )
96
+ return . init( name: name, url: url, requirement: requirement)
49
97
}
50
98
51
99
/// Add a package dependency starting with a specific minimum version, up to
@@ -57,16 +105,73 @@ extension Package.Dependency {
57
105
/// .package(url: "https://example.com/example-package.git", "1.2.3"..<"1.2.6"),
58
106
///
59
107
/// - Parameters:
108
+ /// - name: The name of the package, or nil to deduce it from the URL.
60
109
/// - url: The valid Git URL of the package.
61
110
/// - range: The custom version range requirement.
111
+ @available ( _PackageDescription, obsoleted: 5.2 )
62
112
public static func package (
63
113
url: String ,
64
114
_ range: Range < Version >
65
115
) -> Package . Dependency {
66
116
#if PACKAGE_DESCRIPTION_4
67
- return . init( url: url, requirement: . rangeItem( range) )
117
+ return . init( name : nil , url: url, requirement: . rangeItem( range) )
68
118
#else
69
- return . init( url: url, requirement: . _rangeItem( range) )
119
+ return . init( name: nil , url: url, requirement: . _rangeItem( range) )
120
+ #endif
121
+ }
122
+
123
+ /// Add a package dependency starting with a specific minimum version, up to
124
+ /// but not including a specified maximum version.
125
+ ///
126
+ /// The following example allows the Swift package manager to pick
127
+ /// versions `1.2.3`, `1.2.4`, `1.2.5`, but not `1.2.6`.
128
+ ///
129
+ /// .package(url: "https://example.com/example-package.git", "1.2.3"..<"1.2.6"),
130
+ ///
131
+ /// - Parameters:
132
+ /// - name: The name of the package, or nil to deduce it from the URL.
133
+ /// - url: The valid Git URL of the package.
134
+ /// - range: The custom version range requirement.
135
+ @available ( _PackageDescription, introduced: 5.2 )
136
+ public static func package (
137
+ name: String ? = nil ,
138
+ url: String ,
139
+ _ range: Range < Version >
140
+ ) -> Package . Dependency {
141
+ #if PACKAGE_DESCRIPTION_4
142
+ return . init( name: name, url: url, requirement: . rangeItem( range) )
143
+ #else
144
+ return . init( name: name, url: url, requirement: . _rangeItem( range) )
145
+ #endif
146
+ }
147
+
148
+ /// Add a package dependency starting with a specific minimum version, going
149
+ /// up to and including a specific maximum version.
150
+ ///
151
+ /// The following example allows the Swift package manager to pick
152
+ /// versions 1.2.3, 1.2.4, 1.2.5, as well as 1.2.6.
153
+ ///
154
+ /// .package(url: "https://example.com/example-package.git", "1.2.3"..."1.2.6"),
155
+ ///
156
+ /// - Parameters:
157
+ /// - name: The name of the package, or nil to deduce it from the URL.
158
+ /// - url: The valid Git URL of the package.
159
+ /// - range: The closed version range requirement.
160
+ @available ( _PackageDescription, obsoleted: 5.2 )
161
+ public static func package (
162
+ url: String ,
163
+ _ range: ClosedRange < Version >
164
+ ) -> Package . Dependency {
165
+ // Increase upperbound's patch version by one.
166
+ let upper = range. upperBound
167
+ let upperBound = Version (
168
+ upper. major, upper. minor, upper. patch + 1 ,
169
+ prereleaseIdentifiers: upper. prereleaseIdentifiers,
170
+ buildMetadataIdentifiers: upper. buildMetadataIdentifiers)
171
+ #if PACKAGE_DESCRIPTION_4
172
+ return . init( name: nil , url: url, requirement: . rangeItem( range. lowerBound..< upperBound) )
173
+ #else
174
+ return . init( name: nil , url: url, requirement: . _rangeItem( range. lowerBound..< upperBound) )
70
175
#endif
71
176
}
72
177
@@ -79,9 +184,12 @@ extension Package.Dependency {
79
184
/// .package(url: "https://example.com/example-package.git", "1.2.3"..."1.2.6"),
80
185
///
81
186
/// - Parameters:
187
+ /// - name: The name of the package, or nil to deduce it from the URL.
82
188
/// - url: The valid Git URL of the package.
83
189
/// - range: The closed version range requirement.
190
+ @available ( _PackageDescription, introduced: 5.2 )
84
191
public static func package (
192
+ name: String ? = nil ,
85
193
url: String ,
86
194
_ range: ClosedRange < Version >
87
195
) -> Package . Dependency {
@@ -91,7 +199,11 @@ extension Package.Dependency {
91
199
upper. major, upper. minor, upper. patch + 1 ,
92
200
prereleaseIdentifiers: upper. prereleaseIdentifiers,
93
201
buildMetadataIdentifiers: upper. buildMetadataIdentifiers)
94
- return . package ( url: url, range. lowerBound..< upperBound)
202
+ #if PACKAGE_DESCRIPTION_4
203
+ return . init( name: name, url: url, requirement: . rangeItem( range. lowerBound..< upperBound) )
204
+ #else
205
+ return . init( name: name, url: url, requirement: . _rangeItem( range. lowerBound..< upperBound) )
206
+ #endif
95
207
}
96
208
97
209
#if !PACKAGE_DESCRIPTION_4
@@ -103,10 +215,27 @@ extension Package.Dependency {
103
215
/// on multiple tightly coupled packages.
104
216
///
105
217
/// - Parameter path: The path of the package.
218
+ @available ( _PackageDescription, obsoleted: 5.2 )
219
+ public static func package (
220
+ path: String
221
+ ) -> Package . Dependency {
222
+ return . init( name: nil , url: path, requirement: . _localPackageItem)
223
+ }
224
+
225
+ /// Add a dependency to a local package on the filesystem.
226
+ ///
227
+ /// The Swift Package Manager uses the package dependency as-is
228
+ /// and does not perform any source control access. Local package dependencies
229
+ /// are especially useful during development of a new package or when working
230
+ /// on multiple tightly coupled packages.
231
+ ///
232
+ /// - Parameter path: The path of the package.
233
+ @available ( _PackageDescription, introduced: 5.2 )
106
234
public static func package (
235
+ name: String ? = nil ,
107
236
path: String
108
237
) -> Package . Dependency {
109
- return . init( url: path, requirement: . _localPackageItem)
238
+ return . init( name : name , url: path, requirement: . _localPackageItem)
110
239
}
111
240
#endif
112
241
}
0 commit comments