diff options
author | Oliver Poignant <oliver@poignant.se> | 2016-05-28 16:16:48 +0200 |
---|---|---|
committer | Oliver Poignant <oliver@poignant.se> | 2016-05-28 16:16:48 +0200 |
commit | 34b3205c0ce3c6bf54c42cd5296ee9a06befc452 (patch) | |
tree | c877ed3c06b216d52f6c8221a8772a3d79aece34 /gitautodeploy/lock.py | |
parent | b4e3c96aecc821ce089442a62a825cd2c78bb876 (diff) | |
parent | 2afdae5f9f68de7ff14d7238986e190c1450be12 (diff) | |
download | Git-Auto-Deploy-34b3205c0ce3c6bf54c42cd5296ee9a06befc452.zip Git-Auto-Deploy-34b3205c0ce3c6bf54c42cd5296ee9a06befc452.tar.gz Git-Auto-Deploy-34b3205c0ce3c6bf54c42cd5296ee9a06befc452.tar.bz2 |
Merge branch 'vladionescu-windows-compat'
Diffstat (limited to 'gitautodeploy/lock.py')
-rw-r--r-- | gitautodeploy/lock.py | 35 |
1 files changed, 15 insertions, 20 deletions
diff --git a/gitautodeploy/lock.py b/gitautodeploy/lock.py index b0b408b..f894bb3 100644 --- a/gitautodeploy/lock.py +++ b/gitautodeploy/lock.py @@ -1,12 +1,15 @@ +from lockfile import LockFile + class Lock(): """Simple implementation of a mutex lock using the file systems. Works on *nix systems.""" path = None - _has_lock = False + lock = None def __init__(self, path): self.path = path + self.lock = LockFile(path) def obtain(self): import os @@ -14,39 +17,31 @@ class Lock(): logger = logging.getLogger() try: - os.open(self.path, os.O_CREAT | os.O_EXCL | os.O_WRONLY) - self._has_lock = True + self.lock.acquire(0) logger.debug("Successfully obtained lock: %s" % self.path) - except OSError: + except AlreadyLocked: return False - else: - return True + + return True def release(self): import os import logging logger = logging.getLogger() - if not self._has_lock: + if not self.has_lock(): raise Exception("Unable to release lock that is owned by another process") - try: - os.remove(self.path) - logger.debug("Successfully released lock: %s" % self.path) - finally: - self._has_lock = False + + self.lock.release() + logger.debug("Successfully released lock: %s" % self.path) def has_lock(self): - return self._has_lock + return self.lock.i_am_locking() def clear(self): import os import logging logger = logging.getLogger() - try: - os.remove(self.path) - except OSError: - pass - finally: - logger.debug("Successfully cleared lock: %s" % self.path) - self._has_lock = False
\ No newline at end of file + self.lock.break_lock() + logger.debug("Successfully cleared lock: %s" % self.path) |