From 4a568728c0ca72d4dac9f1abf00b00bd815d4d2e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20H=C3=BCbleitner?= Date: Tue, 27 Aug 2019 00:52:51 +0200 Subject: [PATCH] isOutdated in NPMExtension --- package.json | 8 +++- src/backend/UpdateManger.ts | 95 +++++++++++++++++++++---------------- 2 files changed, 60 insertions(+), 43 deletions(-) diff --git a/package.json b/package.json index 309e192..0479bdf 100644 --- a/package.json +++ b/package.json @@ -51,5 +51,11 @@ }, "files": [ "lib/**/*" - ] + ], + "main": "index.js", + "directories": { + "lib": "lib", + "test": "test" + }, + "keywords": [] } diff --git a/src/backend/UpdateManger.ts b/src/backend/UpdateManger.ts index 7c516e7..f0bf5f9 100644 --- a/src/backend/UpdateManger.ts +++ b/src/backend/UpdateManger.ts @@ -4,10 +4,11 @@ import { GitUpdater, RepoFolderStatus } from "./GitUpdater"; import { FrontblockCherryPicker } from "git-cherrypicker"; import * as Logger from 'log4js' import * as path from "path"; -import * as rimraf from "rimraf" +import * as rmrf from "rimraf" import { FrontblockAdmin } from "./FrontblockAdmin"; import { TableDefiniton } from "frontblock-generic/Admin"; import { promises as fs, mkdirSync as mkdir } from "fs" +import { version } from "punycode"; var exec = require('child-process-promise').exec; @@ -45,7 +46,7 @@ const SharedStatus = type SharedStatus = { name: string installed: boolean - outdated?: boolean + outdated: boolean } abstract class Extension{ @@ -108,17 +109,19 @@ export abstract class FSExtension extends Extension{ const installed = await this.isInstalled() + const outdated = await this.isOutdated() const empty = await this.isEmpty() return { name: this.name, prefix: this.prefix, installed: installed, + outdated: outdated, empty: empty } } public async uninstall(): Promise{ - return await rimraf(path.resolve(this.prefix, this.name)) + return await rmrf(path.resolve(this.prefix, this.name)) } public async isEmpty(): Promise{ @@ -140,9 +143,7 @@ export abstract class FSExtension extends Extension{ @@ -154,31 +155,19 @@ export class NPMExtension extends FSExtension{ } public async status(): Promise { - const empty = await this.isEmpty() - const installed = await this.isInstalled() - const { _error, _stdout, _stderr } = await exec('npm outdated --prefix ' + this.prefix + " --json" + ' ' + this.name) - const { error, stdout, stderr } = await exec('npm info --prefix ' + this.prefix + ' ' + this.name + " version") - - const status = { - empty: empty, - installed: installed, - name: this.name, - prefix: this.prefix + const fsStatus = await super.status() + const { error, + stdout, + stderr } = await exec('npm info --prefix ' + this.prefix + ' ' + this.name + " version") + + if(error){ + logger.warn(stderr) + return fsStatus } - - if(_error | error){ - logger.warn( _stderr, stderr) - return status - } - - const statusJson:{latest:string, location: string, wanted:string} = JSON.parse(_stdout) return { - ...status, - current: stdout, - latest: statusJson.latest, - wanted: statusJson.wanted, - outdated: statusJson.wanted !== stdout + ...fsStatus, + version: stdout } } @@ -218,16 +207,37 @@ export class NPMExtension extends FSExtension{ } } - public async isOutdated(): Promise { //TODO - const status = await this.status() - return !((status.wanted && status.current) && status.wanted === status.current) + public async isOutdated(): Promise { + try { + const { + error, + stdout, + stderr } = await exec('npm outdated --prefix ' + this.prefix + " --json" + ' ' + this.name) + if (error){ + logger.warn(stderr) + return false + } + const status = JSON.parse(stdout) + if (status){ + const outdated = (Object.keys(status).length > 0) + if (outdated){ + return true + } + } + return false + } catch (error) { + return false + } } } -export type GitRef = string -export type GitExtensionState = UnknownState | GitRef +export type GitStatus = FSStatus & { + current?: string + wanted?: string + latest?: string +} -export class GitExtension extends Extension{ +export class GitExtension extends FSExtension{ constructor( name:string, version = "latest", @@ -236,16 +246,17 @@ export class GitExtension extends Extension{ super(name, version) } - public async install(): Promise { - return 'unknown' - } - - public async uninstall(): Promise { - return 'unknown' + public async status(): Promise{ + } - public async update(): Promise { - return 'unknown' + public async install(): Promise { + return true + } + + + public async update(): Promise { + return true } public async isOutdated(): Promise {