// cell add [alias] - Add a dependency to the current package // // Usage: // cell add Add a dependency using default alias // cell add 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 [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 [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()