mirror of
https://github.com/bower/bower.git
synced 2026-04-24 03:00:19 -04:00
Close GH-635: Infer package name if inside a package for the home cmd.
This commit is contained in:
committed by
André Cruz
parent
a9afa42f52
commit
2d83abbb85
@@ -1,40 +1,47 @@
|
||||
var mout = require('mout');
|
||||
var Logger = require('bower-logger');
|
||||
var PackageRepository = require('../core/PackageRepository');
|
||||
var Project = require('../core/Project');
|
||||
var open = require('open');
|
||||
var cli = require('../util/cli');
|
||||
var createError = require('../util/createError');
|
||||
var defaultConfig = require('../config');
|
||||
|
||||
function home(name, config) {
|
||||
var packageRepository;
|
||||
var project;
|
||||
var promise;
|
||||
var logger = new Logger();
|
||||
|
||||
config = mout.object.deepFillIn(config || {}, defaultConfig);
|
||||
config.cache = config.storage.registry;
|
||||
project = new Project(config, logger);
|
||||
|
||||
packageRepository = new PackageRepository(config, logger);
|
||||
// Get the package meta
|
||||
// If no name is specified, read the project json
|
||||
// If a name is specified, fetch from the package repository
|
||||
if (!name) {
|
||||
promise = project.getJson(false)
|
||||
.then(function (json) {
|
||||
if (!json) {
|
||||
throw createError('You are not inside a package', 'ENOENT');
|
||||
}
|
||||
|
||||
// Fetch the package
|
||||
packageRepository.fetch({ name: '', source: name, target: '*' })
|
||||
.spread(function (canonicalDir, pkgMeta) {
|
||||
var homepage = pkgMeta.homepage;
|
||||
return json;
|
||||
});
|
||||
} else {
|
||||
promise = project.getPackageRepository().fetch({ name: '', source: name, target: '*' })
|
||||
.spread(function (canonicalDir, pkgMeta) {
|
||||
return pkgMeta;
|
||||
});
|
||||
}
|
||||
|
||||
// Get homepage and open it
|
||||
promise.then(function (pkgMeta) {
|
||||
var homepage = getHomepage(pkgMeta);
|
||||
|
||||
// If no homepage is set, try to guess it
|
||||
// TODO: This might be unnecessary in the future as soon as the bower/json module
|
||||
// applies normalization
|
||||
if (!homepage) {
|
||||
homepage = guessHomepage(pkgMeta);
|
||||
throw createError('No homepage set for ' + pkgMeta.name, 'ENOHOME');
|
||||
}
|
||||
|
||||
// If in the end there's still no homepage, error out
|
||||
if (!homepage) {
|
||||
return logger.emit('error', createError('No homepage set for ' + name, 'ENOHOME'));
|
||||
}
|
||||
|
||||
// Open URL
|
||||
open(homepage);
|
||||
|
||||
logger.emit('end', homepage);
|
||||
})
|
||||
.fail(function (error) {
|
||||
@@ -44,17 +51,19 @@ function home(name, config) {
|
||||
return logger;
|
||||
}
|
||||
|
||||
function guessHomepage(pkgMeta) {
|
||||
var homepage;
|
||||
function getHomepage(pkgMeta) {
|
||||
if (pkgMeta.homepage) {
|
||||
return pkgMeta.homepage;
|
||||
}
|
||||
|
||||
// Convert GitHub URLs
|
||||
if (mout.string.startsWith(pkgMeta._source, 'git://github.com/')) {
|
||||
homepage = pkgMeta._source
|
||||
return pkgMeta._source
|
||||
.replace('git://', 'https://') // Convert to https
|
||||
.replace(/\.git$/, ''); // Remove trailing .git
|
||||
}
|
||||
|
||||
return homepage;
|
||||
return null;
|
||||
}
|
||||
|
||||
// -------------------
|
||||
@@ -63,10 +72,6 @@ home.line = function (argv) {
|
||||
var options = home.options(argv);
|
||||
var name = options.argv.remain[1];
|
||||
|
||||
if (!name) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return home(name);
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user