From 7e2520c02aeefec6681dcc23094f9dba39086e23 Mon Sep 17 00:00:00 2001 From: Saugat Pachhai Date: Fri, 18 Dec 2020 14:23:24 +0545 Subject: [PATCH] Cleanup debug log messages when loading stages (#5125) * Cleanup log messages when loading stages 1. Simplified callback stage debug message 2. Reduced no lock entry message to trace If lockfile does not have some entry, it will simply complain that lockfile is not uptodate once. If there is no lockfile or empty lockfile, it will complain that lockfile not found. 3. Annoying parametrization related wdir-interpolated debug message removed. * Update dvc/stage/__init__.py * black --- dvc/parsing/__init__.py | 5 ----- dvc/stage/__init__.py | 5 +---- dvc/stage/loader.py | 23 +++++++++++++++++++---- 3 files changed, 20 insertions(+), 13 deletions(-) diff --git a/dvc/parsing/__init__.py b/dvc/parsing/__init__.py index a4ebc7643..f12bcd7e6 100644 --- a/dvc/parsing/__init__.py +++ b/dvc/parsing/__init__.py @@ -246,11 +246,6 @@ class EntryDefinition: definition = deepcopy(self.definition) wdir = self._resolve_wdir(context, name, definition.get(WDIR_KWD)) - if self.wdir != wdir: - logger.debug( - "Stage %s has different wdir than dvc.yaml file", name - ) - vars_ = definition.pop(VARS_KWD, []) # FIXME: Should `vars` be templatized? check_interpolations(vars_, f"{self.where}.{name}.vars", self.relpath) diff --git a/dvc/stage/__init__.py b/dvc/stage/__init__.py index 66e59053a..bd724f3f0 100644 --- a/dvc/stage/__init__.py +++ b/dvc/stage/__init__.py @@ -257,10 +257,7 @@ class Stage(params.StageParams): if self.is_callback: logger.debug( - '%s is a "callback" stage ' - "(has a command and no dependencies) and thus always " - "considered as changed.", - self, + "%s has a command but no dependencies", self.addressing ) return True diff --git a/dvc/stage/loader.py b/dvc/stage/loader.py index 807f1642c..a6f5d6f5f 100644 --- a/dvc/stage/loader.py +++ b/dvc/stage/loader.py @@ -3,7 +3,7 @@ from collections.abc import Mapping from copy import deepcopy from itertools import chain -from funcy import cached_property, get_in, lcat, project +from funcy import cached_property, get_in, lcat, once, project from dvc import dependency, output from dvc.hash_info import HashInfo @@ -24,13 +24,19 @@ class StageLoader(Mapping): self.data = data or {} self.stages_data = self.data.get("stages", {}) self.repo = self.dvcfile.repo - self.lockfile_data = lockfile_data or {} + self._lockfile_data = lockfile_data or {} @cached_property def resolver(self): wdir = PathInfo(self.dvcfile.path).parent return DataResolver(self.repo, wdir, self.data) + @cached_property + def lockfile_data(self): + if not self._lockfile_data: + logger.debug("Lockfile for '%s' not found", self.dvcfile.relpath) + return self._lockfile_data + @staticmethod def fill_from_lock(stage, lock_data=None): """Fill values for params, checksums for outs and deps from lock.""" @@ -88,6 +94,14 @@ class StageLoader(Mapping): cls.fill_from_lock(stage, lock_data) return stage + @once + def lockfile_needs_update(self): + # if lockfile does not have all of the entries that dvc.yaml says it + # should have, provide a debug message once + # pylint: disable=protected-access + lockfile = self.dvcfile._lockfile.relpath + logger.debug("Lockfile '%s' needs to be updated.", lockfile) + def __getitem__(self, name): if not name: raise StageNameUnspecified(self.dvcfile) @@ -97,8 +111,9 @@ class StageLoader(Mapping): except EntryNotFound: raise StageNotFound(self.dvcfile, name) - if not self.lockfile_data.get(name): - logger.debug( + if self.lockfile_data and name not in self.lockfile_data: + self.lockfile_needs_update() + logger.trace( # type: ignore[attr-defined] "No lock entry found for '%s:%s'", self.dvcfile.relpath, name, )