From 7f12ef85397a1400fac2eb2eba6ba36f943531e9 Mon Sep 17 00:00:00 2001 From: Aman Sharma Date: Sat, 9 Nov 2019 04:28:41 +0530 Subject: [PATCH 1/4] Improve error message when `LockError` is raised --- dvc/lock.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/dvc/lock.py b/dvc/lock.py index 27ca67229..dc6c52b23 100644 --- a/dvc/lock.py +++ b/dvc/lock.py @@ -6,6 +6,7 @@ import os import time from datetime import timedelta +import colorama from funcy.py3 import lkeep from dvc.exceptions import DvcException @@ -73,7 +74,11 @@ if is_py3: except flufl.lock.TimeOutError: raise LockError( "cannot perform the cmd since DVC is busy and " - "locked. Please retry the cmd later." + "locked. You can delete .dvc/lock to fix it, but first " + "please make sure there's no other dvc process ongoing " + "by running: {blue}`ps xaf | grep dvc`{nc}.".format( + blue=colorama.Back.BLUE, nc=colorama.Back.RESET + ) ) def _set_claimfile(self, pid=None): @@ -121,7 +126,11 @@ else: except zc.lockfile.LockError: raise LockError( "cannot perform the cmd since DVC is busy and " - "locked. Please retry the cmd later." + "locked. You can delete .dvc/lock to fix it, but first " + "please make sure there's no other dvc process ongoing " + "by running: {blue}`ps xaf | grep dvc`{nc}.".format( + blue=colorama.Back.BLUE, nc=colorama.Back.RESET + ) ) def lock(self): From f6a6d2eef9ae04f9cdde622572accbce4fbf459f Mon Sep 17 00:00:00 2001 From: Aman Sharma Date: Sat, 9 Nov 2019 04:29:56 +0530 Subject: [PATCH 2/4] Remove unreachable `except` block --- dvc/main.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/dvc/main.py b/dvc/main.py index b18117f79..660f9420d 100644 --- a/dvc/main.py +++ b/dvc/main.py @@ -9,7 +9,6 @@ from dvc.config import ConfigError from dvc.exceptions import DvcParserError from dvc.exceptions import NotDvcRepoError from dvc.external_repo import clean_repos -from dvc.lock import LockError from dvc.logger import FOOTER from dvc.remote.pool import close_pools from dvc.utils.compat import is_py2 @@ -48,9 +47,6 @@ def main(argv=None): cmd = args.func(args) ret = cmd.run() - except LockError: - logger.exception("failed to lock before running a command") - ret = 250 except ConfigError: logger.exception("configuration error") ret = 251 From 1ca054c2fbdd3d3776e98d81476c71414fb16663 Mon Sep 17 00:00:00 2001 From: Aman Sharma Date: Sat, 9 Nov 2019 14:34:19 +0530 Subject: [PATCH 3/4] Move error message to a constant --- dvc/lock.py | 24 ++++++++---------------- 1 file changed, 8 insertions(+), 16 deletions(-) diff --git a/dvc/lock.py b/dvc/lock.py index dc6c52b23..777afa031 100644 --- a/dvc/lock.py +++ b/dvc/lock.py @@ -16,6 +16,12 @@ from dvc.utils.compat import is_py3 DEFAULT_TIMEOUT = 5 +ERROR_MESSAGE = ( + "cannot perform the cmd since DVC is busy and locked. You can delete " + ".dvc/lock to fix it, but first please make sure there's no other dvc " + "process ongoing by running: {blue}`ps xaf | grep dvc`{nc}." +).format(blue=colorama.Back.BLUE, nc=colorama.Back.RESET) + class LockError(DvcException): """Thrown when unable to acquire the lock for dvc repo.""" @@ -72,14 +78,7 @@ if is_py3: try: super(Lock, self).lock(timedelta(seconds=DEFAULT_TIMEOUT)) except flufl.lock.TimeOutError: - raise LockError( - "cannot perform the cmd since DVC is busy and " - "locked. You can delete .dvc/lock to fix it, but first " - "please make sure there's no other dvc process ongoing " - "by running: {blue}`ps xaf | grep dvc`{nc}.".format( - blue=colorama.Back.BLUE, nc=colorama.Back.RESET - ) - ) + raise LockError(ERROR_MESSAGE) def _set_claimfile(self, pid=None): super(Lock, self)._set_claimfile(pid) @@ -124,14 +123,7 @@ else: try: self._lock = zc.lockfile.LockFile(self.lockfile) except zc.lockfile.LockError: - raise LockError( - "cannot perform the cmd since DVC is busy and " - "locked. You can delete .dvc/lock to fix it, but first " - "please make sure there's no other dvc process ongoing " - "by running: {blue}`ps xaf | grep dvc`{nc}.".format( - blue=colorama.Back.BLUE, nc=colorama.Back.RESET - ) - ) + raise LockError(ERROR_MESSAGE) def lock(self): try: From 13ddcd4b2f39e5de65765ee1e15d7e5afffb379e Mon Sep 17 00:00:00 2001 From: Aman Sharma Date: Thu, 14 Nov 2019 02:39:21 +0530 Subject: [PATCH 4/4] Rephrase error message --- dvc/lock.py | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/dvc/lock.py b/dvc/lock.py index 777afa031..147118c0f 100644 --- a/dvc/lock.py +++ b/dvc/lock.py @@ -6,7 +6,6 @@ import os import time from datetime import timedelta -import colorama from funcy.py3 import lkeep from dvc.exceptions import DvcException @@ -16,11 +15,11 @@ from dvc.utils.compat import is_py3 DEFAULT_TIMEOUT = 5 -ERROR_MESSAGE = ( - "cannot perform the cmd since DVC is busy and locked. You can delete " - ".dvc/lock to fix it, but first please make sure there's no other dvc " - "process ongoing by running: {blue}`ps xaf | grep dvc`{nc}." -).format(blue=colorama.Back.BLUE, nc=colorama.Back.RESET) +FAILED_TO_LOCK_MESSAGE = ( + "cannot perform the command because another DVC process seems to be " + "running on this project. If that is not the case, manually remove " + "`.dvc/lock` and try again." +) class LockError(DvcException): @@ -78,7 +77,7 @@ if is_py3: try: super(Lock, self).lock(timedelta(seconds=DEFAULT_TIMEOUT)) except flufl.lock.TimeOutError: - raise LockError(ERROR_MESSAGE) + raise LockError(FAILED_TO_LOCK_MESSAGE) def _set_claimfile(self, pid=None): super(Lock, self)._set_claimfile(pid) @@ -123,7 +122,7 @@ else: try: self._lock = zc.lockfile.LockFile(self.lockfile) except zc.lockfile.LockError: - raise LockError(ERROR_MESSAGE) + raise LockError(FAILED_TO_LOCK_MESSAGE) def lock(self): try: