104 lines
2.5 KiB
Plaintext
104 lines
2.5 KiB
Plaintext
// cell add <locator> [alias] - Add a dependency to the current package
|
|
//
|
|
// Usage:
|
|
// cell add <locator> Add a dependency using default alias
|
|
// cell add <locator> <alias> Add a dependency with custom alias
|
|
//
|
|
// This adds the dependency to cell.toml and installs it to the shop.
|
|
|
|
var shop = use('internal/shop')
|
|
var pkg = use('package')
|
|
var build = use('build')
|
|
var fd = use('fd')
|
|
|
|
var locator = null
|
|
var alias = null
|
|
|
|
array(args, function(arg) {
|
|
if (arg == '--help' || arg == '-h') {
|
|
log.console("Usage: cell add <locator> [alias]")
|
|
log.console("")
|
|
log.console("Add a dependency to the current package.")
|
|
log.console("")
|
|
log.console("Examples:")
|
|
log.console(" cell add gitea.pockle.world/john/prosperon")
|
|
log.console(" cell add gitea.pockle.world/john/cell-image image")
|
|
log.console(" cell add ../local-package")
|
|
$stop()
|
|
} else if (!starts_with(arg, '-')) {
|
|
if (!locator) {
|
|
locator = arg
|
|
} else if (!alias) {
|
|
alias = arg
|
|
}
|
|
}
|
|
})
|
|
|
|
if (!locator) {
|
|
log.console("Usage: cell add <locator> [alias]")
|
|
$stop()
|
|
}
|
|
|
|
// Resolve relative paths to absolute paths
|
|
if (locator == '.' || starts_with(locator, './') || starts_with(locator, '../') || fd.is_dir(locator)) {
|
|
var resolved = fd.realpath(locator)
|
|
if (resolved) {
|
|
locator = resolved
|
|
}
|
|
}
|
|
|
|
// Generate default alias from locator
|
|
if (!alias) {
|
|
// Use the last component of the locator as alias
|
|
var parts = array(locator, '/')
|
|
alias = parts[length(parts) - 1]
|
|
// Remove any version suffix
|
|
if (search(alias, '@') != null) {
|
|
alias = array(alias, '@')[0]
|
|
}
|
|
}
|
|
|
|
// Check we're in a package directory
|
|
var cwd = fd.realpath('.')
|
|
if (!fd.is_file(cwd + '/cell.toml')) {
|
|
log.error("Not in a package directory (no cell.toml found)")
|
|
$stop()
|
|
}
|
|
|
|
log.console("Adding " + locator + " as '" + alias + "'...")
|
|
|
|
// Add to local project's cell.toml
|
|
try {
|
|
pkg.add_dependency(null, locator, alias)
|
|
log.console(" Added to cell.toml")
|
|
} catch (e) {
|
|
log.error("Failed to update cell.toml: " + e)
|
|
$stop()
|
|
}
|
|
|
|
// Install to shop
|
|
try {
|
|
shop.get(locator)
|
|
shop.extract(locator)
|
|
|
|
// Build scripts
|
|
shop.build_package_scripts(locator)
|
|
|
|
// Build C code if any
|
|
try {
|
|
var target = build.detect_host_target()
|
|
build.build_dynamic(locator, target, 'release')
|
|
} catch (e) {
|
|
// Not all packages have C code
|
|
}
|
|
|
|
log.console(" Installed to shop")
|
|
} catch (e) {
|
|
log.error("Failed to install: " + e)
|
|
$stop()
|
|
}
|
|
|
|
log.console("Added " + alias + " (" + locator + ")")
|
|
|
|
$stop()
|