mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-02-16 10:58:30 -05:00
Place current release at the top of version dropdown in Manage Packages dialog. (#12884)
* Also improved sorting for version numbers with non-numeric components.
This commit is contained in:
@@ -144,22 +144,31 @@ export function getOSPlatformId(): string {
|
||||
* @returns 1 if the first version is greater, -1 if it's less, and 0 otherwise.
|
||||
*/
|
||||
export function comparePackageVersions(first: string, second: string): number {
|
||||
let firstVersion = first.split('.').map(numStr => Number.parseInt(numStr));
|
||||
let secondVersion = second.split('.').map(numStr => Number.parseInt(numStr));
|
||||
let firstVersion = first.split('.');
|
||||
let secondVersion = second.split('.');
|
||||
|
||||
// If versions have different lengths, then append zeroes to the shorter one
|
||||
if (firstVersion.length > secondVersion.length) {
|
||||
let diff = firstVersion.length - secondVersion.length;
|
||||
secondVersion = secondVersion.concat(new Array(diff).fill(0));
|
||||
secondVersion = secondVersion.concat(new Array(diff).fill('0'));
|
||||
} else if (secondVersion.length > firstVersion.length) {
|
||||
let diff = secondVersion.length - firstVersion.length;
|
||||
firstVersion = firstVersion.concat(new Array(diff).fill(0));
|
||||
firstVersion = firstVersion.concat(new Array(diff).fill('0'));
|
||||
}
|
||||
|
||||
for (let i = 0; i < firstVersion.length; ++i) {
|
||||
if (firstVersion[i] > secondVersion[i]) {
|
||||
let firstVersionNum: string | number = Number(firstVersion[i]);
|
||||
let secondVersionNum: string | number = Number(secondVersion[i]);
|
||||
|
||||
// Fallback to string comparison if either value isn't a number
|
||||
if (isNaN(firstVersionNum) || isNaN(secondVersionNum)) {
|
||||
firstVersionNum = firstVersion[i];
|
||||
secondVersionNum = secondVersion[i];
|
||||
}
|
||||
|
||||
if (firstVersionNum > secondVersionNum) {
|
||||
return 1;
|
||||
} else if (firstVersion[i] < secondVersion[i]) {
|
||||
} else if (firstVersionNum < secondVersionNum) {
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -94,6 +94,14 @@ export class LocalPipPackageManageProvider implements IPackageManageProvider {
|
||||
let versionNums: string[] = [];
|
||||
let packageSummary = '';
|
||||
if (packagesJson) {
|
||||
let currentRelease: string;
|
||||
if (packagesJson.info) {
|
||||
if (packagesJson.info.summary) {
|
||||
packageSummary = packagesJson.info.summary;
|
||||
}
|
||||
currentRelease = packagesJson.info.version?.toString();
|
||||
}
|
||||
|
||||
if (packagesJson.releases) {
|
||||
let versionKeys = Object.keys(packagesJson.releases);
|
||||
versionKeys = versionKeys.filter(versionKey => {
|
||||
@@ -101,10 +109,15 @@ export class LocalPipPackageManageProvider implements IPackageManageProvider {
|
||||
return Array.isArray(releaseInfo) && releaseInfo.length > 0;
|
||||
});
|
||||
versionNums = utils.sortPackageVersions(versionKeys, false);
|
||||
}
|
||||
|
||||
if (packagesJson.info && packagesJson.info.summary) {
|
||||
packageSummary = packagesJson.info.summary;
|
||||
// Place current stable release at the front of the list
|
||||
if (currentRelease) {
|
||||
let releaseIndex = versionNums.findIndex(value => value === currentRelease);
|
||||
if (releaseIndex > 0) {
|
||||
versionNums.splice(releaseIndex, 1);
|
||||
versionNums.unshift(currentRelease);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -131,6 +131,12 @@ describe('Utils Tests', function () {
|
||||
const randomSorted = ['0.1', '1.0.0', '1.0.1', '42', '100.0'];
|
||||
should(utils.sortPackageVersions(random)).deepEqual(randomSorted);
|
||||
});
|
||||
|
||||
it('versions with non-numeric components', () => {
|
||||
const random = ['1.0.1h', '1.0.0', '42', '1.0.1b', '100.0', '0.1', '1.0.1'];
|
||||
const randomSorted = ['0.1', '1.0.0', '1.0.1', '1.0.1b', '1.0.1h', '42', '100.0'];
|
||||
should(utils.sortPackageVersions(random)).deepEqual(randomSorted);
|
||||
});
|
||||
});
|
||||
|
||||
describe('executeBufferedCommand', () => {
|
||||
|
||||
Reference in New Issue
Block a user