Adress comments on non-destructive upgrades.

This commit is contained in:
alexet
2021-01-11 18:07:15 +00:00
committed by Andrew Eisenberg
parent ace92a4674
commit 70ddbd05be
3 changed files with 7 additions and 5 deletions

View File

@@ -651,6 +651,7 @@ export class CodeQLCliServer implements Disposable {
* Gets information necessary for upgrading a database.
* @param dbScheme the path to the dbscheme of the database to be upgraded.
* @param searchPath A list of directories to search for upgrade scripts.
* @param targetDbScheme The dbscheme to try to upgrade to.
* @returns A list of database upgrade script directories
*/
resolveUpgrades(dbScheme: string, searchPath: string[], targetDbScheme?: string): Promise<UpgradesInfo> {

View File

@@ -418,7 +418,7 @@ export interface CompileUpgradeParams {
*/
export interface CompileUpgradeSequenceParams {
/**
* The sequence of upogrades to compile
* The sequence of upgrades to compile
*/
upgradePaths: string[];
/**

View File

@@ -23,11 +23,9 @@ const MAX_UPGRADE_MESSAGE_LINES = 10;
*
* This requires 3 features. The ability to compile an upgrade sequence; The ability to
* run a non-destructive upgrades as a query; the ability to specify a target when
* resolving upgrades.
* resolving upgrades. We check for a version of codeql that has all three features.
*/
export async function hasNondestructiveUpgradeCapabilities(qs: qsClient.QueryServerClient): Promise<boolean> {
// TODO change to actual version when known
// Note it is probably something 2.4.something
return semver.gte(await qs.cliServer.getVersion(), '2.4.1');
}
@@ -46,6 +44,9 @@ export async function compileDatabaseUpgradeSequence(qs: qsClient.QueryServerCli
if (db.contents === undefined || db.contents.dbSchemeUri === undefined) {
throw new Error('Database is invalid, and cannot be upgraded.');
}
if (!hasNondestructiveUpgradeCapabilities(qs)) {
throw new Error('The version of codeql is to old to run non-destructive upgrades.');
}
// If possible just compile the upgrade sequence
return await qs.sendRequest(messages.compileUpgradeSequence, {
upgradeTempDir: currentUpgradeTmp.name,
@@ -72,7 +73,7 @@ async function compileDatabaseUpgrade(
}
// We have the upgrades we want but compileUpgrade
// requires searching for them. So we use the parent directories of the upgrades
// as the uograde path.
// as the upgrade path.
const parentDirs = resolvedSequence.map(dir => path.dirname(dir));
const uniqueParentDirs = new Set(parentDirs);
progress({