From f62762bd0e5d3be443e412df1829c2d89ef4640e Mon Sep 17 00:00:00 2001 From: Amir Bandeali Date: Wed, 14 Feb 2018 14:03:12 -0800 Subject: Add contracts to compiler options --- packages/deployer/src/cli.ts | 21 +++++++++++++++++++++ packages/deployer/src/compiler.ts | 8 ++++++-- packages/deployer/src/utils/types.ts | 1 + 3 files changed, 28 insertions(+), 2 deletions(-) diff --git a/packages/deployer/src/cli.ts b/packages/deployer/src/cli.ts index 0fe412bdf..5e0f2145b 100644 --- a/packages/deployer/src/cli.ts +++ b/packages/deployer/src/cli.ts @@ -14,6 +14,7 @@ const DEFAULT_ARTIFACTS_DIR = path.resolve('artifacts'); const DEFAULT_NETWORK_ID = 50; const DEFAULT_JSONRPC_PORT = 8545; const DEFAULT_GAS_PRICE = (10 ** 9 * 2).toString(); +const DEFAULT_COMPILE_CONTRACTS = '*'; /** * Compiles all contracts with options passed in through CLI. @@ -25,6 +26,7 @@ async function onCompileCommand(argv: CliOptions): Promise { networkId: argv.networkId, optimizerEnabled: argv.shouldOptimize ? 1 : 0, artifactsDir: argv.artifactsDir, + contractsToCompile: generateContractsToCompileSet(argv.contracts), }; await commands.compileAsync(opts); } @@ -43,6 +45,7 @@ async function onMigrateCommand(argv: CliOptions): Promise { networkId, optimizerEnabled: argv.shouldOptimize ? 1 : 0, artifactsDir: argv.artifactsDir, + contractsToCompile: generateContractsToCompileSet(argv.contracts), }; await commands.compileAsync(compilerOpts); @@ -72,6 +75,7 @@ async function onDeployCommand(argv: CliOptions): Promise { networkId, optimizerEnabled: argv.shouldOptimize ? 1 : 0, artifactsDir: argv.artifactsDir, + contractsToCompile: generateContractsToCompileSet(argv.contracts), }; await commands.compileAsync(compilerOpts); @@ -89,6 +93,18 @@ async function onDeployCommand(argv: CliOptions): Promise { const deployerArgs = deployerArgsString.split(','); await commands.deployAsync(argv.contract, deployerArgs, deployerOpts); } +/** + * Creates a set of contracts to compile. + * @param contracts Comma separated list of contracts to compile + */ +function generateContractsToCompileSet(contracts: string): Set { + const contractsToCompile = new Set(); + const contractsArray = contracts.split(','); + _.forEach(contracts, contractName => { + contractsToCompile.add(contractName); + }); + return contractsToCompile; +} /** * Provides extra required options for deploy command. * @param yargsInstance yargs instance provided in builder function callback. @@ -144,6 +160,11 @@ function deployCommandBuilder(yargsInstance: any) { type: 'string', description: 'account to use for deploying contracts', }) + .option('contracts', { + type: 'string', + default: DEFAULT_COMPILE_CONTRACTS, + description: 'comma separated list of contracts to compile', + }) .command('compile', 'compile contracts', identityCommandBuilder, onCompileCommand) .command( 'migrate', diff --git a/packages/deployer/src/compiler.ts b/packages/deployer/src/compiler.ts index 63db6c865..4e5518d0e 100644 --- a/packages/deployer/src/compiler.ts +++ b/packages/deployer/src/compiler.ts @@ -17,6 +17,7 @@ import { import { utils } from './utils/utils'; const SOLIDITY_FILE_EXTENSION = '.sol'; +const ALL_CONTRACTS_IDENTIFIER = '*'; export class Compiler { private _contractsDir: string; @@ -25,6 +26,7 @@ export class Compiler { private _artifactsDir: string; private _contractSourcesIfExists?: ContractSources; private _solcErrors: Set; + private _contractsToCompile: Set; /** * Recursively retrieves Solidity source code from directory. * @param dirPath Directory to search. @@ -106,6 +108,7 @@ export class Compiler { this._optimizerEnabled = opts.optimizerEnabled; this._artifactsDir = opts.artifactsDir; this._solcErrors = new Set(); + this._contractsToCompile = opts.contractsToCompile; } /** * Compiles all Solidity files found in contractsDir and writes JSON artifacts to artifactsDir. @@ -150,9 +153,10 @@ export class Compiler { oldNetworks = currentArtifact.networks; const oldNetwork: ContractData = oldNetworks[this._networkId]; shouldCompile = - _.isUndefined(oldNetwork) || + (_.isUndefined(oldNetwork) || oldNetwork.keccak256 !== sourceHash || - oldNetwork.optimizer_enabled !== this._optimizerEnabled; + oldNetwork.optimizer_enabled !== this._optimizerEnabled) && + (this._contractsToCompile.has(ALL_CONTRACTS_IDENTIFIER) || this._contractsToCompile.has(contractName)); } catch (err) { shouldCompile = true; } diff --git a/packages/deployer/src/utils/types.ts b/packages/deployer/src/utils/types.ts index e054b9cc2..c8bb1b9ca 100644 --- a/packages/deployer/src/utils/types.ts +++ b/packages/deployer/src/utils/types.ts @@ -50,6 +50,7 @@ export interface CompilerOptions { networkId: number; optimizerEnabled: number; artifactsDir: string; + contractsToCompile: Set; } export interface DeployerOptions { -- cgit