mirror of
https://github.com/Stone-Red-Code/dvc.git
synced 2026-11-07 23:09:21 +01:00
We've used updater for years now to notify our users ASAP about new releases. These days dvc is more stable and we've actually been receiving numerous complains about updater being too annoying and even introduced a config flag to turn it off, which a lot of people do and which defeats its purpose. Instead of introducing some complex logic that would notify more rarely and once for the user instead of once for every dvc project they have - this PR just turns it off for everything, except `dvc doctor/version`, which is the command that people use when they are running into issues and that will give them a hint to just try out the newest version first, as it might be already fixed. This PR is a more of a compromise, to get the most out of updater while removing a pain point of it being too annoying, without investing much time into it and not having to maintain complex unnecessary logic. We might get back to introducing something more intricate in the future, if the need arises. Fixes #5912
60 lines
1.3 KiB
Python
60 lines
1.3 KiB
Python
import logging
|
|
import os
|
|
from abc import ABC, abstractmethod
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
def fix_subparsers(subparsers):
|
|
"""Workaround for bug in Python 3. See more info at:
|
|
https://bugs.python.org/issue16308
|
|
https://github.com/iterative/dvc/issues/769
|
|
|
|
Args:
|
|
subparsers: subparsers to fix.
|
|
"""
|
|
subparsers.required = True
|
|
subparsers.dest = "cmd"
|
|
|
|
|
|
def append_doc_link(help_message, path):
|
|
from dvc.utils import format_link
|
|
|
|
if not path:
|
|
return help_message
|
|
doc_base = "https://man.dvc.org/"
|
|
return "{message}\nDocumentation: {link}".format(
|
|
message=help_message, link=format_link(doc_base + path)
|
|
)
|
|
|
|
|
|
class CmdBase(ABC):
|
|
UNINITIALIZED = False
|
|
|
|
def __init__(self, args):
|
|
from dvc.repo import Repo
|
|
|
|
os.chdir(args.cd)
|
|
|
|
self.repo = Repo(uninitialized=self.UNINITIALIZED)
|
|
self.config = self.repo.config
|
|
self.args = args
|
|
|
|
def do_run(self):
|
|
with self.repo:
|
|
return self.run()
|
|
|
|
@abstractmethod
|
|
def run(self):
|
|
pass
|
|
|
|
|
|
class CmdBaseNoRepo(CmdBase):
|
|
def __init__(self, args): # pylint: disable=super-init-not-called
|
|
self.args = args
|
|
|
|
os.chdir(args.cd)
|
|
|
|
def do_run(self):
|
|
return self.run()
|