update cli docs and fix cli scripts with new syntax
This commit is contained in:
67
verify.ce
67
verify.ce
@@ -20,8 +20,10 @@ var fd = use('fd')
|
||||
var scope = null
|
||||
var deep = false
|
||||
var target_triple = null
|
||||
var i = 0
|
||||
var resolved = null
|
||||
|
||||
for (var i = 0; i < length(args); i++) {
|
||||
for (i = 0; i < length(args); i++) {
|
||||
if (args[i] == '--deep') {
|
||||
deep = true
|
||||
} else if (args[i] == '--target' || args[i] == '-t') {
|
||||
@@ -74,12 +76,27 @@ function add_warning(msg) {
|
||||
|
||||
// Verify a single package
|
||||
function verify_package(locator) {
|
||||
var lock = null
|
||||
var lock_entry = null
|
||||
var links = null
|
||||
var link_target = null
|
||||
var pkg_dir = null
|
||||
var dir_exists = false
|
||||
var current_target = null
|
||||
var expected_target = null
|
||||
var target_dir = null
|
||||
var lib_dir = null
|
||||
var lib_name = null
|
||||
var dylib_ext = null
|
||||
var lib_path = null
|
||||
var c_files = null
|
||||
|
||||
checked++
|
||||
|
||||
var lock = shop.load_lock()
|
||||
var lock_entry = lock[locator]
|
||||
var links = link.load()
|
||||
var link_target = links[locator]
|
||||
lock = shop.load_lock()
|
||||
lock_entry = lock[locator]
|
||||
links = link.load()
|
||||
link_target = links[locator]
|
||||
|
||||
// Check lock entry exists
|
||||
if (!lock_entry) {
|
||||
@@ -87,8 +104,8 @@ function verify_package(locator) {
|
||||
}
|
||||
|
||||
// Check package directory exists
|
||||
var pkg_dir = shop.get_package_dir(locator)
|
||||
var dir_exists = fd.is_dir(pkg_dir) || fd.is_link(pkg_dir)
|
||||
pkg_dir = shop.get_package_dir(locator)
|
||||
dir_exists = fd.is_dir(pkg_dir) || fd.is_link(pkg_dir)
|
||||
|
||||
if (!dir_exists) {
|
||||
add_error(locator + ": package directory missing at " + pkg_dir)
|
||||
@@ -112,7 +129,7 @@ function verify_package(locator) {
|
||||
}
|
||||
} else {
|
||||
// Package target
|
||||
var target_dir = shop.get_package_dir(link_target)
|
||||
target_dir = shop.get_package_dir(link_target)
|
||||
if (!fd.is_dir(target_dir) && !fd.is_link(target_dir)) {
|
||||
add_error(locator + ": link target package not found: " + link_target)
|
||||
}
|
||||
@@ -120,8 +137,8 @@ function verify_package(locator) {
|
||||
|
||||
// Check symlink is correct
|
||||
if (fd.is_link(pkg_dir)) {
|
||||
var current_target = fd.readlink(pkg_dir)
|
||||
var expected_target = starts_with(link_target, '/') ? link_target : shop.get_package_dir(link_target)
|
||||
current_target = fd.readlink(pkg_dir)
|
||||
expected_target = starts_with(link_target, '/') ? link_target : shop.get_package_dir(link_target)
|
||||
if (current_target != expected_target) {
|
||||
add_warning(locator + ": symlink target mismatch (expected " + expected_target + ", got " + current_target + ")")
|
||||
}
|
||||
@@ -131,22 +148,23 @@ function verify_package(locator) {
|
||||
}
|
||||
|
||||
// Check build output exists
|
||||
var lib_dir = shop.get_lib_dir()
|
||||
var lib_name = shop.lib_name_for_package(locator)
|
||||
var dylib_ext = '.dylib' // TODO: detect from target
|
||||
var lib_path = lib_dir + '/' + lib_name + dylib_ext
|
||||
lib_dir = shop.get_lib_dir()
|
||||
lib_name = shop.lib_name_for_package(locator)
|
||||
dylib_ext = '.dylib' // TODO: detect from target
|
||||
lib_path = lib_dir + '/' + lib_name + dylib_ext
|
||||
|
||||
// Only check for builds if package has C files
|
||||
try {
|
||||
var c_files = pkg.get_c_files(locator, target_triple, true)
|
||||
var _check_build = function() {
|
||||
c_files = pkg.get_c_files(locator, target_triple, true)
|
||||
if (c_files && length(c_files) > 0) {
|
||||
if (!fd.is_file(lib_path)) {
|
||||
add_warning(locator + ": library not built at " + lib_path)
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
} disruption {
|
||||
// Skip build check if can't determine C files
|
||||
}
|
||||
_check_build()
|
||||
}
|
||||
|
||||
// Check for link cycles
|
||||
@@ -154,19 +172,20 @@ function check_link_cycles() {
|
||||
var links = link.load()
|
||||
|
||||
function follow_chain(origin, visited) {
|
||||
var target = null
|
||||
if (visited[origin]) {
|
||||
return origin // cycle detected
|
||||
}
|
||||
visited[origin] = true
|
||||
|
||||
var target = links[origin]
|
||||
target = links[origin]
|
||||
if (target && links[target]) {
|
||||
return follow_chain(target, visited)
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
arrfor(links, function(origin) {
|
||||
arrfor(array(links), function(origin) {
|
||||
var cycle_start = follow_chain(origin, {})
|
||||
if (cycle_start) {
|
||||
add_error("Link cycle detected starting from: " + origin)
|
||||
@@ -190,20 +209,21 @@ function check_dangling_links() {
|
||||
|
||||
// Gather packages to verify
|
||||
var packages_to_verify = []
|
||||
var locator = null
|
||||
var all_deps = null
|
||||
|
||||
if (scope == 'shop') {
|
||||
packages_to_verify = shop.list_packages()
|
||||
} else if (scope == 'world') {
|
||||
// For now, world is the same as shop
|
||||
// In future, this could be a separate concept
|
||||
packages_to_verify = shop.list_packages()
|
||||
} else {
|
||||
// Single package
|
||||
var locator = scope
|
||||
locator = scope
|
||||
|
||||
// Resolve local paths
|
||||
if (locator == '.' || starts_with(locator, './') || starts_with(locator, '../') || fd.is_dir(locator)) {
|
||||
var resolved = fd.realpath(locator)
|
||||
resolved = fd.realpath(locator)
|
||||
if (resolved) {
|
||||
locator = resolved
|
||||
}
|
||||
@@ -211,7 +231,7 @@ if (scope == 'shop') {
|
||||
|
||||
if (deep) {
|
||||
// Gather all dependencies
|
||||
var all_deps = pkg.gather_dependencies(locator)
|
||||
all_deps = pkg.gather_dependencies(locator)
|
||||
push(packages_to_verify, locator)
|
||||
arrfor(all_deps, function(dep) {
|
||||
push(packages_to_verify, dep)
|
||||
@@ -249,7 +269,6 @@ if (length(errors) > 0) {
|
||||
})
|
||||
log.console("")
|
||||
log.console("Verification FAILED: " + text(length(errors)) + " error(s), " + text(length(warnings)) + " warning(s)")
|
||||
// Note: would use process.exit(1) if available
|
||||
} else {
|
||||
log.console("Verification PASSED: " + text(checked) + " package(s) checked, " + text(length(warnings)) + " warning(s)")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user