@@ -171,7 +171,7 @@ public function hasItem($key)
171
171
}
172
172
173
173
foreach ($ this ->getTagVersions ([$ itemTags ]) as $ tag => $ version ) {
174
- if ($ itemTags [$ tag ] !== $ version && 1 !== $ itemTags [$ tag ] - $ version ) {
174
+ if ($ itemTags [$ tag] !== $ version && $ itemTags [ $ tag ] !== $ version + 1 && ( $ itemTags [$ tag ] !== \ PHP_INT_MIN || $ version !== \ PHP_INT_MAX ) ) {
175
175
return false ;
176
176
}
177
177
}
@@ -353,7 +353,7 @@ private function generateItems(iterable $items, array $tagKeys): \Generator
353
353
354
354
foreach ($ itemTags as $ key => $ tags ) {
355
355
foreach ($ tags as $ tag => $ version ) {
356
- if ($ tagVersions [$ tag ] !== $ version && 1 !== $ version - $ tagVersions [$ tag ]) {
356
+ if ($ tagVersions [$ tag ] !== $ version && $ tagVersions [ $ tag ] + 1 !== $ version && ( $ tagVersions [$ tag ] !== \ PHP_INT_MAX || $ version !== \ PHP_INT_MIN ) ) {
357
357
unset($ itemTags [$ key ]);
358
358
continue 2 ;
359
359
}
@@ -384,7 +384,7 @@ private function getTagVersions(array $tagsByKey, array $invalidatedTags = [])
384
384
if (!$ fetchTagVersions = 1 !== \func_num_args ()) {
385
385
foreach ($ tagsByKey as $ tags ) {
386
386
foreach ($ tags as $ tag => $ version ) {
387
- if ($ tagVersions [$ tag ] > $ version ) {
387
+ if ($ tagVersions [$ tag ] > $ version || $ version > 0 && $ version - $ tagVersions [ $ tag ] > \ PHP_INT_MAX ) {
388
388
$ tagVersions [$ tag ] = $ version ;
389
389
}
390
390
}
@@ -399,12 +399,14 @@ private function getTagVersions(array $tagsByKey, array $invalidatedTags = [])
399
399
$ fetchTagVersions = true ;
400
400
continue ;
401
401
}
402
- $ version -= $ this ->knownTagVersions [$ tag ][1 ];
403
- if ((0 !== $ version && 1 !== $ version ) || $ now - $ this ->knownTagVersions [$ tag ][0 ] >= $ this ->knownTagVersionsTtl ) {
402
+
403
+ if ($ this ->knownTagVersions [$ tag ][1 ] !== $ version && $ this ->knownTagVersions [$ tag ][1 ] + 1 !== $ version && ($ this ->knownTagVersions [$ tag ][1 ] !== \PHP_INT_MAX || $ version !== \PHP_INT_MIN )
404
+ || $ now - $ this ->knownTagVersions [$ tag ][0 ] >= $ this ->knownTagVersionsTtl
405
+ ) {
404
406
// reuse previously fetched tag versions up to the ttl, unless we are storing items or a potential miss arises
405
407
$ fetchTagVersions = true ;
406
408
} else {
407
- $ this ->knownTagVersions [$ tag ][1 ] + = $ version ;
409
+ $ this ->knownTagVersions [$ tag ][1 ] = $ version ;
408
410
}
409
411
}
410
412
@@ -419,12 +421,13 @@ private function getTagVersions(array $tagsByKey, array $invalidatedTags = [])
419
421
if ($ version->isHit ()) {
420
422
$ tagVersions [$ tag ] = $ version ->get ();
421
423
} else {
422
- $ tagVersions [$ tag ] = mt_rand (0 , \PHP_INT_MAX );
424
+ $ tagVersions [$ tag ] = mt_rand (\ PHP_INT_MIN , \PHP_INT_MAX );
423
425
$ updatedTags [$ tag ] = $ version ->set ($ tagVersions [$ tag ]);
424
426
}
425
427
426
428
if (isset ($ invalidatedTags [$ tag ]) && !isset ($ updatedTags [$ tag ])) {
427
- $ updatedTags [$ tag ] = $ version ->set (\PHP_INT_MAX === $ tagVersions [$ tag ] ? 0 : ++$ tagVersions [$ tag ]);
429
+ $ tagVersions [$ tag ] = $ tagVersions [$ tag ] < \PHP_INT_MAX ? 1 + $ tagVersions [$ tag ] : \PHP_INT_MIN ;
430
+ $ updatedTags [$ tag ] = $ version ->set ($ tagVersions [$ tag ]);
428
431
}
429
432
$ this ->knownTagVersions [$ tag ] = [$ now , $ tagVersions [$ tag ]];
430
433
}
0 commit comments