diff --git a/CHANGES b/CHANGES index 6d358344..f4e5eb91 100644 --- a/CHANGES +++ b/CHANGES @@ -13,6 +13,8 @@ Changes 0.37.0 (*unreleased*) ====================== +- update timestamps of file dependencies even if the task is already up to date. + 0.36.0 (*2022-04-22*) ===================== @@ -607,4 +609,3 @@ Changes ==================== - initial release - diff --git a/doit/dependency.py b/doit/dependency.py index b8a1ed40..bc0192ca 100644 --- a/doit/dependency.py +++ b/doit/dependency.py @@ -541,12 +541,19 @@ def save_success(self, task, result_hash=None): else: self._set(task.name, "result:", get_md5(task.result)) + self.update_deps(task) + + def update_deps(self, task, ignore_missing=False): # file-dep self._set(task.name, 'checker:', self.checker.__class__.__name__) for dep in task.file_dep: - state = self.checker.get_state(dep, self._get(task.name, dep)) - if state is not None: - self._set(task.name, dep, state) + try: + state = self.checker.get_state(dep, self._get(task.name, dep)) + if state is not None: + self._set(task.name, dep, state) + except FileNotFoundError: + if not ignore_missing: + raise # save list of file_deps self._set(task.name, 'deps:', tuple(task.file_dep)) diff --git a/doit/runner.py b/doit/runner.py index 898725ab..56c2fbf5 100644 --- a/doit/runner.py +++ b/doit/runner.py @@ -215,6 +215,7 @@ def run_tasks(self, task_dispatcher): break if not self.select_task(node, task_dispatcher.tasks): + self.dep_manager.update_deps(node.task, ignore_missing=True) continue base_fail = self.execute_task(node.task)