12.4.1
by Allan LeSage
Minor organizational suggestions. |
1 |
import os |
2 |
import hashlib |
|
79.3.1
by Martin Mrazik
adding more info for debugging stalled locks; eventually reusable for stalled lock cleanup |
3 |
from settings import LAUNCHPADLOCKS_DIR, logger |
12.4.1
by Allan LeSage
Minor organizational suggestions. |
4 |
|
5 |
||
6 |
class MergeProposalReview(): |
|
7 |
_mp = None |
|
8 |
||
9 |
def __init__(self, mp): |
|
10 |
self._mp = mp |
|
11 |
||
12 |
@property
|
|
13 |
def mp(self): |
|
14 |
"""Merge proposal."""
|
|
15 |
||
16 |
return self._mp |
|
17 |
||
18 |
def _get_hash(self): |
|
19 |
return hashlib.sha224(self.mp.web_link).hexdigest() |
|
44.1.1
by Martin Mrazik
pep8izing |
20 |
|
12.4.1
by Allan LeSage
Minor organizational suggestions. |
21 |
def get_lockfile(self): |
22 |
return LAUNCHPADLOCKS_DIR + '/' + self._get_hash() |
|
23 |
||
79.3.1
by Martin Mrazik
adding more info for debugging stalled locks; eventually reusable for stalled lock cleanup |
24 |
def lock(self, job_name): |
12.4.1
by Allan LeSage
Minor organizational suggestions. |
25 |
if not os.path.exists(LAUNCHPADLOCKS_DIR): |
26 |
os.makedirs(LAUNCHPADLOCKS_DIR) |
|
27 |
lockfile = open(self.get_lockfile(), 'w') |
|
79.3.1
by Martin Mrazik
adding more info for debugging stalled locks; eventually reusable for stalled lock cleanup |
28 |
lock_info = "{jenkins_job}\n{merge_proposal}\n" |
29 |
lock_info = lock_info.format(jenkins_job=job_name, |
|
30 |
merge_proposal=self.mp.web_link) |
|
31 |
lockfile.write(lock_info) |
|
12.4.1
by Allan LeSage
Minor organizational suggestions. |
32 |
lockfile.close() |
33 |
||
34 |
def unlock(self): |
|
35 |
try: |
|
36 |
os.remove(self.get_lockfile()) |
|
37 |
return True |
|
38 |
except OSError as error: |
|
39 |
if error.errno == 2: |
|
79.3.1
by Martin Mrazik
adding more info for debugging stalled locks; eventually reusable for stalled lock cleanup |
40 |
logger.debug("mp lock doesn't exists. Ignoring this unlock.") |
12.4.1
by Allan LeSage
Minor organizational suggestions. |
41 |
return False |
42 |
||
79.3.1
by Martin Mrazik
adding more info for debugging stalled locks; eventually reusable for stalled lock cleanup |
43 |
def get_jenkins_job(self): |
44 |
if self.is_locked(): |
|
45 |
lockfile = open(self.get_lockfile(), 'r') |
|
46 |
job_name = lockfile.readline().rstrip() |
|
47 |
return job_name |
|
48 |
else: |
|
49 |
return None |
|
50 |
||
12.4.1
by Allan LeSage
Minor organizational suggestions. |
51 |
def is_locked(self): |
52 |
return os.path.exists(self.get_lockfile()) |