in src/storage.rs [847:899]
fn process_imported_audits(
fetched_audits: Vec<(ImportName, AuditsFile)>,
imports_lock: &ImportsFile,
allow_criteria_changes: bool,
) -> Result<ImportsFile, CriteriaChangeErrors> {
let mut new_imports = ImportsFile {
unpublished: SortedMap::new(),
publisher: SortedMap::new(),
audits: SortedMap::new(),
};
let mut changed_criteria = Vec::new();
for (import_name, mut audits_file) in fetched_audits {
if let Some(existing_audits_file) = imports_lock.audits.get(&import_name) {
update_import_freshness(
&mut audits_file,
existing_audits_file,
|criteria_name, old_desc, new_desc| {
if !allow_criteria_changes {
// Compare the new criteria descriptions with existing criteria
// descriptions. If the description already exists, record a
// CriteriaChangeError.
changed_criteria.push(CriteriaChangeError {
import_name: import_name.clone(),
criteria_name: criteria_name.to_owned(),
unified_diff: unified_diff(
Algorithm::Myers,
old_desc,
new_desc,
5,
None,
),
});
}
},
);
}
// Now add the new import
new_imports.audits.insert(import_name, audits_file);
}
if !changed_criteria.is_empty() {
return Err(CriteriaChangeErrors {
errors: changed_criteria,
});
}
// FIXME: Consider doing some additional validation on these audits
// before returning?
Ok(new_imports)
}