Source code for datumaro.cli.commands.require_project.versioning.checkout

# Copyright (C) 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="Navigate to a revision", description=""" Command forms:|n 1) %(prog)s <revision>|n 2) %(prog)s [--] <source1> ...|n 3) %(prog)s <revision> [--] <source1> <source2> ...|n |n 1 - Restores a revision and all the sources in the working directory.|n 2, 3 - Restores only specified sources from the specified revision.|n |n The current revision is used, when not set. When no revision and no sources is specified, restores the current revision (like the 1-st form). "--" is optionally used to separate source names and revisions.|n |n Examples:|n - Restore the previous revision:|n |s|s%(prog)s HEAD~1 |n |n - Restore the saved version of a source in the working tree|n |s|s%(prog)s -- source-1 |n |n - Restore a previous version of a source|n |s|s%(prog)s 33fbfbe my-source """, formatter_class=MultilineFormatter, ) parser.add_argument( "_positionals", nargs=argparse.REMAINDER, help=argparse.SUPPRESS ) # workaround for -- eaten by positionals parser.add_argument("rev", nargs="?", help="Commit or tag (default: current)") parser.add_argument("sources", nargs="*", help="Sources to restore (default: all)") parser.add_argument( "-f", "--force", action="store_true", help="Allows to overwrite unsaved changes in case of conflicts " "(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=checkout_command) return parser
[docs] def get_sensitive_args(): return { checkout_command: [ "rev", "sources", "project_dir", ], }
[docs] @scoped def checkout_command(args): has_sep = "--" in args._positionals if has_sep: pos = args._positionals.index("--") if 1 < pos: raise argparse.ArgumentError(None, message="Expected no more than 1 revision argument") else: pos = 1 args.rev = (args._positionals[:pos] or [None])[0] args.sources = args._positionals[pos + has_sep :] if has_sep and not args.sources: raise argparse.ArgumentError( "sources", message="When '--' is used, " "at least 1 source name must be specified" ) project = scope_add(load_project(args.project_dir)) project.checkout(rev=args.rev, sources=args.sources, force=args.force) return 0