@@ -162,7 +162,7 @@ var findConstraintRegex *regexp.Regexp
162
162
var validConstraintRegex * regexp.Regexp
163
163
164
164
const cvRegex string = `v?([0-9|x|X|\*]+)(\.[0-9|x|X|\*]+)?(\.[0-9|x|X|\*]+)?` +
165
- `(-([0-9A-Za-z\-]+(\.[0-9A-Za-z\-]+)*))?` +
165
+ `(-([0-9A-Za-z\-]+(\.[0-9A-Za-z\-\* ]+)*))?` +
166
166
`(\+([0-9A-Za-z\-]+(\.[0-9A-Za-z\-]+)*))?`
167
167
168
168
func init () {
@@ -221,9 +221,10 @@ type constraint struct {
221
221
origfunc string
222
222
223
223
// When an x is used as part of the version (e.g., 1.x)
224
- minorDirty bool
225
- dirty bool
226
- patchDirty bool
224
+ minorDirty bool
225
+ dirty bool
226
+ patchDirty bool
227
+ prereleaseDirty bool
227
228
}
228
229
229
230
// Check if a version meets the constraint
@@ -251,10 +252,16 @@ func parseConstraint(c string) (*constraint, error) {
251
252
}
252
253
253
254
ver := m [2 ]
254
- minorDirty := false
255
+ prereleaseDirty := false
255
256
patchDirty := false
257
+ minorDirty := false
256
258
dirty := false
257
- if isX (m [3 ]) || m [3 ] == "" {
259
+
260
+ if (isX (m [3 ]) || m [3 ] == "" ) && len (m ) > 8 && m [7 ] != "" && isX (strings .TrimPrefix (m [8 ], "." )) {
261
+ ver = fmt .Sprintf ("0.0.0-%s.0" , strings .Split (m [7 ], "." )[0 ])
262
+ dirty = true
263
+ prereleaseDirty = true
264
+ } else if isX (m [3 ]) || m [3 ] == "" {
258
265
ver = fmt .Sprintf ("0.0.0%s" , m [6 ])
259
266
dirty = true
260
267
} else if isX (strings .TrimPrefix (m [4 ], "." )) || m [4 ] == "" {
@@ -278,6 +285,7 @@ func parseConstraint(c string) (*constraint, error) {
278
285
cs .con = con
279
286
cs .minorDirty = minorDirty
280
287
cs .patchDirty = patchDirty
288
+ cs .prereleaseDirty = prereleaseDirty
281
289
cs .dirty = dirty
282
290
283
291
return cs , nil
@@ -471,6 +479,11 @@ func constraintTilde(v *Version, c *constraint) (bool, error) {
471
479
// equivalent to >= 0.0.0.
472
480
if c .con .Major () == 0 && c .con .Minor () == 0 && c .con .Patch () == 0 &&
473
481
! c .minorDirty && ! c .patchDirty {
482
+
483
+ if c .prereleaseDirty && strings .Split (v .pre , "." )[0 ] != strings .Split (c .con .pre , "." )[0 ] {
484
+ return false , nil
485
+ }
486
+
474
487
return true , nil
475
488
}
476
489
0 commit comments