def main(argv=None): """Run dvc CLI command. Args: argv: optional list of arguments to parse. sys.argv is used by default. Returns: int: command's return code. """ args = None cmd = None outerLogLevel = logger.level try: args = parse_args(argv) if args.quiet: logger.setLevel(logging.CRITICAL) elif args.verbose: logger.setLevel(logging.DEBUG) cmd = args.func(args) ret = cmd.run() except ConfigError: logger.exception("configuration error") ret = 251 except KeyboardInterrupt: logger.exception("interrupted by the user") ret = 252 except NotDvcRepoError: logger.exception("") ret = 253 except DvcParserError: ret = 254 except Exception as exc: # pylint: disable=broad-except if isinstance(exc, OSError) and exc.errno == errno.EMFILE: logger.exception( "too many open files, please increase your `ulimit`", extra={"tb_only": True}, ) else: logger.exception("unexpected error") ret = 255 finally: logger.setLevel(outerLogLevel) # Remove cached repos in the end of the call, these are anonymous # so won't be reused by any other subsequent run anyway. clean_repos() if ret != 0: logger.info(FOOTER) if analytics.is_enabled(): analytics.collect_and_send_report(args, ret) return ret
def test_update_import(dvc_repo, erepo): src = "version" dst = src stage = dvc_repo.imp(erepo.root_dir, src, dst, rev="branch") assert os.path.exists(dst) assert os.path.isfile(dst) with open(dst, "r+") as fobj: assert fobj.read() == "branch" # update data repo = Repo(erepo.root_dir) saved_dir = os.getcwd() os.chdir(erepo.root_dir) repo.scm.checkout("branch") os.unlink("version") erepo.create("version", "updated") repo.add("version") repo.scm.add([".gitignore", "version.dvc"]) repo.scm.commit("updated") repo.scm.checkout("master") repo.scm.close() os.chdir(saved_dir) # Caching in external repos doesn't see upstream updates within single # cli call, so we need to clean the caches to see the changes. clean_repos() assert dvc_repo.status([stage.path]) == {} dvc_repo.update(stage.path) assert dvc_repo.status([stage.path]) == {} assert os.path.exists(dst) assert os.path.isfile(dst) with open(dst, "r+") as fobj: assert fobj.read() == "updated"