summaryrefslogtreecommitdiff
path: root/projgraph
diff options
context:
space:
mode:
Diffstat (limited to 'projgraph')
-rwxr-xr-xprojgraph26
1 files changed, 24 insertions, 2 deletions
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('"""]]')