Add meaningful error when executing bower link on windows when user is not elevated.

#472
This commit is contained in:
André Cruz
2013-08-10 21:37:13 +01:00
parent 9c49b097c8
commit fb12fc03bf
2 changed files with 45 additions and 27 deletions

View File

@@ -1,12 +1,10 @@
var fs = require('graceful-fs');
var path = require('path');
var mkdirp = require('mkdirp');
var rimraf = require('rimraf');
var mout = require('mout');
var Q = require('q');
var Logger = require('bower-logger');
var Project = require('../core/Project');
var createError = require('../util/createError');
var createLink = require('../util/createLink');
var cli = require('../util/cli');
var defaultConfig = require('../config');
@@ -72,30 +70,6 @@ function linkTo(name, localName, config) {
return logger;
}
function createLink(src, dst) {
var dstDir = path.dirname(dst);
// Create directory
return Q.nfcall(mkdirp, dstDir)
// Check if source exists
.then(function () {
return Q.nfcall(fs.lstat, src)
.fail(function (error) {
if (error.code === 'ENOENT') {
throw createError('Failed to create link to ' + path.basename(src), 'ENOENT', {
details: src + ' doest not exists or points to a non-existent package'
});
}
throw error;
});
})
// Create symlink
.then(function () {
return Q.nfcall(fs.symlink, src, dst, 'dir');
});
}
// -------------------
var link = {

44
lib/util/createLink.js Normal file
View File

@@ -0,0 +1,44 @@
var fs = require('fs');
var path = require('path');
var Q = require('q');
var mkdirp = require('mkdirp');
var createError = require('./createError');
var isWin = process.platform === 'win32';
function createLink(src, dst, type) {
var dstDir = path.dirname(dst);
// Create directory
return Q.nfcall(mkdirp, dstDir)
// Check if source exists
.then(function () {
return Q.nfcall(fs.stat, src)
.fail(function (error) {
if (error.code === 'ENOENT') {
throw createError('Failed to create link to ' + path.basename(src), 'ENOENT', {
details: src + ' doest not exists or points to a non-existent file'
});
}
throw error;
});
})
// Create symlink
.then(function (stat) {
type = type || (stat.isDirectory() ? 'dir' : 'file');
return Q.nfcall(fs.symlink, src, dst, type)
.fail(function (err) {
if (isWin && err.code === 'EPERM') {
throw createError('Unable to create link to ' + path.basename(src), err.code, {
details: err.message + '\n\nTry running this command in an elevated terminal (run as root/administrator).'
});
}
throw err;
});
});
}
module.exports = createLink;