diff --git a/extensions/azdata/src/azdata.ts b/extensions/azdata/src/azdata.ts index 9d23d0c0d9..23fcb5deda 100644 --- a/extensions/azdata/src/azdata.ts +++ b/extensions/azdata/src/azdata.ts @@ -228,19 +228,26 @@ export async function upgradeAzdata(): Promise { /** * Checks whether a newer version of azdata is available - and if it is prompts the user to download and * install it. - * @param currentAzdata The current version of azdata to check against + * @param currentAzdata The current version of azdata to check . This function is a no-o if currentAzdata is undefined. + * returns true if an upgrade was performed and false otherwise. */ -export async function checkAndUpgradeAzdata(currentAzdata?: IAzdataTool): Promise { - if (currentAzdata === undefined) { - currentAzdata = await findAzdata(); - } - const newVersion = await discoverLatestAvailableAzdataVersion(); - if (newVersion.compare(currentAzdata.cachedVersion) === 1) { - const response = await vscode.window.showInformationMessage(loc.promptForAzdataUpgrade(newVersion.raw), loc.yes, loc.no); - if (response === loc.yes) { - await upgradeAzdata(); +export async function checkAndUpgradeAzdata(currentAzdata: IAzdataTool | undefined): Promise { + if (currentAzdata !== undefined) { + const newVersion = await discoverLatestAvailableAzdataVersion(); + if (newVersion.compare(currentAzdata.cachedVersion) === 1) { + //update if available and user wants it. + const response = await vscode.window.showInformationMessage(loc.promptForAzdataUpgrade(newVersion.raw), loc.yes, loc.no); + if (response === loc.yes) { + await upgradeAzdata(); + return true; + } + } else { + Logger.log(loc.currentlyInstalledVersionIsLatest(currentAzdata.cachedVersion.raw)); } + } else { + Logger.log(loc.upgradeCheckSkipped); } + return false; } @@ -327,7 +334,7 @@ async function discoverLatestAzdataVersionFromJson(): Promise { throw Error(`failed to parse the JSON of contents at: ${azdataHostname}/${azdataReleaseJson}, text being parsed: '${fileContents}', error:${getErrorMessage(e)}`); } const version = azdataReleaseInfo[process.platform]['version']; - Logger.log(loc.foundAzdataVersionToUpgradeTo(version)); + Logger.log(loc.latestAzdataVersionAvailable(version)); return new SemVer(version); } @@ -357,7 +364,7 @@ async function discoverLatestStableAzdataVersionDarwin(): Promise { throw Error(`failed to parse the JSON contents output of: 'brew info azdata-cli --json', text being parsed: '${brewInfoOutput}', error:${getErrorMessage(e)}`); } const azdataPackageVersionInfo: AzdataDarwinPackageVersionInfo = brewInfoAzdataCliJson.shift(); - Logger.log(loc.foundAzdataVersionToUpgradeTo(azdataPackageVersionInfo.versions.stable)); + Logger.log(loc.latestAzdataVersionAvailable(azdataPackageVersionInfo.versions.stable)); return new SemVer(azdataPackageVersionInfo.versions.stable); } @@ -382,6 +389,6 @@ async function executeAzdataCommand(command: string, args: string[], additionalE // const packageName = output.split('\n')[1].split(' ')[1]; // // the version string is the first part of the package sting before '~' // const version = packageName.split('~')[0]; -// Logger.log(loc.foundAzdataVersionToUpgradeTo(version)); +// Logger.log(loc.latestAzdataVersionAvailable(version)); // return new SemVer(version); // } diff --git a/extensions/azdata/src/extension.ts b/extensions/azdata/src/extension.ts index 55f00a3dbd..e3e69abc16 100644 --- a/extensions/azdata/src/extension.ts +++ b/extensions/azdata/src/extension.ts @@ -13,11 +13,14 @@ let localAzdata: IAzdataTool | undefined = undefined; export async function activate(): Promise { localAzdata = await checkForAzdata(); // Don't block on this since we want the extension to finish activating without needing user input + // upgrade if available and user wants it. checkAndUpgradeAzdata(localAzdata) - .then(async () => { - localAzdata = await findAzdata(); // now again find and return the currently installed azdata + .then(async upgradePerformed => { + if (upgradePerformed) { // If upgrade was performed then find and save the new azdata + localAzdata = await findAzdata(); + } }) - .catch(err => vscode.window.showWarningMessage(loc.updateError(err))); //update if available and user wants it. + .catch(err => vscode.window.showWarningMessage(loc.upgradeError(err))); return { azdata: { arc: { diff --git a/extensions/azdata/src/localizedConstants.ts b/extensions/azdata/src/localizedConstants.ts index 5a84838742..41a72905bf 100644 --- a/extensions/azdata/src/localizedConstants.ts +++ b/extensions/azdata/src/localizedConstants.ts @@ -23,14 +23,16 @@ export const stdoutOutput = (stdout: string): string => localize('azdata.stdoutO export const stderrOutput = (stderr: string): string => localize('azdata.stderrOutput', "stderr : {0}", stderr); export const checkingLatestAzdataVersion = localize('azdata.checkingLatestAzdataVersion', "Checking for latest version of azdata"); export const gettingTextContentsOfUrl = (url: string): string => localize('azdata.gettingTextContentsOfUrl', "Getting text contents of resource at URL {0}", url); -export const foundAzdataVersionToUpgradeTo = (version: string): string => localize('azdata.versionForUpgrade', "Found version {0} that azdata-cli can be upgraded to.", version); -export const promptForAzdataUpgrade = (version: string): string => localize('azdata.promptForAzdataUpgrade', "An updated version of azdata ( {0} ) is available, do you wish to install it now?", version); +export const latestAzdataVersionAvailable = (version: string): string => localize('azdata.latestAzdataVersionAvailable', "Latest available azdata version: {0}.", version); +export const currentlyInstalledVersionIsLatest = (currentVersion: string): string => localize('azdata.currentlyInstalledVersionIsLatest', "Currently installed version of azdata: {0} is same or newer than any other version available", currentVersion); +export const promptForAzdataUpgrade = (version: string): string => localize('azdata.promptForAzdataUpgrade', "A new version of azdata ( {0} ) is available, do you wish to upgrade to it now?", version); export const couldNotFindAzdata = (err: any): string => localize('azdata.couldNotFindAzdata', "Could not find azdata. Error : {0}", err.message ?? err); export const couldNotFindAzdataWithPrompt = localize('azdata.couldNotFindAzdataWithPrompt', "Could not find azdata, install it now? If not then some features will not be able to function."); export const downloadError = localize('azdata.downloadError', "Error while downloading"); export const installError = (err: any): string => localize('azdata.installError', "Error installing azdata : {0}", err.message ?? err); export const platformUnsupported = (platform: string): string => localize('azdata.platformUnsupported', "Platform '{0}' is currently unsupported", platform); export const unexpectedCommandError = (errMsg: string): string => localize('azdata.unexpectedCommandError', "Unexpected error executing command : {0}", errMsg); -export const updateError = (err: any): string => localize('azdata.updateError', "Error updating azdata : {0}", err.message ?? err); +export const upgradeError = (err: any): string => localize('azdata.upgradeError', "Error upgrading azdata : {0}", err.message ?? err); +export const upgradeCheckSkipped = localize('azdata.updateCheckSkipped', "No check for new azdata version availability performed as azdata was not found to be installed"); export const unexpectedExitCode = (code: number, err: string): string => localize('azdata.unexpectedExitCode', "Unexpected exit code from command : {1} ({0})", code, err); export const noAzdata = localize('azdata.NoAzdata', "No azdata available");