Skip to content

Commit 5c97d81

Browse files
committed
improving cleanup
1 parent 6fbe22b commit 5c97d81

File tree

2 files changed

+66
-23
lines changed

2 files changed

+66
-23
lines changed

src/build.rs

Lines changed: 62 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -241,7 +241,7 @@ pub fn generate_asts<'a>(
241241
let mut has_failure = false;
242242
let mut stderr = "".to_string();
243243

244-
modules
244+
let results = modules
245245
.par_iter()
246246
.map(|(module_name, module)| {
247247
debug!("Generating AST for module: {}", module_name);
@@ -265,7 +265,7 @@ pub fn generate_asts<'a>(
265265
)),
266266
Ok(None),
267267
module.deps.to_owned(),
268-
false,
268+
None,
269269
)
270270
}
271271

@@ -350,19 +350,12 @@ pub fn generate_asts<'a>(
350350
AHashSet::new()
351351
};
352352

353-
let has_dirty_namespace = match module.package.namespace.to_owned() {
354-
Some(namespace) => deleted_modules.contains(&namespace),
355-
None => false,
356-
};
357-
358-
let has_dirty_deps = !deps.is_disjoint(deleted_modules) || has_dirty_namespace;
359-
360353
(
361354
module_name.to_owned(),
362355
ast_path,
363356
asti_path,
364357
deps,
365-
has_dirty_deps,
358+
module.package.namespace.to_owned(),
366359
)
367360
}
368361
}
@@ -372,10 +365,51 @@ pub fn generate_asts<'a>(
372365
Result<(String, Option<String>), String>,
373366
Result<Option<(String, Option<String>)>, String>,
374367
AHashSet<String>,
375-
bool,
376-
)>>()
368+
Option<String>,
369+
)>>();
370+
371+
let mut checked_modules = AHashSet::new();
372+
let mut dirty_modules = deleted_modules.clone();
373+
dirty_modules.extend(
374+
modules
375+
.iter()
376+
.filter_map(|(module_name, module)| {
377+
if is_dirty(&module) {
378+
Some(module_name.to_string())
379+
} else {
380+
None
381+
}
382+
})
383+
.collect::<AHashSet<String>>(),
384+
);
385+
386+
loop {
387+
let mut num_checked_modules = 0;
388+
for (module_name, _ast_path, _iast_path, deps, namespace) in results.iter() {
389+
if !checked_modules.contains(module_name) {
390+
num_checked_modules += 1;
391+
if deps.is_subset(&checked_modules) {
392+
checked_modules.insert(module_name.to_string());
393+
394+
let has_dirty_namespace = match namespace {
395+
Some(namespace) => dirty_modules.contains(namespace),
396+
None => false,
397+
};
398+
399+
if !deps.is_disjoint(&dirty_modules) || has_dirty_namespace {
400+
dirty_modules.insert(module_name.to_string());
401+
}
402+
}
403+
}
404+
}
405+
if num_checked_modules == 0 {
406+
break;
407+
}
408+
}
409+
410+
results
377411
.into_iter()
378-
.for_each(|(module_name, ast_path, iast_path, deps, has_dirty_deps)| {
412+
.for_each(|(module_name, ast_path, iast_path, deps, _namespace)| {
379413
if let Some(module) = modules.get_mut(&module_name) {
380414
module.deps = deps;
381415
match ast_path {
@@ -437,13 +471,16 @@ pub fn generate_asts<'a>(
437471
}
438472
};
439473

440-
if has_dirty_deps {
474+
if dirty_modules.contains(&module_name) {
441475
match module.source_type {
442476
SourceType::SourceFile(ref mut source_file) => {
443477
source_file.implementation.dirty = true;
444-
source_file.interface.as_mut().map(|interface| {
445-
interface.dirty = true;
446-
});
478+
match source_file.interface {
479+
Some(ref mut interface) => {
480+
interface.dirty = true;
481+
}
482+
None => (),
483+
}
447484
}
448485
SourceType::MlMap(ref mut mlmap) => {
449486
mlmap.dirty = true;
@@ -958,8 +995,8 @@ pub fn build(path: &str) -> Result<AHashMap<std::string::String, Module>, ()> {
958995
);
959996
let start_compiling = Instant::now();
960997

961-
// let mut compiled_modules = AHashSet::<String>::new();
962-
let mut compiled_modules = modules
998+
let mut compiled_modules = AHashSet::<String>::new();
999+
let clean_modules = modules
9631000
.iter()
9641001
.filter_map(|(module_name, module)| {
9651002
if is_dirty(module) {
@@ -970,6 +1007,9 @@ pub fn build(path: &str) -> Result<AHashMap<std::string::String, Module>, ()> {
9701007
})
9711008
.collect::<AHashSet<String>>();
9721009

1010+
// always clean build
1011+
// let clean_modules = AHashSet::<String>::new();
1012+
9731013
let mut loop_count = 0;
9741014
let mut files_total_count = compiled_modules.len();
9751015
let mut files_current_loop_count;
@@ -994,6 +1034,9 @@ pub fn build(path: &str) -> Result<AHashMap<std::string::String, Module>, ()> {
9941034
if module.deps.is_subset(&compiled_modules)
9951035
&& !compiled_modules.contains(module_name)
9961036
{
1037+
if clean_modules.contains(module_name) {
1038+
return Some((module_name.to_owned(), Ok(None), Some(Ok(None))));
1039+
}
9971040
match module.source_type.to_owned() {
9981041
SourceType::MlMap(_) => {
9991042
// the mlmap needs to be compiled before the files are compiled

src/clean.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,31 +56,31 @@ fn failed_to_compile(module: &Module) -> bool {
5656
SourceType::SourceFile(SourceFile {
5757
implementation:
5858
Implementation {
59-
compile_state: CompileState::Error | CompileState::Warning,
59+
compile_state: CompileState::Error, // | CompileState::Warning,
6060
..
6161
},
6262
..
6363
}) => true,
6464
SourceType::SourceFile(SourceFile {
6565
interface:
6666
Some(Interface {
67-
compile_state: CompileState::Error | CompileState::Warning,
67+
compile_state: CompileState::Error, // | CompileState::Warning,
6868
..
6969
}),
7070
..
7171
}) => true,
7272
SourceType::SourceFile(SourceFile {
7373
implementation:
7474
Implementation {
75-
parse_state: ParseState::ParseError | ParseState::Warning,
75+
parse_state: ParseState::ParseError, // | ParseState::Warning,
7676
..
7777
},
7878
..
7979
}) => true,
8080
SourceType::SourceFile(SourceFile {
8181
interface:
8282
Some(Interface {
83-
parse_state: ParseState::ParseError | ParseState::Warning,
83+
parse_state: ParseState::ParseError, // | ParseState::Warning,
8484
..
8585
}),
8686
..

0 commit comments

Comments
 (0)