Skip to content
This repository has been archived by the owner on Jan 24, 2022. It is now read-only.

Enhance cli outputs on error #229

Merged
merged 6 commits into from
Oct 15, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion packages/cli/src/bin/errors.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import ErrorHandler from '../models/ErrorHandler'
import ErrorHandler from '../models/errors/ErrorHandler'

export default function registerErrorHandler(program) {
process.on('unhandledRejection', reason => new ErrorHandler(reason, program).call())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ export default class ErrorHandler {
log.error(errorMessage)
}
else log.error(this.error.stack)
if (this.error.cb) this.error.cb()

process.exit(1)
}
}
8 changes: 8 additions & 0 deletions packages/cli/src/models/errors/ScriptError.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
'use strict'

export default class ScriptError extends Error {
constructor(message, cb) {
super(message)
this.cb = cb
}
}
16 changes: 14 additions & 2 deletions packages/cli/src/models/files/ZosNetworkFile.js
Original file line number Diff line number Diff line change
Expand Up @@ -273,7 +273,19 @@ export default class ZosNetworkFile {
}

write() {
fs.writeJson(this.fileName, this.data)
log.info(`Successfully written ${this.fileName}`)
if(this._hasChanged()) {
const exists = this._exists()
fs.writeJson(this.fileName, this.data)
exists ? log.info(`Updated ${this.fileName}`) : log.info(`Created ${this.fileName}`)
}
}

_hasChanged() {
const currentNetworkFile = fs.parseJsonIfExists(this.fileName)
return !_.isEqual(this.data, currentNetworkFile)
}

_exists() {
return !!fs.parseJsonIfExists(this.fileName)
}
}
3 changes: 2 additions & 1 deletion packages/cli/src/models/network/NetworkBaseController.js
Original file line number Diff line number Diff line change
Expand Up @@ -236,7 +236,8 @@ export default class NetworkBaseController {
await Verifier.verifyAndPublish(remote, { contractName, compilerVersion, optimizer, optimizerRuns, contractSource, contractAddress })
}

writeNetworkPackage() {
writeNetworkPackageIfNeeded() {
this.networkFile.write()
}

}
16 changes: 11 additions & 5 deletions packages/cli/src/scripts/create.js
Original file line number Diff line number Diff line change
@@ -1,16 +1,22 @@
import stdout from '../utils/stdout';
import ControllerFor from '../models/network/ControllerFor';
import ScriptError from '../models/errors/ScriptError'

export default async function createProxy({ packageName, contractAlias, initMethod, initArgs, network, txParams = {}, force = false, networkFile = undefined }) {
if (!contractAlias) throw Error('A contract alias must be provided to create a new proxy.')

const controller = ControllerFor(network, txParams, networkFile)
if (controller.isLib) throw Error('Cannot create a proxy for a library project')

await controller.checkContractDeployed(packageName, contractAlias, !force);
const proxy = await controller.createProxy(packageName, contractAlias, initMethod, initArgs);
try {
await controller.checkContractDeployed(packageName, contractAlias, !force);
const proxy = await controller.createProxy(packageName, contractAlias, initMethod, initArgs);
stdout(proxy.address);
controller.writeNetworkPackageIfNeeded()

controller.writeNetworkPackage();
stdout(proxy.address);
return proxy;
return proxy;
} catch(error) {
const cb = () => controller.writeNetworkPackageIfNeeded()
throw new ScriptError(error.message, cb)
}
}
10 changes: 8 additions & 2 deletions packages/cli/src/scripts/freeze.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,13 @@
import ControllerFor from '../models/network/ControllerFor'
import ScriptError from '../models/errors/ScriptError'

export default async function freeze({ network, txParams = {}, networkFile = undefined}) {
const controller = new ControllerFor(network, txParams, networkFile)
await controller.freeze();
controller.writeNetworkPackage();
try {
await controller.freeze();
controller.writeNetworkPackageIfNeeded()
} catch(error) {
const cb = () => controller.writeNetworkPackageIfNeeded()
throw new ScriptError(error.message, cb)
}
}
10 changes: 8 additions & 2 deletions packages/cli/src/scripts/pull.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,13 @@
import ControllerFor from '../models/network/ControllerFor'
import ScriptError from '../models/errors/ScriptError'

export default async function pull({ network, txParams = {}, networkFile = undefined }) {
const controller = ControllerFor(network, txParams, networkFile)
await controller.pullRemoteStatus()
controller.writeNetworkPackage()
try {
await controller.pullRemoteStatus()
controller.writeNetworkPackageIfNeeded()
} catch(error) {
const cb = () => controller.writeNetworkPackageIfNeeded()
throw new ScriptError(error.message, cb)
}
}
9 changes: 6 additions & 3 deletions packages/cli/src/scripts/push.js
Original file line number Diff line number Diff line change
@@ -1,14 +1,17 @@
import stdout from '../utils/stdout';
import ControllerFor from "../models/network/ControllerFor";
import ScriptError from '../models/errors/ScriptError'

export default async function push({ network, deployLibs, reupload = false, force = false, txParams = {}, networkFile = undefined }) {
const controller = ControllerFor(network, txParams, networkFile);

try {
if (deployLibs && !controller.isLib) await controller.deployLibs();
await controller.push(reupload, force);
stdout(controller.isLib ? controller.packageAddress : controller.appAddress);
} finally {
controller.writeNetworkPackage();
controller.writeNetworkPackageIfNeeded()
} catch(error) {
const cb = () => controller.writeNetworkPackageIfNeeded()
throw new ScriptError(error.message, cb)
}
}
7 changes: 5 additions & 2 deletions packages/cli/src/scripts/set-admin.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import stdout from '../utils/stdout';
import ControllerFor from '../models/network/ControllerFor'
import ScriptError from '../models/errors/ScriptError'

export default async function setAdmin({ newAdmin, packageName, contractAlias, proxyAddress, network, txParams = {}, networkFile = undefined}) {
if (!contractAlias && !proxyAddress) {
Expand All @@ -11,7 +12,9 @@ export default async function setAdmin({ newAdmin, packageName, contractAlias, p
try {
const proxies = await controller.setProxiesAdmin(packageName, contractAlias, proxyAddress, newAdmin);
proxies.forEach(proxy => stdout(proxy.address));
} finally {
controller.writeNetworkPackage();
controller.writeNetworkPackageIfNeeded()
} catch(error) {
const cb = () => controller.writeNetworkPackageIfNeeded()
throw new ScriptError(error, cb)
}
}
7 changes: 5 additions & 2 deletions packages/cli/src/scripts/update.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import stdout from '../utils/stdout';
import ControllerFor from '../models/network/ControllerFor'
import ScriptError from '../models/errors/ScriptError'

export default async function update({ packageName, contractAlias, proxyAddress, initMethod, initArgs, all, network, force = false, txParams = {}, networkFile = undefined}) {
if (!packageName && !contractAlias && !proxyAddress && !all) {
Expand All @@ -12,7 +13,9 @@ export default async function update({ packageName, contractAlias, proxyAddress,
await controller.checkLocalContractsDeployed(!force);
const proxies = await controller.upgradeProxies(packageName, contractAlias, proxyAddress, initMethod, initArgs);
proxies.forEach(proxy => stdout(proxy.address));
} finally {
controller.writeNetworkPackage();
controller.writeNetworkPackageIfNeeded()
} catch(error) {
const cb = () => controller.writeNetworkPackageIfNeeded()
throw new ScriptError(error, cb)
}
}
2 changes: 1 addition & 1 deletion packages/cli/test/commands/share.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ import * as setAdmin from '../../src/scripts/set-admin';

import * as runWithTruffle from '../../src/utils/runWithTruffle';
import Session from '../../src/models/network/Session';
import ErrorHandler from '../../src/models/ErrorHandler';
import ErrorHandler from '../../src/models/errors/ErrorHandler';
import program from '../../src/bin/program';

const assert = require('chai').assert
Expand Down