mirror of
https://github.com/bower/bower.git
synced 2026-04-24 03:00:19 -04:00
Add meaningful error when executing bower link on windows when user is not elevated.
#472
This commit is contained in:
@@ -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
44
lib/util/createLink.js
Normal 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;
|
||||
Reference in New Issue
Block a user