From dce9ecbc37bc473eb595324a67c387f464efa5e2 Mon Sep 17 00:00:00 2001 From: Felix Date: Wed, 17 Aug 2016 18:24:19 +0200 Subject: [PATCH] Update - Updater finally works - Removed two unneeded libs - Updated version --- package.json | 5 ++- src/process.js | 6 +--- update.js | 84 +++++++++++++++++++++++++++++++++++++++++++++ updater.js | 93 -------------------------------------------------- 4 files changed, 87 insertions(+), 101 deletions(-) create mode 100644 update.js delete mode 100644 updater.js diff --git a/package.json b/package.json index 54e2fe1..e45b08a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "POGOServer", - "version": "0.2.7", + "version": "0.2.8", "description": "", "repository": { "type": "git", @@ -29,10 +29,9 @@ "pogo-asset-downloader": "^0.2.1", "node-pogo-protos": "^1.3.0", "path": "^0.12.7", - "rimraf": "^2.5.4", "directory-tree": "^1.1.0", "nodegit": "^0.14.1", - "fs-exists-sync": "^0.1.0" + "fs-extra": "^0.30.0" }, "devDependencies": {} } \ No newline at end of file diff --git a/src/process.js b/src/process.js index 934fef2..33feb3b 100644 --- a/src/process.js +++ b/src/process.js @@ -2,8 +2,6 @@ import fs from "fs"; import * as CFG from "../cfg"; -import updater from "../updater"; - const helpMessage = fs.readFileSync(".help", "utf8"); export function processCommand(cmd, data) { @@ -41,9 +39,7 @@ export function processCommand(cmd, data) { this.print(`Saved ${length} player${length === 1 ? "": "s"} into database!`); break; case "/update": - updater().then(() => { - // bla - }); + eval(fs.readFileSync("update.js", "utf8")); break; default: this.print(`${cmd} is not a valid command!`, 31); diff --git a/update.js b/update.js new file mode 100644 index 0000000..0fada23 --- /dev/null +++ b/update.js @@ -0,0 +1,84 @@ +"use strict"; + +var fs = require("fs"); +var fse = require("fs-extra"); +var git = require("nodegit"); +var dirTree = require("directory-tree"); + +let tmpDir = "./tmp"; +let cloneDir = JSON.parse(fs.readFileSync("./package.json")).repository.url; + +let ignore = [".git", "cfg.js", "updater.js"]; + +function skip() { + return new Promise((resolve) => { + fse.removeSync(tmpDir); + console.log(`Skipped update to version ${newVersion}`); + resolve(); + }); +} + +function updateProject() { + return new Promise((resolve) => { + let newFiles = dirTree("./tmp"); + recurse(newFiles.children); + resolve(); + }); +} + +function recurse(parent) { + for (let key in parent) { + let name = parent[key].name; + if (ignore.indexOf(name) > -1) continue; + let isDir = parent[key].hasOwnProperty("children"); + try { + if (!isDir) { + fse.outputFileSync(parent[key].path.substring(4), fs.readFileSync(parent[key].path)); + } + else { + recurse(parent[key].children); + } + } catch (e) { console.log(e); } + }; +} + +(function() { + return new Promise((resolve) => { + console.log("Preparing to update.."); + setTimeout(() => { + fse.removeSync(tmpDir); + let currentVersion = JSON.parse(fs.readFileSync("./package.json")).version; + console.log(`Your current version is ${currentVersion}!`); + setTimeout(() => { + console.log("Fetching latest version.."); + git.Clone(cloneDir, tmpDir).then((res, rofl) => { + let newVersion = null; + try { + newVersion = JSON.parse(fs.readFileSync(`${tmpDir}/package.json`)).version; + } catch (e) { + console.log("Version check failed!"); + return resolve(); + } + if (currentVersion === newVersion) { + console.log(`You are already running the latest version ${currentVersion}!`); + skip().then(resolve); + return void 0; + } + else if (currentVersion > newVersion) { + console.log(`Your version ${currentVersion} is newer than ${newVersion}!`); + skip().then(resolve); + return void 0; + } + console.log(`Latest version is ${newVersion}`); + console.log(`Updating to version ${newVersion}`); + updateProject().then(() => { + fse.removeSync(tmpDir); + console.log("Update successfully completed, please restart!"); + resolve(); + }); + }); + }, 2e3); + + }, 1e3); + }); +})(); \ No newline at end of file diff --git a/updater.js b/updater.js deleted file mode 100644 index a861d20..0000000 --- a/updater.js +++ /dev/null @@ -1,93 +0,0 @@ -import fs from "fs"; -import rimraf from "rimraf"; -import git from "nodegit"; -import dirTree from "directory-tree"; -import exists from "fs-exists-sync"; - -let tmpDir = "./tmp"; -let cloneDir = JSON.parse(fs.readFileSync("./package.json")).repository.url; - -let ignore = [".git", "cfg.js"]; - -function deleteFolder(path) { - return new Promise((resolve) => { - try { - rimraf(path, (error) => { - resolve(); - }); - } catch (e) { console.log(e); } - }); -} - -function deleteFile(path) { - if (exists(path)) { - fs.unlinkSync(path); - } -} - -function skip() { - return new Promise((resolve) => { - deleteFolder(tmpDir).then(() => { - console.log(`Skipped update to version ${newVersion}`); - resolve(); - }); - }); -} - -function updateProject() { - return new Promise((resolve) => { - let newFiles = dirTree("./tmp"); - // only walk root tree - for (let node of newFiles.children) { - let name = node.name; - if (ignore.indexOf(name) > -1) continue; - let isDir = node.hasOwnProperty("children"); - if (isDir) console.log("Path: ", name); - else console.log("File: ", name); - if (isDir) deleteFolder(name); - else deleteFile(name); - }; - resolve(); - }); -} - -export function update() { - return new Promise((resolve) => { - console.log("Preparing to update.."); - setTimeout(() => { - deleteFolder(tmpDir).then(() => { - let currentVersion = JSON.parse(fs.readFileSync("./package.json")).version; - console.log(`Your current version is ${currentVersion}!`); - setTimeout(() => { - console.log("Fetching latest version.."); - git.Clone(cloneDir, tmpDir).then((res, rofl) => { - let newVersion = null; - try { - newVersion = JSON.parse(fs.readFileSync(`${tmpDir}/package.json`)).version; - } catch (e) { - console.log("Version check failed!"); - return resolve(); - } - if (currentVersion === newVersion) { - console.log(`You are already running the latest version ${currentVersion}!`); - skip().then(resolve); - return void 0; - } - else if (currentVersion > newVersion) { - console.log(`Your version ${currentVersion} is newer than ${newVersion}!`); - skip().then(resolve); - return void 0; - } - console.log(`Updating to version ${newVersion}`); - updateProject().then(() => { - deleteFolder(tmpDir).then(() => { - console.log("Update successfully completed, please restart!"); - resolve(); - }); - }); - }); - }, 2e3); - }); - }, 1e3); - }); -} \ No newline at end of file