Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit ff493d6

Browse files
committedJan 14, 2015
Now seems to work. At least partially.
1 parent c455ee6 commit ff493d6

File tree

1 file changed

+44
-24
lines changed

1 file changed

+44
-24
lines changed
 

‎test.py

+44-24
Original file line numberDiff line numberDiff line change
@@ -17,27 +17,39 @@ def __init__(self, program):
1717
self.program = program
1818

1919
def _generate_level(self, levels):
20-
if len(levels) == 0: return []
2120
level = levels[0]
22-
tasks = generate_tasks('level_' + str(level), self.program.get_tasks(level))
21+
names = set()
22+
print("GENERATE {0}".format(level))
23+
24+
def flatten(task):
25+
if isinstance(task, dict):
26+
yield task
27+
else:
28+
for t in task:
29+
for ft in flatten(t):
30+
yield ft
31+
32+
for task in self.program.get_tasks(level):
33+
for t in flatten(task):
34+
names.add(t['basename'])
35+
yield t
36+
mid_name = 'level_' + str(level) + '_wait'
37+
done_name = 'level_' + str(level) + '_done'
38+
yield { 'basename': mid_name, 'doc': None, 'task_dep': list(names), 'actions': ['echo'] }
39+
done_deps = [mid_name]
2340
if len(levels) > 1:
24-
eol_name = 'level_' + str(level) + '_wait'
25-
tasks.extend(generate_tasks(eol_name, { 'basename': eol_name, 'task_dep': [ t.name for t in tasks ], 'actions': [ ] }))
26-
next_level = levels[1]
27-
tasks.append(Task('level_' + str(next_level) + '_generate', None, loader=DelayedLoader(lambda: self._generate_more(levels[1:]), executed='level_' + str(level) + '_wait')))
28-
return tasks
29-
30-
def _generate_more(self, levels):
31-
tasks = self._generate_level(levels)
32-
for t in tasks:
33-
yield t
41+
gen_name = 'level_' + str(levels[1]) + '_done'
42+
done_deps.append(gen_name)
43+
yield Task(gen_name, None, loader=DelayedLoader(lambda: self._generate_level(levels[1:]), executed=mid_name))
44+
yield { 'basename': done_name, 'doc': None, 'task_dep': done_deps, 'actions': ['echo'] }
3445

3546
def load_tasks(self, cmd, opt_values, pos_args):
3647
DOIT_CONFIG = {
3748
'reporter': ExecutedOnlyReporter,
3849
'outfile': sys.stderr,
3950
}
40-
tasks = self._generate_level(self.program.get_task_levels())
51+
levels = self.program.get_task_levels()
52+
tasks = generate_tasks('level_' + str(levels[0]) + '_generate', self._generate_level(levels))
4153
return tasks, DOIT_CONFIG
4254

4355

@@ -67,33 +79,37 @@ def _do_copy(self, source, destination):
6779
write_content(destination, content)
6880

6981
def get_task_levels(self):
70-
return [1, 2, 3]
82+
return [1, 2, 3, 4]
7183

72-
def _create_tasks(self, *files):
84+
def _create_tasks(self, basename, *files):
7385
for src_file, dst_file in files:
7486
yield {
75-
'basename': 'copy',
87+
'basename': basename,
7688
'name': dst_file,
7789
'file_dep': [src_file],
7890
'targets': [dst_file],
7991
'actions': [(self._do_copy, (src_file, dst_file))],
92+
'clean': True,
8093
}
8194

82-
def _get_tasks_impl(self, level):
95+
def _get_tasks_impl(self, suffix, level):
8396
if level == 1:
84-
yield self._create_tasks(('1', 'dest/1.a'), ('2', 'dest/2.a'), ('dest/2.a', 'dest/2.b'))
97+
yield self._create_tasks('copy' + suffix, ('1', 'dest/1.a'), ('2', 'dest/2.a'), ('dest/2.a', 'dest/2.b'))
8598
elif level == 2:
86-
yield self._create_tasks(('dest/1.a', 'dest/1.b'))
99+
yield self._create_tasks('copy' + suffix, ('dest/1.a', 'dest/1.b'), ('2', 'dest/2.e'))
87100
elif level == 3:
88-
yield self._create_tasks(('1', 'dest/1.c'), ('dest/2.b', 'dest/2.c'))
101+
yield self._create_tasks('copy' + suffix, ('1', 'dest/1.c'), ('dest/2.b', 'dest/2.c'))
102+
elif level == 4:
103+
yield self._create_tasks('copy' + suffix, ('dest/1.c', 'dest/1.d'), ('dest/2.d', 'dest/2.f'), ('dest/2.c', 'dest/2.d'))
89104

90105
def get_tasks(self, level):
106+
suffix = '_' + str(level)
91107
yield {
92-
'basename': 'copy',
108+
'basename': 'copy' + suffix,
93109
'name': None,
94110
'doc': 'Copies modified or non-existing files over',
95111
}
96-
yield self._get_tasks_impl(level)
112+
yield self._get_tasks_impl(suffix, level)
97113

98114
def get_all_tasks(self):
99115
yield {
@@ -102,7 +118,7 @@ def get_all_tasks(self):
102118
'doc': 'Copies modified or non-existing files over',
103119
}
104120
for level in self.get_task_levels():
105-
yield self._get_tasks_impl(level)
121+
yield self._get_tasks_impl('', level)
106122

107123

108124
def main(args=None):
@@ -111,11 +127,15 @@ def main(args=None):
111127

112128

113129
if __name__ == "__main__":
130+
#sys.exit(main(['clean']))
114131
try:
132+
pass
115133
shutil.rmtree('dest', True)
116134
except:
117135
pass
118136
os.mkdir('dest')
119137
write_content('1', 'bla')
120138
write_content('2', 'bla')
121-
sys.exit(main(['run', '-n', '4', '-P', 'thread']))
139+
#sys.exit(main(['list']))
140+
sys.exit(main(['run', '-v', '2']))
141+
#sys.exit(main(['run', '-n', '4', '-v', '2', '-P', 'thread']))

0 commit comments

Comments
 (0)
Please sign in to comment.