stages: add org.osbuild.chmod
Add new stage to change the mode bits of files in the tree.
This commit is contained in:
parent
a411ba2270
commit
158d6da415
1 changed files with 67 additions and 0 deletions
67
stages/org.osbuild.chmod
Executable file
67
stages/org.osbuild.chmod
Executable file
|
|
@ -0,0 +1,67 @@
|
|||
#!/usr/bin/python3
|
||||
"""
|
||||
Change file mode bits
|
||||
|
||||
Change the file mode bits of one or more files or directories inside the tree.
|
||||
"""
|
||||
|
||||
import os
|
||||
import subprocess
|
||||
import sys
|
||||
|
||||
import osbuild.api
|
||||
from osbuild.util.path import in_tree
|
||||
|
||||
SCHEMA = r"""
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"items": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"patternProperties": {
|
||||
"^\\/(?!\\.\\.)((?!\\/\\.\\.\\/).)+$": {
|
||||
"type": "object",
|
||||
"required": ["mode"],
|
||||
"properties": {
|
||||
"mode": {
|
||||
"type": "string",
|
||||
"description": "Symbolic or numeric octal mode"
|
||||
},
|
||||
"recursive": {
|
||||
"type": "boolean",
|
||||
"description": "Change modes recursively",
|
||||
"default": false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
"""
|
||||
|
||||
|
||||
def chmod(path: str, mode: str, recursive: bool):
|
||||
arguments = [mode]
|
||||
if recursive:
|
||||
arguments.append("--recursive")
|
||||
arguments.append("--")
|
||||
arguments.append(path)
|
||||
|
||||
subprocess.run(["chmod", *arguments], check=True)
|
||||
|
||||
|
||||
def main(tree, options):
|
||||
for path, cmdargs in options["items"].items():
|
||||
mode = cmdargs["mode"]
|
||||
recursive = cmdargs.get("recursive", False)
|
||||
realpath = os.path.join(tree, path.lstrip("/"))
|
||||
if not in_tree(realpath, tree, must_exist=True):
|
||||
raise ValueError(f"path {path} not in tree")
|
||||
chmod(realpath, mode, recursive)
|
||||
|
||||
return 0
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
args = osbuild.api.arguments()
|
||||
sys.exit(main(args["tree"], args["options"]))
|
||||
Loading…
Add table
Add a link
Reference in a new issue