fix duplicate dependencies and warn correctly for length

This commit is contained in:
Jonathan Rainville 2018-07-12 10:23:24 -04:00
parent 038d405af9
commit 5e210a67fa
2 changed files with 21 additions and 11 deletions

View File

@ -178,12 +178,12 @@ class ContractDeployer {
deployedAddress = deployedAddress.substr(2); deployedAddress = deployedAddress.substr(2);
} }
let linkReference = '__' + filename + ":" + contractObj.className; let linkReference = '__' + filename + ":" + contractObj.className;
if (contractCode.indexOf(linkReference) < 0) {
continue;
}
if (linkReference.length > 40) { if (linkReference.length > 40) {
return next(new Error(__("{{linkReference}} is too long, try reducing the path of the contract ({{filename}}) and/or its name {{contractName}}", {linkReference: linkReference, filename: filename, contractName: contractObj.className}))); return next(new Error(__("{{linkReference}} is too long, try reducing the path of the contract ({{filename}}) and/or its name {{contractName}}", {linkReference: linkReference, filename: filename, contractName: contractObj.className})));
} }
if (contractCode.indexOf(linkReference) < 0) {
continue;
}
let toReplace = linkReference + "_".repeat(40 - linkReference.length); let toReplace = linkReference + "_".repeat(40 - linkReference.length);
if (deployedAddress === undefined) { if (deployedAddress === undefined) {
let libraryName = contractObj.className; let libraryName = contractObj.className;

View File

@ -215,7 +215,7 @@ class ContractsManager {
contract = self.contracts[className]; contract = self.contracts[className];
// look in code for dependencies // look in code for dependencies
let libMatches = (contract.code.match(/\:(.*?)(?=_)/g) || []); let libMatches = (contract.code.match(/:(.*?)(?=_)/g) || []);
for (let match of libMatches) { for (let match of libMatches) {
self.contractDependencies[className] = self.contractDependencies[className] || []; self.contractDependencies[className] = self.contractDependencies[className] || [];
self.contractDependencies[className].push(match.substr(1)); self.contractDependencies[className].push(match.substr(1));
@ -251,14 +251,24 @@ class ContractsManager {
} }
// look in onDeploy for dependencies // look in onDeploy for dependencies
if (contract.onDeploy === [] || contract.onDeploy === undefined) continue; if (contract.onDeploy !== [] && contract.onDeploy !== undefined) {
let regex = /\$\w+/g; let regex = /\$\w+/g;
contract.onDeploy.map((cmd) => { contract.onDeploy.map((cmd) => {
cmd.replace(regex, (match) => { cmd.replace(regex, (match) => {
self.contractDependencies[className] = self.contractDependencies[className] || []; self.contractDependencies[className] = self.contractDependencies[className] || [];
self.contractDependencies[className].push(match.substr(1)); self.contractDependencies[className].push(match.substr(1));
});
}); });
}); }
// Remove duplicates
if (self.contractDependencies[className]) {
const o = {};
self.contractDependencies[className].forEach(function (e) {
o[e] = true;
});
self.contractDependencies[className] = Object.keys(o);
}
} }
callback(); callback();
}, },