Compare commits

...

2 Commits

Author SHA1 Message Date
Adam Stankiewicz
447c2e3c04 There is no need for unlinking, reducing moving parts 2014-04-12 13:20:13 +02:00
Sergey Chikuyonok
f535bd126a Provide symlinks for nested dependencies 2014-04-12 13:15:36 +02:00
3 changed files with 56 additions and 3 deletions

View File

@@ -9,6 +9,7 @@ var PackageRepository = require('./PackageRepository');
var semver = require('../util/semver');
var copy = require('../util/copy');
var createError = require('../util/createError');
var dependencyLinker = require('../util/dependencyLinker');
var scripts = require('./scripts');
function Manager(config, logger) {
@@ -190,7 +191,13 @@ Manager.prototype.install = function (json) {
return dissected;
}, this);
}, that);
})
.then(function () {
// Create symlinks for sub-dependencies
var flattened = mout.object.mixIn({}, that._installed, that._dissected);
return dependencyLinker.link(flattened, that._config, that._logger);
})
.then(function () {
// Resolve with meaningful data
return mout.object.map(that._dissected, function (decEndpoint) {
return this.toData(decEndpoint);

View File

@@ -6,7 +6,9 @@ var createError = require('./createError');
var isWin = process.platform === 'win32';
function createLink(src, dst, type) {
function createLink(src, dst, options) {
options = options || {};
var dstDir = path.dirname(dst);
// Create directory
@@ -26,7 +28,12 @@ function createLink(src, dst, type) {
})
// Create symlink
.then(function (stat) {
type = type || (stat.isDirectory() ? 'dir' : 'file');
var type = options.type || (stat.isDirectory() ? 'dir' : 'file');
if (options.relative && !isWin) {
src = path.relative(path.dirname(dst), src);
} else {
src = path.resolve(src);
}
return Q.nfcall(fs.symlink, src, dst, type)
.fail(function (err) {

View File

@@ -0,0 +1,39 @@
var Q = require('q');
var Config = require('bower-config');
var createLink = require('../util/createLink');
var readJson = require('../util/readJson');
var path = require('path');
var fs = require('graceful-fs');
module.exports.link = function (packages, config, logger) {
var rootComponentsDir = path.join(config.cwd, config.directory);
// create links for new packages and make sure that existing
// ones has all dependencies linked
var promises = Object.keys(packages).map(function (depName) {
var dep = packages[depName];
var depPath = dep.canonicalDir || path.join(rootComponentsDir, dep.name);
var conf = Config.read(depPath);
var componentsDir = path.join(conf.cwd, conf.directory);
return readJson(depPath)
.spread(function (json, deprecated, assumed) {
if (json.dependencies) {
return Q.all(Object.keys(json.dependencies || {}).map(function (d) {
var dst = path.join(componentsDir, d);
var src = path.join(rootComponentsDir, d);
return Q.nfcall(fs.stat, dst)
.fail(function () {
logger.info('dep-link', d, {
name: json.name + '#' + d
});
return createLink(src, dst, {relative: true});
});
}));
}
});
});
return Q.all(promises);
};