118 lines
3.0 KiB
Plaintext
118 lines
3.0 KiB
Plaintext
// cell update [alias] - Check for updates and optionally install them
|
|
|
|
var io = use('io')
|
|
var shop = use('shop')
|
|
var http = use('http')
|
|
var toml = use('toml')
|
|
var json = use('json')
|
|
var os = use('os')
|
|
|
|
if (!io.exists('.cell/cell.toml')) {
|
|
log.error("No cell.toml found. Run 'cell init' first.")
|
|
$_.stop()
|
|
return
|
|
}
|
|
|
|
var config = shop.load_config()
|
|
if (!config || !config.dependencies) {
|
|
log.console("No dependencies to update")
|
|
$_.stop()
|
|
return
|
|
}
|
|
|
|
// Load lock file
|
|
var lock_path = '.cell/lock.toml'
|
|
var lock = {}
|
|
if (io.exists(lock_path)) {
|
|
var lock_content = io.slurp(lock_path)
|
|
lock = toml.decode(lock_content)
|
|
}
|
|
if (!lock.modules) lock.modules = {}
|
|
|
|
var updates_available = []
|
|
|
|
// Check specific dependency or all
|
|
var deps_to_check = {}
|
|
if (args.length > 0) {
|
|
var alias = args[0]
|
|
if (!config.dependencies[alias]) {
|
|
log.error("Dependency '" + alias + "' not found")
|
|
$_.stop()
|
|
return
|
|
}
|
|
deps_to_check[alias] = config.dependencies[alias]
|
|
} else {
|
|
deps_to_check = config.dependencies
|
|
}
|
|
|
|
// Check each dependency for updates
|
|
for (var alias in deps_to_check) {
|
|
var locator = deps_to_check[alias]
|
|
log.console("Checking " + alias + " (" + locator + ")...")
|
|
|
|
// Get API URL to check commits
|
|
var api_url = shop.get_api_url(locator)
|
|
if (!api_url) {
|
|
log.console(" Cannot check updates (no API support)")
|
|
continue
|
|
}
|
|
|
|
try {
|
|
log.console(api_url)
|
|
var api_response = http.fetch(api_url)
|
|
var remote_commit = shop.extract_commit_hash(locator, text(api_response))
|
|
|
|
if (!remote_commit) {
|
|
log.console(" Failed to get remote commit")
|
|
continue
|
|
}
|
|
|
|
var local_commit = lock.modules[alias] && lock.modules[alias].commit
|
|
|
|
if (!local_commit) {
|
|
log.console(" No local commit tracked")
|
|
updates_available.push({
|
|
alias: alias,
|
|
locator: locator,
|
|
local_commit: null,
|
|
remote_commit: remote_commit
|
|
})
|
|
} else if (local_commit !== remote_commit) {
|
|
log.console(" Update available!")
|
|
log.console(" Local: " + local_commit.substring(0, 8))
|
|
log.console(" Remote: " + remote_commit.substring(0, 8))
|
|
updates_available.push({
|
|
alias: alias,
|
|
locator: locator,
|
|
local_commit: local_commit,
|
|
remote_commit: remote_commit
|
|
})
|
|
} else {
|
|
log.console(" Up to date (" + local_commit.substring(0, 8) + ")")
|
|
}
|
|
} catch (e) {
|
|
log.console(" Failed to check: " + e)
|
|
}
|
|
}
|
|
|
|
if (updates_available.length === 0) {
|
|
log.console("\nAll dependencies are up to date!")
|
|
$_.stop()
|
|
return
|
|
}
|
|
|
|
log.console("\n" + updates_available.length + " update(s) available:")
|
|
for (var i = 0; i < updates_available.length; i++) {
|
|
var update = updates_available[i]
|
|
log.console(" - " + update.alias)
|
|
}
|
|
|
|
// If specific dependency was requested, auto-install
|
|
if (args.length > 0 && updates_available.length > 0) {
|
|
log.console("\nDownloading update...")
|
|
os.system("cell mod download")
|
|
} else if (updates_available.length > 0) {
|
|
log.console("\nRun 'cell mod download' to install updates")
|
|
}
|
|
|
|
$_.stop() |