1"""Main entry point for dvc CLI.""" 2 3from __future__ import unicode_literals 4 5import dvc.logger as logger 6from dvc.cli import parse_args 7from dvc.command.base import CmdBase 8from dvc.analytics import Analytics 9from dvc.exceptions import NotDvcRepoError, DvcParserError 10 11 12def main(argv=None): 13 """Run dvc CLI command. 14 15 Args: 16 argv: optional list of arguments to parse. sys.argv is used by default. 17 18 Returns: 19 int: command's return code. 20 """ 21 args = None 22 cmd = None 23 try: 24 args = parse_args(argv) 25 26 # Init loglevel early in case we'll run 27 # into errors before setting it properly 28 CmdBase.set_loglevel(args) 29 30 cmd = args.func(args) 31 32 ret = cmd.run_cmd() 33 except KeyboardInterrupt: 34 logger.error("interrupted by the user") 35 ret = 252 36 except NotDvcRepoError: 37 logger.error() 38 ret = 253 39 except DvcParserError: 40 ret = 254 41 except Exception: # pylint: disable=broad-except 42 logger.error("unexpected error") 43 ret = 255 44 45 Analytics().send_cmd(cmd, args, ret) 46 47 return ret 48