diff options
Diffstat (limited to 'projgraph')
-rwxr-xr-x | projgraph | 26 |
1 files changed, 24 insertions, 2 deletions
@@ -10,21 +10,24 @@ blocked = 1 finished = 2 ready = 3 next = 4 +goal = 5 statuses = { 'blocked': blocked, 'finished': finished, 'ready': ready, 'next': next, + 'goal': goal, } def nodeattrs(done): attrs = { - unknown: {'shape': 'diamond'}, + unknown: {'fillcolor': '#ff0000', 'shape': 'diamond'}, blocked: {'fillcolor': '#f4bada', 'shape': 'rectangle'}, finished: {'fillcolor': '#eeeeee'}, ready: {'fillcolor': '#ffffff'}, next: {'fillcolor': '#00cc00'}, + goal: {'fillcolor': '#00eeee', 'shape': 'diamond'}, } a = dict(attrs[done]) @@ -63,8 +66,23 @@ def add_missing(tasks): } tasks.update(missing) +def add_parents(tasks): + for task in tasks.values(): + for dep in task.get('depends', []): + assert dep in tasks + dep = tasks[dep] + dep['parents'] = dep.get('parents', []) + [task] + +def mark_goals(tasks): + for task in tasks.values(): + if 'status' not in task: + if not task.get('parents'): + task['status'] = goal + def set_status(tasks): add_missing(tasks) + add_parents(tasks) + mark_goals(tasks) tasklist = list(tasks.values()) for task in tasklist: if 'status' not in task: @@ -78,6 +96,10 @@ def set_status(tasks): ] task['depends'] = deps +# for task in tasklist: +# print(task['status'], ' '.join(task['label'].split())) +# sys.exit(0) + unknown_tasks = find_unknown(tasklist) while unknown_tasks: for t in unknown_tasks: @@ -106,7 +128,7 @@ for name, task in tasks.items(): status = task['status'] print('{} [{}]'.format(name, nodeattrs(status))) for dep in task.get('depends', []): - print('{} -> {}'.format(name, dep)) + print('{} -> {}'.format(dep, name)) if ikiwiki: print('"""]]') |