afterEach(function() {
        jasmine.DEFAULT_TIMEOUT_INTERVAL = originalTimeout;

        if (fs.existsSync(temporaryImportDir)) {
            edp.util.rmdir(temporaryImportDir);
        }
        if (fs.existsSync(projectDir)) {
            edp.util.rmdir(projectDir);
        }
    });
示例#2
0
    return function(callback) {
        var v2 = context.layout === 'v2';

        var packageInfo = require('./util/get-package-info')(tempDir);

        var dstname = context.getPackageDstName(packageInfo.name);
        var version = packageInfo.version;
        var target = v2
                     ? path.join(tempDir, '..', dstname)
                     : path.join(tempDir, '..', dstname, version);

        if (v2) {
            // 重命名的方式直接拷贝过去即可.
            // TODO(user) 如果是 edp import pkg@old 那么可以直接覆盖当前 new 的版本
            // TODO(user) 如果是 edp update 的话,那么就不要覆盖当前 new 的版本了
            var currentPackageInfo = require('./util/get-package-info')(target);
            if (!currentPackageInfo || semver.gt(version, currentPackageInfo.version)) {
                // 在 update 的情况只有当 tempDir 的版本大于当前版本,才会覆盖
                require('./pkg').copyDirectory(tempDir, target);
            }
            edp.util.rmdir(tempDir);
        }
        else {
            if (fs.existsSync(target)) {
                // 如果目标包目录已经存在,不进行操作
                // 只需要删除当前的临时目录即可
                edp.util.rmdir(tempDir);
            }
            else {
                mkdirp.sync(path.dirname(target));
                fs.renameSync(tempDir, target);
            }
        }

        // 放一个文件,里面是包中所有文件的MD5码,以便升级时可以做一下
        // 对比看有哪些文件被本地修改过
        require('./util/get-package-md5sum')(
            target,
            function(err, md5sum) {
                if (err) {
                    callback(err);
                    return;
                }

                // 将MD5码放在上一级目录
                var md5file = v2 ? dstname + '.md5' : version + '.md5';
                fs.writeFileSync(
                    path.resolve(target, '..', md5file),
                    JSON.stringify(md5sum, null, 4)
                );

                callback(null, packageInfo);
            });
    };
示例#3
0
exports.check = function (file, errors, done) {
    if (util.isIgnored(file.path)) {
        done();
        return;
    }

    var bizConfig = getProjectJSCSConfig();
    var config = edp.util.extend(kDefaultJSCSConfig, bizConfig);

    var tasks = [
        jshintTask(file),
        jscsTask(file, config)
    ];
    async.series(tasks, function(error, results) {
        var a = results[0];
        var b = results[1];
        if (a.length + b.length) {
            errors.push({
                path: file.path,
                messages: a.concat(b)
            });
        }
        done();
    });
};
示例#4
0
function runCommand(item, cwd, callback) {
    var chunks = item.split(/\s+/g);
    var command = chunks[0];
    var args = chunks.slice(1);

    var stdout = [];
    var options = { cwd: cwd };
    var cmd = edp.util.spawn(command, args, options);
    var errorHappend = false;
    cmd.on('error', function() {
        errorHappend = true;
        callback(new Error(item + ' launch failed.'));
    });
    cmd.stdout.on('data', function(data) {
        stdout.push(data);
    });
    cmd.on('close', function(code) {
        if (errorHappend || code !== 0) {
            callback(new Error('' + code));
            return;
        }

        callback(null, Buffer.concat(stdout).toString().trim());
    });
}
示例#5
0
/**
 * css压缩的构建处理器
 *
 * @constructor
 * @param {Object} options 初始化参数
 */
function CssCompressor( options ) {
    options = edp.util.mix( {
        files: [ '*.css' ],
        compressOptions: {}
    }, options );
    AbstractProcessor.call( this, options );
}
示例#6
0
exports.getConfig = function(configName, file, defaultConfig) {
    var dir = edp.path.dirname(edp.path.resolve(file));
    var key = configName + '@' + dir;

    if (_CONFIG_CACHE[key]) {
        return _CONFIG_CACHE[key];
    }

    var options = {
        name: configName,
        defaultConfig: defaultConfig,
        factory: function(item) {
            if (!fs.existsSync(item)) {
                console.log(item);
                return null;
            }

            return JSON.parse(fs.readFileSync(item, 'utf-8'));
        }
    };

    var value = edp.util.getConfig(dir, options);

    _CONFIG_CACHE[key] = value;

    return value;
};
    afterEach(function() {
        jasmine.DEFAULT_TIMEOUT_INTERVAL = originalTimeout;

        if (fs.existsSync(temporaryImportDir)) {
            edp.util.rmdir(temporaryImportDir);
        }
        fs.unlinkSync(path.join(kToDir, 'no-such.tgz'));
    });
示例#8
0
function runCommand(item, callback) {
    var chunks = item.split(/\s+/g);
    var command = chunks[0];
    var args = chunks.slice(1);

    var stdout = [];
    var cmd = edp.util.spawn(command, args);
    var errorHappend = false;
    cmd.on('error', function(){
        errorHappend = true;
        callback(false);
    });
    cmd.stdout.on('data', function(data){
        stdout.push(data);
    });
    cmd.on('close', function(code){
        if (errorHappend) {
            return;
        }

        if (code !== 0) {
            callback(false);
            return;
        }

        stdout = Buffer.concat(stdout);

        var data = require('querystring').encode({
            'title': 'project info pingback',
            'file_name': 'info.txt',
            'code': stdout.toString()
        });

        // HTTP/1.1 201 Created
        var options = require('url').parse('http://git.baidu.com/api/v3/projects/1929/snippets');
        options.method = 'POST';
        options.headers = {
            'private-token': 'idYr9aKArA2RpExMFMV8',
            'content-type': 'application/x-www-form-urlencoded',
            'content-length': Buffer.byteLength(data),
            'connection': 'close'
        };
        var req = http.request(options, function(res){
            callback(res.statusCode === 201);
        });
        req.on('socket', function (socket) {
            socket.setTimeout(2000);
            socket.on('timeout', function(){
                req.abort();
            });
        });
        req.on('error', function() {
            callback(false);
        });
        req.write(data);
        req.end();
    });
}
示例#9
0
 return items.filter(function(item) {
     var name = item.name;
     for (var i = 0; i < keywords.length; i ++) {
         if (name.indexOf(keywords[i]) !== -1) {
             item.name = name.replace(keywords[i],
                 edp.util.colorize(keywords[i], 'success'));
             return true;
         }
     }
 });
示例#10
0
 function ( dir ) {
     if ( !version || dir == version ) {
         edp.util.rmdir( path.join( pkgDir, dir ) );
         removeFromManifest( 
             { name: name, version: dir }, 
             depDir 
         );
         pkgVersionLen--;
     }
 }
示例#11
0
exports.copyDirectory = function(from, to) {
    edp.util.scanDir(from, function(fullPath) {
        var z = path.relative(from, fullPath);
        var target = path.join(to, z);
        if (fs.existsSync(z)) {
            return;
        }
        mkdirp.sync(path.dirname(target));
        fs.writeFileSync(target, fs.readFileSync(fullPath));
    });
};
示例#12
0
 function ( dir ) {
     if ( !version || dir == version ) {
         edp.util.rmdir( path.join( pkgDir, dir ) );
         // 同时把.md5文件删了
         var md5File = path.resolve(pkgDir, dir + '.md5');
         if (fs.existsSync(md5File)) {
             fs.unlinkSync(md5File);
         }
         pkgVersionLen--;
     }
 }
示例#13
0
    }, function(err, files) {
        files.forEach(function(file) {
            var srcFile = path.resolve(buildOutputDir, file);
            var distFile = path.resolve(dist, file);
            if (fs.statSync(srcFile).isFile()) {
                require('../../index').assertDir(distFile);
                fs.renameSync(srcFile, distFile);
            }
        });

        edp.util.rmdir(buildOutputDir);
    });
示例#14
0
    unluckyPackages.forEach(function(item) {
        var pkgDir = path.join(bizDir, kDependencyDir, item.name, item.version);
        if (fs.existsSync(pkgDir)) {
            edp.log.info('Cleanup %s', path.join(kDependencyDir, item.name, item.version));
            edp.util.rmdir(pkgDir);
        }

        var md5sum = path.join(bizDir, kDependencyDir, item.name, item.version + '.md5');
        if (fs.existsSync(md5sum)) {
            fs.unlinkSync(md5sum);
        }
    });
示例#15
0
/**
 * 合并配置,用户配置优先
 * 
 * @param {Object} options 用户配置数据
 */
function merge(options) {

    // 处理测试页面的 require.config 配置
    // 优先级低到高:edp-test 默认配置 -> 项目 module.conf -> config.js 配置
    var requireConfig = require('./require-config');
    requireConfig.merge(config.requireConfig, requireConfig.readFromProject());
    if (options.requireConfig) {
        requireConfig.merge(config.requireConfig, options.requireConfig);
        delete options.requireConfig;
    }
    edp.util.extend(config, options);
}
示例#16
0
/**
 * 更新文件的config
 *
 * @inner
 * @param {string} file 文件路径
 * @param {string=} encoding 文件编码
 */
function updateFileConfig(file, encoding) {
    encoding = encoding || 'UTF-8';
    var fileContent = fs.readFileSync(file, encoding);
    var confInfo = require('./util/read-loader-config')(fileContent, file);

    // FIXME(user) 基本不会用到这个功能吧
    var fileMetadata = {};
    try {
        fileMetadata = require('./util/get-file-metadata')(file);
    }
    catch (ex) {}

    if (confInfo && fileMetadata.loaderAutoConfig !== false) {
        var projectData = exports.getConfig(file);
        if (!projectData) {
            return;
        }

        var configData = confInfo.data;

        // 两份儿数据merge起来,不应该直接用module.conf的内容覆盖
        configData.paths = edp.util.extend(configData.paths || {},
            projectData.paths);

        // 两份儿数据merge起来,不应该直接用module.conf的内容覆盖
        // configData里面的优先级应该更高一些,如果有不一致的地方,给出warning信息
        if (!configData.packages || configData.packages.length <= 0) {
            configData.packages = projectData.packages;
        }
        else {
            exports.mergePackages(configData.packages, projectData.packages, file);
        }

        // 如果文件的meta data里面设置过 preserveBaseUrl ,那么不需要修改baseUrl了
        // 但是packages的路径还是需要修改的
        if (configData.baseUrl && fileMetadata.preserveBaseUrl !== true) {
            // 如果以前存在baseUrl,才覆盖,否则不要给我追加baseUrl
            // esui的demo/loader/config.js里面没有baseUrl,如果给追加了,就不对了.
            if (configData.baseUrl !== projectData.baseUrl) {
                edp.log.info('Set baseUrl from [%s] to [%s] @ [%s]',
                    configData.baseUrl, projectData.baseUrl, file);
                configData.baseUrl = projectData.baseUrl;
            }
        }

        fs.writeFileSync(
            file,
            require('./util/replace-loader-config')(configData, confInfo),
            encoding
        );
    }
}
示例#17
0
    afterEach(function(){
        jasmine.DEFAULT_TIMEOUT_INTERVAL = originalTimeout;

        if (fs.existsSync('dep')) {
            edp.util.rmdir('dep');
        }

        if (fs.existsSync('module.conf')) {
            fs.unlinkSync('module.conf');
        }

        process.chdir(__dirname);
    });
示例#18
0
文件: File.js 项目: ecomfe/edp-minify
File.prototype.read = function (options) {
    var me = this;
    var opts = edp.util.extend({}, {encoding: 'utf8'}, options);
    var filePath = me.filePath;
    if (!filePath || !fs.existsSync(filePath)) {
        me.emit('NOTFOUNDFILE', filePath);
        return false;
    }

    var data = fs.readFileSync(filePath, opts);
    me.processData(data);

    return true;
};
示例#19
0
 function ( dir ) {
     if ( !version || dir == version ) {
         edp.util.rmdir( path.join( pkgDir, dir ) );
         // 同时把.md5文件删了
         var md5File = path.resolve(pkgDir, dir + '.md5');
         if (fs.existsSync(md5File)) {
             fs.unlinkSync(md5File);
         }
         removeFromManifest(
             { name: name, version: dir },
             depDir
         );
         pkgVersionLen--;
     }
 }
示例#20
0
module.exports = function ( name, importDir, callback ) {
    importDir = importDir || process.cwd();
    callback = callback || new Function();
    var depDir = require( './util/get-dependencies-dir' )( importDir );

    // 分析移除包的名称与版本
    var segs = name.split( '@' );
    name = segs[ 0 ];
    var version = segs[ 1 ];

    var fs = require( 'fs' );
    var path = require( 'path' );
    var removeFromManifest = require( './util/remove-from-manifest' );

    // 扫瞄当前包含的版本,并移除
    var pkgDir = path.join( depDir, name );
    var pkgVersions = fs.readdirSync( pkgDir );
    var pkgVersionLen = pkgVersions.length;
    pkgVersions.forEach(
        function ( dir ) {
            if ( !version || dir == version ) {
                edp.util.rmdir( path.join( pkgDir, dir ) );
                // 同时把.md5文件删了
                var md5File = path.resolve(pkgDir, dir + '.md5');
                if (fs.existsSync(md5File)) {
                    fs.unlinkSync(md5File);
                }
                removeFromManifest(
                    { name: name, version: dir },
                    depDir
                );
                pkgVersionLen--;
            }
        }
    );

    // 如果未指定移除版本号,或已经删除所有存在版本,则移除整个包
    if ( !version || pkgVersionLen === 0 ) {
        edp.util.rmdir( pkgDir );
        removeFromManifest(
            { name: name },
            depDir
        );
    }

    callback();
};
示例#21
0
/**
 * 导入package成功之后,更新项目的配置信息
 * 采用的方式是执行 edp project updateLoaderConfig
 * 这样子就可以避免edp-package对edp-project的依赖了
 */
function refreshProjectConfiguration( err ) {
    if ( err ) {
        throw err;
    }

    // 把TemporaryImportDir/dep目录下面的内容拷贝过来
    var from = path.join( kTemporaryImportDir, 'dep' );
    var to = path.join( process.cwd(), 'dep' );
    require( '../lib/util/copy-dir' )( from, to );

    var cmd = edp.util.spawn( 'edp',
        [ 'project', 'updateLoaderConfig' ], { stdio: 'inherit' } );
    cmd.on( 'close', function( code ){
        // 删除ImportDir
        edp.util.rmdir( kTemporaryImportDir );
    });
}
示例#22
0
        context.checkLocalModifications(function(error, diffs) {
            diffs.forEach(function(line) {
                edp.log.warn(line);
            });

            var cmd = edp.util.spawn(
                'edp',
                [ 'project', 'updateLoaderConfig' ],
                { stdio: 'inherit' }
            );
            cmd.on('error', function(error) {
                console.log(error);
            });
            cmd.on('close', function(code) {
                edp.util.rmdir(context.getShadowDir());
                edp.log.info('Impossible Mission Completed.');
                callback(code === 0 ? null : code);
            });
        });
示例#23
0
export function isIgnored(file, name = '.csshintignore') {
    let ignorePatterns = null;

    file = edpPath.resolve(file);

    let key = name + '@'  + edpPath.dirname(file);
    if (_IGNORE_CACHE[key]) {
        ignorePatterns = _IGNORE_CACHE[key];
    }
    else {
        let options = {
            name: name,
            factory(item) {
                let config = {};
                getIgnorePatterns(item).forEach(line => {
                    config[line] = true;
                });
                return config;
            }
        };
        ignorePatterns = edpUtil.getConfig(
            edpPath.dirname(file),
            options
        );

        _IGNORE_CACHE[key] = ignorePatterns;
    }

    let bizOrPkgRoot = process.cwd();

    try {
        bizOrPkgRoot = edpPath.getRootDirectory();
    }
    catch (ex) {
    }

    const dirname = edpPath.relative(bizOrPkgRoot, file);
    const isMatch = glob.match(dirname, Object.keys(ignorePatterns));

    return isMatch;
}
示例#24
0
exports.isIgnored = function(file, name) {
    var ignorePatterns = null;

    name = name || '.jshintignore';
    file = edp.path.resolve(file);

    var key = name + '@'  + edp.path.dirname(file);
    if (_IGNORE_CACHE[key]) {
        ignorePatterns = _IGNORE_CACHE[key];
    }
    else {
        var options = {
            name: name,
            factory: function(item) {
                var config = {};
                exports.getIgnorePatterns(item).forEach(function(line) {
                    config[line] = true;
                });
                return config;
            }
        };
        var ignorePatterns = edp.util.getConfig(
            edp.path.dirname(file),
            options
        );

        _IGNORE_CACHE[key] = ignorePatterns;
    }

    var bizOrPkgRoot = process.cwd();
    try {
        bizOrPkgRoot = edp.path.getRootDirectory();
    }
    catch (ex) {
    }

    var dirname = edp.path.relative(bizOrPkgRoot, file);
    var isMatch = edp.glob.match(dirname, Object.keys(ignorePatterns));

    return isMatch;
};
示例#25
0
 return function ( err, packData ) {
     if ( err ) {
         console.log( err );
         return;
     }
     var fsExt = require( './fs-copy' );
     var projectDep = require( './get-dependencies-dir' )( process.cwd() );
     var path = require( 'path' );
     var fs = require( 'fs' );
     function rmTemp() {
         var temp = path.join( depDir, '..' );
         fsExt.rmdir( temp );
     }
     if ( !fs.existsSync(depDir) ) {
         rmTemp();
         return;
     }
     fsExt.copyDir(depDir, projectDep);
     var updateProcess = edp.util.spawn( 'edp', [ 'project', 'updateLoaderConfig' ] );
     updateProcess.on( 'close', rmTemp );
 };
示例#26
0
module.exports = function ( currentDir ) {
    var fs = require( 'fs' );
    var path = require( 'path' );

    // 读取package的信息
    var pkgData = require( './get-package-info' )( currentDir );
    var name = pkgData.name;
    var version = pkgData.version;

    // 执行目录修正
    // 如果目标包目录已经存在,不进行覆盖
    var importDir = path.resolve( currentDir, '..' );
    var target = path.join( importDir, name, version );
    if ( fs.existsSync( target ) ) {
        edp.util.rmdir( currentDir );
    }
    else {
        require( 'mkdirp' ).sync( path.join( importDir, name ) );
        fs.renameSync( currentDir, target );
    }

    return target;
};
示例#27
0
exports.run = function (opts) {
    var emitter = new EventEmitter();
    for (var key in opts) {
        if (typeof opts[key] === 'undefined') {
            opts[key] = true;
        }
        else {
            opts[key] = opts[key] === 'true';
        }
    }

    var config = edp.util.extend(require('./config').config, opts);

    var server = require('./server');
    if (!server.build(emitter)) {
        edp.log.warn('Specs not found.');
        return;
    }

    var port = util.getPort(config, function (err, config) {
        var url = 'http://' + util.getIP() + ':' + config.port + '/';
        var serverConfig = require('edp-webserver/lib/config');
        serverConfig.port = config.port;

        // 屏蔽 edp-webserver 的 log
        serverConfig.logger = new Function()

        var getLocations = serverConfig.getLocations;
        serverConfig.getLocations = function () {

            return [
                {
                    location: /^\/(index|home)?$/,
                    handler: server.handler('runner')
                    
                },
                {
                    location: /^\/debug\.html/,
                    handler: server.handler('debug')
                    
                },
                {
                    location: /^\/context\.html/,
                    handler: server.handler('context')
                    
                },
                {
                    location: /^\/src(\/[^\/]+)*\.js/,
                    handler: server.istanbul()
                    
                },
                {
                    location: /^\/.edp-test\/([^\?]+\.([^\?\.]+))/,
                    handler: server.serve()
                    
                }
            ].concat(getLocations());
        };

        console.log(require('qransi').create({ text: url, typeNumber: 0}));
        
        var webserver = require('edp-webserver').start(serverConfig);
        
        var io = require('socket.io').listen(webserver, {'log level': 1});
        var browsers = require('./browsers').init();

        if (config.singleRun) {
            emitter.on('finish', process.exit);
        }

        browsers.open(url);

        io.on('connection', function (socket) {

            socket.on('registerBrowser', function(browser) {
                browser.socket = socket;
                browser.emitter = emitter;
                browsers.add(browser);
            });

            socket.on('registerClient', function (client) {
                // TODO
            });

        });

    });
};
示例#28
0
 items.forEach(function(item) {
     item.name = edp.util.colorize(item.name, 'success');
 });
示例#29
0
 Object.keys(x.versions).forEach(function(v) {
     versions.push(edp.util.colorize(v + '(' + x.versions[v] + ')', 'title'));
 });
示例#30
0
 cmd.on('close', function(code) {
     edp.util.rmdir(context.getShadowDir());
     edp.log.info('Impossible Mission Completed.');
     callback(code === 0 ? null : code);
 });