summaryrefslogtreecommitdiffstats
path: root/gitautodeploy/lock.py
diff options
context:
space:
mode:
authorOliver Poignant <oliver@poignant.se>2016-05-29 10:39:53 +0200
committerOliver Poignant <oliver@poignant.se>2016-05-29 10:39:53 +0200
commitb2f95fa7a1f12ea4b8029320db4c7458a9a32feb (patch)
tree2258bb6d704d19e0a8bd7a043781bfa4f4ae214e /gitautodeploy/lock.py
parent110be3c3ea3d34c5cd686061f9dda7e69222e536 (diff)
parent84e99d89e75b4c2e5e5e8678a15adb9d391daa44 (diff)
downloadGit-Auto-Deploy-b2f95fa7a1f12ea4b8029320db4c7458a9a32feb.zip
Git-Auto-Deploy-b2f95fa7a1f12ea4b8029320db4c7458a9a32feb.tar.gz
Git-Auto-Deploy-b2f95fa7a1f12ea4b8029320db4c7458a9a32feb.tar.bz2
Merge branch 'master' into development
Diffstat (limited to 'gitautodeploy/lock.py')
-rw-r--r--gitautodeploy/lock.py37
1 files changed, 16 insertions, 21 deletions
diff --git a/gitautodeploy/lock.py b/gitautodeploy/lock.py
index 8bd8b32..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
- logger.info("Successfully obtained lock: %s" % self.path)
- except OSError:
+ self.lock.acquire(0)
+ logger.debug("Successfully obtained lock: %s" % self.path)
+ 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.info("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.info("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)