mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-02-17 02:51:36 -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.
|
* @returns 1 if the first version is greater, -1 if it's less, and 0 otherwise.
|
||||||
*/
|
*/
|
||||||
export function comparePackageVersions(first: string, second: string): number {
|
export function comparePackageVersions(first: string, second: string): number {
|
||||||
let firstVersion = first.split('.').map(numStr => Number.parseInt(numStr));
|
let firstVersion = first.split('.');
|
||||||
let secondVersion = second.split('.').map(numStr => Number.parseInt(numStr));
|
let secondVersion = second.split('.');
|
||||||
|
|
||||||
// If versions have different lengths, then append zeroes to the shorter one
|
// If versions have different lengths, then append zeroes to the shorter one
|
||||||
if (firstVersion.length > secondVersion.length) {
|
if (firstVersion.length > secondVersion.length) {
|
||||||
let diff = 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) {
|
} else if (secondVersion.length > firstVersion.length) {
|
||||||
let diff = 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) {
|
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;
|
return 1;
|
||||||
} else if (firstVersion[i] < secondVersion[i]) {
|
} else if (firstVersionNum < secondVersionNum) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -94,6 +94,14 @@ export class LocalPipPackageManageProvider implements IPackageManageProvider {
|
|||||||
let versionNums: string[] = [];
|
let versionNums: string[] = [];
|
||||||
let packageSummary = '';
|
let packageSummary = '';
|
||||||
if (packagesJson) {
|
if (packagesJson) {
|
||||||
|
let currentRelease: string;
|
||||||
|
if (packagesJson.info) {
|
||||||
|
if (packagesJson.info.summary) {
|
||||||
|
packageSummary = packagesJson.info.summary;
|
||||||
|
}
|
||||||
|
currentRelease = packagesJson.info.version?.toString();
|
||||||
|
}
|
||||||
|
|
||||||
if (packagesJson.releases) {
|
if (packagesJson.releases) {
|
||||||
let versionKeys = Object.keys(packagesJson.releases);
|
let versionKeys = Object.keys(packagesJson.releases);
|
||||||
versionKeys = versionKeys.filter(versionKey => {
|
versionKeys = versionKeys.filter(versionKey => {
|
||||||
@@ -101,10 +109,15 @@ export class LocalPipPackageManageProvider implements IPackageManageProvider {
|
|||||||
return Array.isArray(releaseInfo) && releaseInfo.length > 0;
|
return Array.isArray(releaseInfo) && releaseInfo.length > 0;
|
||||||
});
|
});
|
||||||
versionNums = utils.sortPackageVersions(versionKeys, false);
|
versionNums = utils.sortPackageVersions(versionKeys, false);
|
||||||
}
|
|
||||||
|
|
||||||
if (packagesJson.info && packagesJson.info.summary) {
|
// Place current stable release at the front of the list
|
||||||
packageSummary = packagesJson.info.summary;
|
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'];
|
const randomSorted = ['0.1', '1.0.0', '1.0.1', '42', '100.0'];
|
||||||
should(utils.sortPackageVersions(random)).deepEqual(randomSorted);
|
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', () => {
|
describe('executeBufferedCommand', () => {
|
||||||
|
|||||||
Reference in New Issue
Block a user