Source code for datumaro.cli.commands.require_project.versioning.commit
# Copyright (C) 2020-2021 Intel Corporation
#
# SPDX-License-Identifier: MIT
import argparse
from datumaro.util.scope import scope_add, scoped
from ....util import MultilineFormatter
from ....util.project import load_project
[docs]
def build_parser(parser_ctor=argparse.ArgumentParser):
parser = parser_ctor(
help="Create a revision",
description="""
Creates a new revision from the current state of the working directory.|n
|n
Examples:|n
- Create a revision:|n
|s|s%(prog)s -m "Added data"
""",
formatter_class=MultilineFormatter,
)
parser.add_argument("-m", "--message", required=True, help="Commit message")
parser.add_argument(
"--allow-empty",
action="store_true",
help="Allow commits with no changes (default: %(default)s)",
)
parser.add_argument(
"--allow-foreign",
action="store_true",
help="Allow commits with non-Datumaro changes (default: %(default)s)",
)
parser.add_argument(
"--no-cache",
action="store_true",
help="Don't put committed datasets into cache, "
"save only metainfo (default: %(default)s)",
)
parser.add_argument(
"-p",
"--project",
dest="project_dir",
help="Directory of the project to operate on (default: current dir)",
)
parser.set_defaults(command=commit_command)
return parser
[docs]
def get_sensitive_args():
return {
commit_command: [
"message",
"project_dir",
],
}
[docs]
@scoped
def commit_command(args):
project = scope_add(load_project(args.project_dir))
old_tree = project.head
new_commit = project.commit(
args.message,
allow_empty=args.allow_empty,
allow_foreign=args.allow_foreign,
no_cache=args.no_cache,
)
new_tree = project.working_tree
diff = project.diff(old_tree, new_tree)
print("Moved to commit '%s' %s" % (new_commit, args.message))
print(" %s targets changed" % len(diff))
for t, s in diff.items():
print(" %s %s" % (s.name, t))
return 0