From 6ea0fc4e2f358cc7b9e5350b13a4f44023e5825f Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Wed, 22 Feb 2017 15:57:31 -0500 Subject: [PATCH] changed file schema to be name only, storing them in object sets referencing their applicable versions --- src/upgrade.js | 50 ++++++++++++++++--- ...recent-tids.js => category_recent_tids.js} | 0 ...ookmarks.js => favourites_to_bookmarks.js} | 0 ...07-flags-refactor.js => flags_refactor.js} | 0 ...ys.js => global_and_user_language_keys.js} | 0 ...ics.js => sorted_set_for_pinned_topics.js} | 0 ...ies.js => sorted_sets_for_post_replies.js} | 0 7 files changed, 44 insertions(+), 6 deletions(-) rename src/upgrades/{20160922-category-recent-tids.js => category_recent_tids.js} (100%) rename src/upgrades/{20161008-favourites-to-bookmarks.js => favourites_to_bookmarks.js} (100%) rename src/upgrades/{20161207-flags-refactor.js => flags_refactor.js} (100%) rename src/upgrades/{20161122-global-and-user-language-keys.js => global_and_user_language_keys.js} (100%) rename src/upgrades/{20161125-sorted-set-for-pinned-topics.js => sorted_set_for_pinned_topics.js} (100%) rename src/upgrades/{20161014-sorted-sets-for-post-replies.js => sorted_sets_for_post_replies.js} (100%) diff --git a/src/upgrade.js b/src/upgrade.js index 1aee44d060..be303b4876 100644 --- a/src/upgrade.js +++ b/src/upgrade.js @@ -4,19 +4,54 @@ var async = require('async'); var path = require('path'); +var db = require('./database'); var utils = require('../public/src/utils'); -var Upgrade = {}; +var Upgrade = { + available: [ + { + version: "1.2.0", + upgrades: ['category_recent_tids'] + }, + { + version: "1.3.0", + upgrades: ['favourites_to_bookmarks', 'sorted_sets_for_post_replies'] + }, + { + version: "1.4.0", + upgrades: ['global_and_user_language_keys', 'sorted_set_for_pinned_topics'] + }, + { + version: "1.5.0", + upgrades: ['flags_refactor'] + } + ] +}; Upgrade.run = function (callback) { process.stdout.write('\nParsing upgrade scripts... '); + var queue = []; + var skipped = 0; - utils.walk(path.join(__dirname, './upgrades'), function (err, files) { + // Retrieve list of upgrades that have already been run + db.getSortedSetRange('schemaLog', 0, -1, function (err, completed) { if (err) { return callback(err); } - Upgrade.process(files, callback); + queue = Upgrade.available.reduce(function (memo, cur) { + cur.upgrades.forEach(function (filename) { + if (completed.indexOf(filename) === -1) { + memo.push(path.join(__dirname, './upgrades', filename)); + } else { + ++skipped; + } + }); + + return memo; + }, queue); + + Upgrade.process(queue, skipped, callback); }); }; @@ -35,12 +70,12 @@ Upgrade.runSingle = function (query, callback) { return callback(err); } - Upgrade.process(files, callback); + Upgrade.process(files, 0, callback); }); }; -Upgrade.process = function (files, callback) { - process.stdout.write('OK'.green + String(' ' + files.length).cyan + ' script(s) found\n'.cyan); +Upgrade.process = function (files, skipCount, callback) { + process.stdout.write('OK'.green + ' | '.reset + String(files.length).cyan + ' script(s) found'.cyan + (skipCount > 0 ? ', '.cyan + String(skipCount).cyan + ' skipped'.cyan : '') + '\n'.reset); // Do I need to sort the files here? we'll see. // sort(); @@ -58,6 +93,9 @@ Upgrade.process = function (files, callback) { return next(err); } + // Record success in schemaLog + db.sortedSetAdd('schemaLog', Date.now(), path.basename(file, '.js')); + process.stdout.write('OK\n'.green); next(); }); diff --git a/src/upgrades/20160922-category-recent-tids.js b/src/upgrades/category_recent_tids.js similarity index 100% rename from src/upgrades/20160922-category-recent-tids.js rename to src/upgrades/category_recent_tids.js diff --git a/src/upgrades/20161008-favourites-to-bookmarks.js b/src/upgrades/favourites_to_bookmarks.js similarity index 100% rename from src/upgrades/20161008-favourites-to-bookmarks.js rename to src/upgrades/favourites_to_bookmarks.js diff --git a/src/upgrades/20161207-flags-refactor.js b/src/upgrades/flags_refactor.js similarity index 100% rename from src/upgrades/20161207-flags-refactor.js rename to src/upgrades/flags_refactor.js diff --git a/src/upgrades/20161122-global-and-user-language-keys.js b/src/upgrades/global_and_user_language_keys.js similarity index 100% rename from src/upgrades/20161122-global-and-user-language-keys.js rename to src/upgrades/global_and_user_language_keys.js diff --git a/src/upgrades/20161125-sorted-set-for-pinned-topics.js b/src/upgrades/sorted_set_for_pinned_topics.js similarity index 100% rename from src/upgrades/20161125-sorted-set-for-pinned-topics.js rename to src/upgrades/sorted_set_for_pinned_topics.js diff --git a/src/upgrades/20161014-sorted-sets-for-post-replies.js b/src/upgrades/sorted_sets_for_post_replies.js similarity index 100% rename from src/upgrades/20161014-sorted-sets-for-post-replies.js rename to src/upgrades/sorted_sets_for_post_replies.js