Skip to content

Commit

Permalink
feat: properly compare versions with commit SHA (sparkle-project#1504)
Browse files Browse the repository at this point in the history
  • Loading branch information
aleclarson authored and lluuaapp committed Aug 20, 2021
1 parent 5173741 commit 9d32b97
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 2 deletions.
7 changes: 6 additions & 1 deletion Sparkle/SUBasicUpdateDriver.m
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,12 @@ - (SUAppcastItem *)bestItemFromAppcastItems:(NSArray *)appcastItems getDeltaItem
SUAppcastItem *item = nil;
for(SUAppcastItem *candidate in appcastItems) {
if ([self hostSupportsItem:candidate]) {
if (!item || [comparator compareVersion:item.versionString toVersion:candidate.versionString] == NSOrderedAscending) {
if (
!item || (
[item.date compare:candidate.date] == NSOrderedAscending &&
[comparator compareVersion:item.versionString toVersion:candidate.versionString] != NSOrderedDescending
)
) {
item = candidate;
}
}
Expand Down
6 changes: 6 additions & 0 deletions Sparkle/SUStandardVersionComparator.m
Original file line number Diff line number Diff line change
Expand Up @@ -33,12 +33,15 @@ typedef NS_ENUM(NSInteger, SUCharacterType) {
kNumberType,
kStringType,
kSeparatorType,
kDashType,
};

- (SUCharacterType)typeOfCharacter:(NSString *)character
{
if ([character isEqualToString:@"."]) {
return kSeparatorType;
} else if ([character isEqualToString:@"-"]) {
return kDashType;
} else if ([[NSCharacterSet decimalDigitCharacterSet] characterIsMember:[character characterAtIndex:0]]) {
return kNumberType;
} else if ([[NSCharacterSet whitespaceAndNewlineCharacterSet] characterIsMember:[character characterAtIndex:0]]) {
Expand Down Expand Up @@ -67,6 +70,9 @@ - (NSArray *)splitVersionString:(NSString *)version
for (i = 1; i <= n; ++i) {
character = [version substringWithRange:NSMakeRange(i, 1)];
newType = [self typeOfCharacter:character];
if (newType == kDashType) {
break;
}
if (oldType != newType || oldType == kSeparatorType) {
// We've reached a new segment
NSString *aPart = [[NSString alloc] initWithString:s];
Expand Down
10 changes: 9 additions & 1 deletion Tests/SUVersionComparisonTest.m
Original file line number Diff line number Diff line change
Expand Up @@ -33,10 +33,18 @@ - (void)testNumbers
SUAssertAscending(comparator, @"0.1", @"0.1.2");
}

- (void)testPrereleases
- (void)testCommitSHAs
{
SUStandardVersionComparator *comparator = [[SUStandardVersionComparator alloc] init];

SUAssertAscending(comparator, @"1.5.5-335d3e2", @"1.5.6-b252311");
SUAssertEqual(comparator, @"1.5.5-335d3e2", @"1.5.5-a655360");
}

- (void)testPrereleases
{
SUStandardVersionComparator *comparator = [[SUStandardVersionComparator alloc] init];

SUAssertAscending(comparator, @"1.5.5", @"1.5.6a1");
SUAssertAscending(comparator, @"1.1.0b1", @"1.1.0b2");
SUAssertAscending(comparator, @"1.1.1b2", @"1.1.2b1");
Expand Down

0 comments on commit 9d32b97

Please sign in to comment.