def build_step(module, step, max_length): step = step.split(" ") operation, args = step[0], step[1:] source = module["_directory"] counter = module["_counter"] destination = "out/masterfiles" prefix = f"{counter:03d} {pad_right(module['name'], max_length)} :" if operation == "copy": src, dst = args if dst in [".", "./"]: dst = "" print(f"{prefix} copy '{src}' 'masterfiles/{dst}'") src, dst = os.path.join(source, src), os.path.join(destination, dst) cp(src, dst) elif operation == "run": shell_command = " ".join(args) print(f"{prefix} run '{shell_command}'") sh(shell_command, source) elif operation == "delete": files = [args] if type(args) is str else args assert len(files) > 0 as_string = " ".join([f"'{f}'" for f in files]) print(f"{prefix} delete {as_string}") for file in files: rm(os.path.join(source, file)) elif operation == "json": src, dst = args if dst in [".", "./"]: dst = "" print(f"{prefix} json '{src}' 'masterfiles/{dst}'") src, dst = os.path.join(source, src), os.path.join(destination, dst) extras, original = read_json(src), read_json(dst) assert extras is not None if not extras: print( f"Warning: '{os.path.basename(src)}' looks empty, adding nothing" ) if original: merged = merge_json(original, extras) else: merged = extras write_json(dst, merged) elif operation == "append": src, dst = args if dst in [".", "./"]: dst = "" print(f"{prefix} append '{src}' 'masterfiles/{dst}'") src, dst = os.path.join(source, src), os.path.join(destination, dst) if not os.path.exists(dst): touch(dst) assert os.path.isfile(dst) sh(f"cat '{src}' >> '{dst}'") else: user_error(f"Unknown build step operation: {operation}")
def get_index(prefer_offline=False) -> dict: global index if not index and prefer_offline: index = read_json(index_path()) if not index: index = get_json(index_url()) if not index: assert not prefer_offline index = read_json(index_path()) if index: print("Warning: Downloading index failed, using cache") if not index: sys.exit("Could not download or find module index") if "modules" not in index: sys.exit("Empty or invalid module index") return index["modules"]
def __init__( self, path, index_argument=None, data=None, url=None, url_commit=None, ): assert path self.path = path self.url = url self.url_commit = url_commit if data: self._data = data else: self._data = read_json(self.path) if index_argument: self.index = Index(index_argument) elif self._data and "index" in self._data: self.index = Index(self._data["index"]) else: self.index = Index()
def get_definition() -> dict: global definition if not definition: definition = read_json(cfbs_filename()) return definition
def _perform_build_step(module, step, max_length): step = step.split(" ") operation, args = step[0], step[1:] source = module["_directory"] counter = module["_counter"] destination = "out/masterfiles" prefix = "%03d %s :" % (counter, pad_right(module["name"], max_length)) if operation == "copy": src, dst = args if dst in [".", "./"]: dst = "" print("%s copy '%s' 'masterfiles/%s'" % (prefix, src, dst)) src, dst = os.path.join(source, src), os.path.join(destination, dst) cp(src, dst) elif operation == "run": shell_command = " ".join(args) print("%s run '%s'" % (prefix, shell_command)) sh(shell_command, source) elif operation == "delete": files = [args] if type(args) is str else args assert len(files) > 0 as_string = " ".join(["'%s'" % f for f in files]) print("%s delete %s" % (prefix, as_string)) for file in files: rm(os.path.join(source, file)) elif operation == "json": src, dst = args if dst in [".", "./"]: dst = "" print("%s json '%s' 'masterfiles/%s'" % (prefix, src, dst)) if not os.path.isfile(os.path.join(source, src)): user_error("'%s' is not a file" % src) src, dst = os.path.join(source, src), os.path.join(destination, dst) extras, original = read_json(src), read_json(dst) if not extras: print("Warning: '%s' looks empty, adding nothing" % os.path.basename(src)) if original: merged = merge_json(original, extras) else: merged = extras write_json(dst, merged) elif operation == "append": src, dst = args if dst in [".", "./"]: dst = "" print("%s append '%s' 'masterfiles/%s'" % (prefix, src, dst)) src, dst = os.path.join(source, src), os.path.join(destination, dst) if not os.path.exists(dst): touch(dst) assert os.path.isfile(dst) sh("cat '%s' >> '%s'" % (src, dst)) elif operation == "directory": src, dst = args if dst in [".", "./"]: dst = "" print("{} directory '{}' 'masterfiles/{}'".format(prefix, src, dst)) dstarg = dst # save this for adding .cf files to inputs src, dst = os.path.join(source, src), os.path.join(destination, dst) defjson = os.path.join(destination, "def.json") merged = read_json(defjson) if not merged: merged = {} if "classes" not in merged: merged["classes"] = {} if "services_autorun_bundles" not in merged["classes"]: merged["classes"]["services_autorun_bundles"] = ["any"] inputs = [] for root, dirs, files in os.walk(src): for f in files: if f.endswith(".cf"): inputs.append(os.path.join(dstarg, f)) cp(os.path.join(root, f), os.path.join(destination, dstarg, f)) elif f == "def.json": extra = read_json(os.path.join(root, f)) if extra: merged = merge_json(merged, extra) else: cp(os.path.join(root, f), os.path.join(destination, dstarg, f)) if "inputs" in merged: merged["inputs"].extend(inputs) else: merged["inputs"] = inputs write_json(defjson, merged) else: user_error("Unknown build step operation: %s" % operation)