Blob Blame History Raw
#!/usr/bin/python3
"""
Create an ostree repository

Uses `ostree init` to create an ostree repository. The
mode and location can be specified via the `mode` and
`path` option.

See the ostree-init(1) man page for more details.
"""

import os
import subprocess
import sys

import osbuild.api


SCHEMA = """
"additionalProperties": false,
"properties": {
  "mode": {
    "description": "The mode to initialize the repo in.",
    "enum": ["bare", "bare-user", "bare-user-only", "archive"],
    "default": "archive"
  },
  "path": {
    "description": "Location where to create the repo at.",
    "type": "string",
    "default": "/repo"
  }
}
"""


def main(tree, options):
    mode = options.get("mode", "archive")
    path = options.get("path", "repo")

    repo = os.path.join(tree, path.lstrip("/"))

    parent = os.path.dirname(repo)
    os.makedirs(parent, exist_ok=True)

    subprocess.run(["ostree",
                    "init",
                    "-v",
                    f"--mode={mode}",
                    f"--repo={repo}"],
                   stdout=sys.stderr,
                   check=True)


if __name__ == '__main__':
    args = osbuild.api.arguments()
    args_tree = args["tree"]
    r = main(args_tree, args["options"])
    sys.exit(r)