summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--docs/python-support.md32
-rw-r--r--event_log.py23
2 files changed, 43 insertions, 12 deletions
diff --git a/docs/python-support.md b/docs/python-support.md
new file mode 100644
index 00000000..af19cd05
--- /dev/null
+++ b/docs/python-support.md
@@ -0,0 +1,32 @@
1# Supported Python Versions
2
3With Python 2.7 officially going EOL on [01 Jan 2020](https://pythonclock.org/),
4we need a support plan for the repo project itself.
5Inevitably, there will be a long tail of users who still want to use Python 2 on
6their old LTS/corp systems and have little power to change the system.
7
8## Summary
9
10* Python 3.6 (released Dec 2016) is required by default starting with repo-1.14.
11* Older versions of Python (e.g. v2.7) may use the legacy feature-frozen branch
12 based on repo-1.13.
13
14## Overview
15
16We provide a branch for Python 2 users that is feature-frozen.
17Bugfixes may be added on a best-effort basis or from the community, but largely
18no new features will be added, nor is support guaranteed.
19
20Users can select this during `repo init` time via the [repo launcher].
21Otherwise the default branches (e.g. stable & master) will be used which will
22require Python 3.
23
24This means the [repo launcher] needs to support both Python 2 & Python 3, but
25since it doesn't import any other repo code, this shouldn't be too problematic.
26
27The master branch will require Python 3.6 at a minimum.
28If the system has an older version of Python 3, then users will have to select
29the legacy Python 2 branch instead.
30
31
32[repo launcher]: ../repo
diff --git a/event_log.py b/event_log.py
index 508b18ee..0696df50 100644
--- a/event_log.py
+++ b/event_log.py
@@ -51,7 +51,6 @@ class EventLog(object):
51 def __init__(self): 51 def __init__(self):
52 """Initializes the event log.""" 52 """Initializes the event log."""
53 self._log = [] 53 self._log = []
54 self._next_id = _EventIdGenerator()
55 self._parent = None 54 self._parent = None
56 55
57 def Add(self, name, task_name, start, finish=None, success=None, 56 def Add(self, name, task_name, start, finish=None, success=None,
@@ -71,7 +70,7 @@ class EventLog(object):
71 A dictionary of the event added to the log. 70 A dictionary of the event added to the log.
72 """ 71 """
73 event = { 72 event = {
74 'id': (kind, next(self._next_id)), 73 'id': (kind, _NextEventId()),
75 'name': name, 74 'name': name,
76 'task_name': task_name, 75 'task_name': task_name,
77 'start_time': start, 76 'start_time': start,
@@ -162,16 +161,16 @@ class EventLog(object):
162 f.write('\n') 161 f.write('\n')
163 162
164 163
165def _EventIdGenerator(): 164# An integer id that is unique across this invocation of the program.
166 """Returns multi-process safe iterator that generates locally unique id. 165_EVENT_ID = multiprocessing.Value('i', 1)
167 166
168 Yields: 167def _NextEventId():
168 """Helper function for grabbing the next unique id.
169
170 Returns:
169 A unique, to this invocation of the program, integer id. 171 A unique, to this invocation of the program, integer id.
170 """ 172 """
171 eid = multiprocessing.Value('i', 1) 173 with _EVENT_ID.get_lock():
172 174 val = _EVENT_ID.value
173 while True: 175 _EVENT_ID.value += 1
174 with eid.get_lock(): 176 return val
175 val = eid.value
176 eid.value += 1
177 yield val