def find_recursive_datasets(datasets)
all_datasets = datasets['included'] + datasets['excluded']
single = []
recursive = []
cleaned_recursive = []
datasets['included'].each do |dataset|
excluded_child = false
children_datasets = all_datasets.select { |child_dataset| child_dataset.name.start_with? dataset.name }
children_datasets.each do |child_dataset|
if datasets['excluded'].include?(child_dataset)
excluded_child = true
single << dataset
break
end
end
unless excluded_child
recursive << dataset
end
end
recursive.each do |dataset|
if dataset.name.include?('/')
parts = dataset.name.rpartition('/')
parent = all_datasets.find { |parent_dataset| parent_dataset.name == parts[0] }
else
parent = dataset
end
if parent == dataset
cleaned_recursive << dataset
next
end
cleaned_recursive << dataset unless recursive.include?(parent)
end
cleaned_recursive.each do |parent|
all_datasets.each do |dataset|
next if !dataset.name.include?(parent.name)
if dataset.db
parent.contains_db!(dataset.db)
end
end
end
{
'single' => single,
'recursive' => cleaned_recursive,
'included' => datasets['included'],
'excluded' => datasets['excluded'],
}
end