downlaod import files

This commit is contained in:
Jonathan Rainville 2018-04-19 13:29:25 -04:00
parent 05b1f61c9b
commit 60fb6b14d4
3 changed files with 21 additions and 14 deletions

View File

@ -14,26 +14,32 @@ class File {
} }
parseFileForImport(content, callback) { parseFileForImport(content, callback) {
if (this.filename.indexOf('.sol') < 0) { const self = this;
if (self.filename.indexOf('.sol') < 0) {
// Only supported in Solidity // Only supported in Solidity
return callback(); return callback();
} }
const regex = /import "([a-zA-Z0-9_\-.\\\/]+)";/g; const regex = /import "([a-zA-Z0-9_\-.\\\/]+)";/g;
let matches; let matches;
const filesToDownload = []; const filesToDownload = [];
const pathWithoutFile = path.dirname(this.path); const pathWithoutFile = path.dirname(self.path);
while ((matches = regex.exec(content))) { while ((matches = regex.exec(content))) {
console.log('Need to download', matches[1]);
filesToDownload.push({ filesToDownload.push({
fileRelativePath: matches[1], fileRelativePath: path.join(path.dirname(self.filename), matches[1]),
url: path.join(pathWithoutFile, matches[1]) url: `${pathWithoutFile}/${matches[1]}`
}); });
} }
//async.each(filesToDownload, (file))
async.each(filesToDownload, ((fileObj, eachCb) => {
self.downloadFile(fileObj.fileRelativePath, fileObj.url, (_content) => {
eachCb();
});
}), callback);
} }
downloadFile (filename, url, callback) { downloadFile (filename, url, callback) {
// const self = this; console.log('Downloading:', filename, 'form', url);
const self = this;
async.waterfall([ async.waterfall([
function makeTheDir(next) { function makeTheDir(next) {
fs.mkdirp(path.dirname(filename), (err) => { fs.mkdirp(path.dirname(filename), (err) => {
@ -56,12 +62,12 @@ class File {
}, },
function readFile(next) { function readFile(next) {
fs.readFile(filename, next); fs.readFile(filename, next);
}// , },
/*function parseForImports(content, next) { function parseForImports(content, next) {
self.parseFileForImport(content, (err) => { self.parseFileForImport(content, (err) => {
next(err, content); next(err, content);
}); });
}*/ }
], (err, content) => { ], (err, content) => {
if (err) { if (err) {
console.error('Error while downloading the file', err); console.error('Error while downloading the file', err);

View File

@ -2,7 +2,6 @@ pragma solidity ^0.4.7;
contract SimpleStorage { contract SimpleStorage {
uint public storedData; uint public storedData;
import "./ownable.sol"; import "./ownable.sol";
import "../../contracts/token.sol";
function SimpleStorage(uint initialValue) { function SimpleStorage(uint initialValue) {
storedData = initialValue; storedData = initialValue;

View File

@ -4,11 +4,13 @@ const fs = require('fs-extra');
describe('embark.File', function () { describe('embark.File', function () {
describe('parseFileForImport', () => { describe('parseFileForImport', () => {
it('should find all the imports', function () { it('should find all the imports', function (done) {
const contract = fs.readFileSync('./test/contracts/simple_storage.sol').toString(); const contract = fs.readFileSync('./test/contracts/simple_storage.sol').toString();
const file = new File({filename: 'simple_storage.sol', const file = new File({filename: '.embark/contracts/embark-framework/embark/master/test_app/app/contracts/simple_storage.sol',
path: 'https://raw.githubusercontent.com/embark-framework/embark/develop/test_apps/test_app/app/contracts/simple_storage.sol'}); path: 'https://raw.githubusercontent.com/embark-framework/embark/develop/test_apps/test_app/app/contracts/simple_storage.sol'});
file.parseFileForImport(contract); file.parseFileForImport(contract, () => {
done();
});
}); });
}); });
}); });