mirror of
https://github.com/clearlinux/unbundle.git
synced 2026-06-16 02:35:48 +00:00
Detect include loops and report failures
Catch recursion errors and report them, report other failures and set the returncode to 1 on failures. Signed-off-by: Matthew Johnson <matthew.johnson@intel.com>
This commit is contained in:
@@ -19,9 +19,15 @@ def resolve_includes(bundle_name, bundle_path, bundles=False):
|
||||
packages_f = os.path.join(bundle_path, "packages")
|
||||
if not os.path.exists(packages_f):
|
||||
# pundle definition file does not exist
|
||||
return set()
|
||||
print(f"ERROR: could not find {bundle_name} bundle")
|
||||
return set(), False
|
||||
|
||||
# find name on its own line
|
||||
return set([bundle_name]) if f"\n{bundle_name}\n" in open(packages_f, "r").read() else set()
|
||||
if f"\n{bundle_name}\n" in open(packages_f, "r").read():
|
||||
return set([bundle_name]), True
|
||||
|
||||
print(f"ERROR: could not find {bundle_name} bundle")
|
||||
return set(), False
|
||||
|
||||
packages = set()
|
||||
for line in lines:
|
||||
@@ -31,7 +37,14 @@ def resolve_includes(bundle_name, bundle_path, bundles=False):
|
||||
|
||||
if line.startswith("include("):
|
||||
inc_bundle = line[len("include("):].rsplit(")")[0]
|
||||
packages = packages.union(resolve_includes(inc_bundle, bundle_path, bundles))
|
||||
try:
|
||||
n_packages, success = resolve_includes(inc_bundle, bundle_path, bundles)
|
||||
if not success:
|
||||
return set(), False
|
||||
packages = packages.union(n_packages)
|
||||
except RecursionError:
|
||||
print("ERROR: include loop found")
|
||||
return set(), False
|
||||
if bundles:
|
||||
packages.add(inc_bundle)
|
||||
|
||||
@@ -40,7 +53,7 @@ def resolve_includes(bundle_name, bundle_path, bundles=False):
|
||||
if not bundles:
|
||||
packages.add(line)
|
||||
|
||||
return packages
|
||||
return packages, True
|
||||
|
||||
if __name__ == "__main__":
|
||||
parser = argparse.ArgumentParser(description='Process bundle packages following includes')
|
||||
@@ -49,10 +62,17 @@ if __name__ == "__main__":
|
||||
parser.add_argument('--bundles', default=False, action='store_true',
|
||||
help='Report only included bundle names')
|
||||
args = parser.parse_args()
|
||||
success = True
|
||||
if args.bundles:
|
||||
os_core_set = set(["os-core"])
|
||||
else:
|
||||
os_core_set = resolve_includes("os-core", args.bundle_path)
|
||||
os_core_set, success = resolve_includes("os-core", args.bundle_path)
|
||||
|
||||
if not success:
|
||||
sys.exit(1)
|
||||
|
||||
bundle_set, success = resolve_includes(args.bundle_name, args.bundle_path, bundles=args.bundles)
|
||||
if not success:
|
||||
sys.exit(1)
|
||||
|
||||
bundle_set = resolve_includes(args.bundle_name, args.bundle_path, bundles=args.bundles)
|
||||
print('\n'.join(sorted(os_core_set.union(bundle_set))))
|
||||
|
||||
Reference in New Issue
Block a user