From 3cb8e9d9e38e4cb9eba2658227b95a8894d4657c Mon Sep 17 00:00:00 2001 From: Lars Wirzenius Date: Mon, 31 Dec 2018 11:20:39 +0200 Subject: Change: projgraph to "invert" graph --- projgraph | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) (limited to 'projgraph') diff --git a/projgraph b/projgraph index f8ddd70..db17077 100755 --- a/projgraph +++ b/projgraph @@ -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('"""]]') -- cgit v1.2.1