Skip to content

Commit cfcbdcd

Browse files
authored
Merge pull request #170 from jcreedcmu/fix-upgrades
Fix auto-upgrade script path
2 parents 1dffeb9 + a1f0af9 commit cfcbdcd

File tree

3 files changed

+21
-16
lines changed

3 files changed

+21
-16
lines changed

extensions/ql-vscode/src/databases-ui.ts

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import * as path from 'path';
22
import { DisposableObject } from "semmle-vscode-utils";
33
import { commands, Event, EventEmitter, ExtensionContext, ProviderResult, TreeDataProvider, TreeItem, Uri, window } from "vscode";
44
import * as cli from './cli';
5-
import { DatabaseItem, DatabaseManager } from "./databases";
5+
import { DatabaseItem, DatabaseManager, getUpgradesDirectories } from "./databases";
66
import { logger } from "./logging";
77
import { clearCacheInDatabase, upgradeDatabase, UserCancellationException } from "./queries";
88
import * as qsClient from './queryserver-client';
@@ -189,15 +189,10 @@ export class DatabaseUI extends DisposableObject {
189189
logger.log('Could not determine target dbscheme to upgrade to.');
190190
return;
191191
}
192-
193-
const parentDirs = scripts.map(dir => path.dirname(dir));
194-
const uniqueParentDirs = new Set(parentDirs);
195192
const targetDbSchemeUri = Uri.file(finalDbscheme);
196193

197-
198-
const upgradesDirectories = Array.from(uniqueParentDirs).map(filePath => Uri.file(filePath));
199194
try {
200-
await upgradeDatabase(this.queryServer, databaseItem, targetDbSchemeUri, upgradesDirectories);
195+
await upgradeDatabase(this.queryServer, databaseItem, targetDbSchemeUri, getUpgradesDirectories(scripts));
201196
}
202197
catch (e) {
203198
if (e instanceof UserCancellationException) {

extensions/ql-vscode/src/databases.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -629,3 +629,13 @@ export class DatabaseManager extends DisposableObject {
629629
this.ctx.workspaceState.update(DB_LIST, this._databaseItems.map(item => item.getPersistedState()));
630630
}
631631
}
632+
633+
/**
634+
* Get the set of directories containing upgrades, given a list of
635+
* scripts returned by the cli's upgrade resolution.
636+
*/
637+
export function getUpgradesDirectories(scripts: string[]): vscode.Uri[] {
638+
const parentDirs = scripts.map(dir => path.dirname(dir));
639+
const uniqueParentDirs = new Set(parentDirs);
640+
return Array.from(uniqueParentDirs).map(filePath => vscode.Uri.file(filePath));
641+
}

extensions/ql-vscode/src/queries.ts

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import * as sarif from 'sarif';
55
import * as tmp from 'tmp';
66
import * as vscode from 'vscode';
77
import * as cli from './cli';
8-
import { DatabaseItem } from './databases';
8+
import { DatabaseItem, getUpgradesDirectories } from './databases';
99
import * as helpers from './helpers';
1010
import { DatabaseInfo, SortState, ResultsInfo, SortedResultSetInfo } from './interface-types';
1111
import { logger } from './logging';
@@ -388,18 +388,18 @@ export async function clearCacheInDatabase(qs: qsClient.QueryServerClient, dbIte
388388
title: "Clearing Cache",
389389
cancellable: false,
390390
}, (progress, token) =>
391-
qs.sendRequest(messages.clearCache, params, token, progress)
391+
qs.sendRequest(messages.clearCache, params, token, progress)
392392
);
393393
}
394394

395395
/**
396-
*
396+
*
397397
* @param filePath This needs to be equivalent to java Path.toRealPath(NO_FOLLOW_LINKS)
398-
*
398+
*
399399
*/
400400
async function convertToQlPath(filePath: string): Promise<string> {
401401
if (process.platform === "win32") {
402-
402+
403403
if (path.parse(filePath).root === filePath) {
404404
// Java assumes uppercase drive letters are canonical.
405405
return filePath.toUpperCase();
@@ -447,7 +447,7 @@ async function checkDbschemeCompatibility(
447447
const searchPath = helpers.getOnDiskWorkspaceFolders();
448448

449449
if (query.dbItem.contents !== undefined && query.dbItem.contents.dbSchemeUri !== undefined) {
450-
const info = await cliServer.resolveUpgrades(query.dbItem.contents.dbSchemeUri.fsPath, searchPath);
450+
const { scripts, finalDbscheme } = await cliServer.resolveUpgrades(query.dbItem.contents.dbSchemeUri.fsPath, searchPath);
451451
async function hash(filename: string): Promise<string> {
452452
return crypto.createHash('sha256').update(await fs.readFile(filename)).digest('hex');
453453
}
@@ -463,7 +463,7 @@ async function checkDbschemeCompatibility(
463463
const dbschemeOfLib = await hash(query.queryDbscheme);
464464

465465
// info.finalDbscheme is which database we're able to upgrade to
466-
const upgradableTo = await hash(info.finalDbscheme);
466+
const upgradableTo = await hash(finalDbscheme);
467467

468468
if (upgradableTo != dbschemeOfLib) {
469469
logger.log(`Query ${query.program.queryPath} expects database scheme ${query.queryDbscheme}, but database has scheme ${query.program.dbschemePath}, and no upgrade path found`);
@@ -476,8 +476,8 @@ async function checkDbschemeCompatibility(
476476
await upgradeDatabase(
477477
qs,
478478
query.dbItem,
479-
vscode.Uri.file(info.finalDbscheme),
480-
searchPath.map(file => vscode.Uri.file(file))
479+
vscode.Uri.file(finalDbscheme),
480+
getUpgradesDirectories(scripts)
481481
);
482482
}
483483
}

0 commit comments

Comments
 (0)