From 0d2fa1323c6366a6e853727b1e95da510bad47ab Mon Sep 17 00:00:00 2001 From: Benjamin Pasero Date: Fri, 30 Nov 2018 15:04:02 +0100 Subject: [PATCH] storage - fix smoketest --- .../storage/node/storageMainService.ts | 124 ++++++++++-------- 1 file changed, 72 insertions(+), 52 deletions(-) diff --git a/src/vs/platform/storage/node/storageMainService.ts b/src/vs/platform/storage/node/storageMainService.ts index 1c14335dc68..d81742e026d 100644 --- a/src/vs/platform/storage/node/storageMainService.ts +++ b/src/vs/platform/storage/node/storageMainService.ts @@ -174,7 +174,13 @@ export class StorageMainService extends Disposable implements IStorageMainServic private migrateGlobalStorage(): Thenable { this.logService.info('[storage] migrating global storage from localStorage into SQLite'); - return new Promise((resolve, reject) => { + const localStorageDBBackup = join(this.environmentService.userDataPath, 'Local Storage', 'file__0.localstorage.vscmig'); + + return exists(localStorageDBBackup).then(exists => { + if (!exists) { + return Promise.resolve(); // return if there is no DB to migrate from + } + return readdir(this.environmentService.extensionsPath).then(extensions => { const supportedKeys = new Map(); [ @@ -246,79 +252,93 @@ export class StorageMainService extends Disposable implements IStorageMainServic } }); - const handleSuffixKey = (row, key: string, suffix: string) => { - if (endsWith(key, suffix.toLowerCase())) { - const value: string = row.value.toString('utf16le'); - const normalizedKey = key.substring(0, key.length - suffix.length) + suffix; + return import('vscode-sqlite3').then(sqlite3 => { - this.store(normalizedKey, value); + return new Promise((resolve, reject) => { + const handleSuffixKey = (row, key: string, suffix: string) => { + if (endsWith(key, suffix.toLowerCase())) { + const value: string = row.value.toString('utf16le'); + const normalizedKey = key.substring(0, key.length - suffix.length) + suffix; - return true; - } + this.store(normalizedKey, value); - return false; - }; + return true; + } - return import('vscode-sqlite3').then(sqlite3 => { - const localStorageDBBackup = join(this.environmentService.userDataPath, 'Local Storage', 'file__0.localstorage.vscmig'); - const db: Database = new (sqlite3.Database)(localStorageDBBackup, error => { - if (error) { - return db ? db.close(() => reject(error)) : reject(error); - } + return false; + }; - db.all('SELECT key, value FROM ItemTable', (error, rows) => { + const db: Database = new (sqlite3.Database)(localStorageDBBackup, error => { if (error) { - return db.close(() => reject(error)); + if (db) { + db.close(); + } + + return reject(error); } - rows.forEach(row => { - let key: string = row.key; - if (key.indexOf('storage://global/') !== 0) { - return; // not a global key + db.all('SELECT key, value FROM ItemTable', (error, rows) => { + if (error) { + db.close(); + + return reject(error); } - // convert storage://global/colorthemedata => colorthemedata - key = key.substr('storage://global/'.length); + try { + rows.forEach(row => { + let key: string = row.key; + if (key.indexOf('storage://global/') !== 0) { + return; // not a global key + } - const supportedKey = supportedKeys.get(key); - if (supportedKey) { - const value: string = row.value.toString('utf16le'); + // convert storage://global/colorthemedata => colorthemedata + key = key.substr('storage://global/'.length); - this.store(supportedKey, value); - } + const supportedKey = supportedKeys.get(key); + if (supportedKey) { + const value: string = row.value.toString('utf16le'); - // dynamic values - else if ( - endsWith(key, '.hidden') || - startsWith(key, 'experiments.') - ) { - const value: string = row.value.toString('utf16le'); + this.store(supportedKey, value); + } - this.store(key, value); - } + // dynamic values + else if ( + endsWith(key, '.hidden') || + startsWith(key, 'experiments.') + ) { + const value: string = row.value.toString('utf16le'); - // fix lowercased ".sessionCount" - else if (handleSuffixKey(row, key, '.sessionCount')) { } + this.store(key, value); + } - // fix lowercased ".lastSessionDate" - else if (handleSuffixKey(row, key, '.lastSessionDate')) { } + // fix lowercased ".sessionCount" + else if (handleSuffixKey(row, key, '.sessionCount')) { } - // fix lowercased ".skipVersion" - else if (handleSuffixKey(row, key, '.skipVersion')) { } + // fix lowercased ".lastSessionDate" + else if (handleSuffixKey(row, key, '.lastSessionDate')) { } - // fix lowercased ".isCandidate" - else if (handleSuffixKey(row, key, '.isCandidate')) { } + // fix lowercased ".skipVersion" + else if (handleSuffixKey(row, key, '.skipVersion')) { } - // fix lowercased ".editedCount" - else if (handleSuffixKey(row, key, '.editedCount')) { } + // fix lowercased ".isCandidate" + else if (handleSuffixKey(row, key, '.isCandidate')) { } - // fix lowercased ".editedDate" - else if (handleSuffixKey(row, key, '.editedDate')) { } - }); + // fix lowercased ".editedCount" + else if (handleSuffixKey(row, key, '.editedCount')) { } - db.close(); + // fix lowercased ".editedDate" + else if (handleSuffixKey(row, key, '.editedDate')) { } + }); - resolve(); + db.close(); + } catch (error) { + db.close(); + + return reject(error); + } + + resolve(); + }); }); }); }); -- GitLab