diff options
Diffstat (limited to 'Source/Ogda/jobhandler.cpp')
-rw-r--r-- | Source/Ogda/jobhandler.cpp | 505 |
1 files changed, 196 insertions, 309 deletions
diff --git a/Source/Ogda/jobhandler.cpp b/Source/Ogda/jobhandler.cpp index fa78b728..466bcf77 100644 --- a/Source/Ogda/jobhandler.cpp +++ b/Source/Ogda/jobhandler.cpp @@ -41,45 +41,37 @@ #include "main.h" #include <Utility/strings.h> -JobHandler::JobHandler(std::string output_folder, std::string manifest_dest, std::string manifest_source, std::string databasedir, bool perform_removes, bool force_removes, int threads) -: output_folder(output_folder), manifest_dest(manifest_dest), manifest_source(manifest_source), databasedir(databasedir), perform_removes(perform_removes),force_removes(force_removes), threads(threads) -{ - +JobHandler::JobHandler(std::string output_folder, std::string manifest_dest, std::string manifest_source, std::string databasedir, bool perform_removes, bool force_removes, int threads) + : output_folder(output_folder), manifest_dest(manifest_dest), manifest_source(manifest_source), databasedir(databasedir), perform_removes(perform_removes), force_removes(force_removes), threads(threads) { } -bool JobHandler::Run(const std::string& path ) -{ +bool JobHandler::Run(const std::string& path) { bool ret = true; Manifest old_manifest(threads); DatabaseManifest database_manifest; std::string database_file = AssemblePath(databasedir, "database_manifest.xml"); - if(!manifest_source.empty()) - { - old_manifest.Load(manifest_source); - LOGI << "Calculating hashes of previously built files... [" << threads << "]" << std::endl; + if (!manifest_source.empty()) { + old_manifest.Load(manifest_source); + LOGI << "Calculating hashes of previously built files... [" << threads << "]" << std::endl; { old_manifest.PrecalculateCurrentDestinationHashes(output_folder); } } - if(!databasedir.empty() ) - { - if( config_load_from_database || config_save_to_database ) { - database_manifest.Load(database_file); + if (!databasedir.empty()) { + if (config_load_from_database || config_save_to_database) { + database_manifest.Load(database_file); } } - + { JobXMLParser jobparser; - if( !jobparser.Load( path ) ) - { + if (!jobparser.Load(path)) { LOGE << "Error" << std::endl; ret = false; - } - else - { + } else { input_folders = jobparser.inputs; LOGI << "Adding Items..." << std::endl; @@ -87,35 +79,32 @@ bool JobHandler::Run(const std::string& path ) size_t item_count = jobparser.items.size(); size_t cur = 0; std::vector<JobXMLParser::Item>::iterator itemit; - for( itemit = jobparser.items.begin(); itemit != jobparser.items.end(); itemit++ ) - { + for (itemit = jobparser.items.begin(); itemit != jobparser.items.end(); itemit++) { std::string chosen_input_folder; std::string item_path; bool is_ok = false; - LOGD << "Loading Transfer: " << itemit->path << std::endl; - for(const std::string& input_folder : input_folders) - { - if(is_ok == false) { - if( CheckFileAccess(AssemblePath(input_folder,itemit->path).c_str()) ) { + LOGD << "Loading Transfer: " << itemit->path << std::endl; + for (const std::string& input_folder : input_folders) { + if (is_ok == false) { + if (CheckFileAccess(AssemblePath(input_folder, itemit->path).c_str())) { item_path = itemit->path; - chosen_input_folder = input_folder; + chosen_input_folder = input_folder; is_ok = true; } else { - std::string case_corrected = CaseCorrect(AssemblePath(input_folder,itemit->path)); - if(CheckFileAccess(case_corrected.c_str())) { + std::string case_corrected = CaseCorrect(AssemblePath(input_folder, itemit->path)); + if (CheckFileAccess(case_corrected.c_str())) { item_path = case_corrected.substr(input_folder.size()); - chosen_input_folder = input_folder; + chosen_input_folder = input_folder; is_ok = true; LOGW << "Path \"" << itemit->path << "\" for item had to be case corrected to " << item_path << ". Row: " << itemit->row << std::endl; } } - } - } + } + } - if( is_ok ) { - if( itemit->recursive ) - { + if (is_ok) { + if (itemit->recursive) { LOGD << "Transfer is recursive" << std::endl; std::vector<std::string> manifest; @@ -124,43 +113,35 @@ bool JobHandler::Run(const std::string& path ) LOGD << "Loaded from " << manifest_path << " found " << manifest.size() << " files." << std::endl; - std::vector<std::string>::iterator manifestit; + std::vector<std::string>::iterator manifestit; - for( manifestit = manifest.begin(); manifestit != manifest.end(); manifestit++ ) - { - std::string full_sub_path = AssemblePath(item_path,*manifestit); - if(endswith(full_sub_path.c_str(), itemit->path_ending.c_str())) - { + for (manifestit = manifest.begin(); manifestit != manifest.end(); manifestit++) { + std::string full_sub_path = AssemblePath(item_path, *manifestit); + if (endswith(full_sub_path.c_str(), itemit->path_ending.c_str())) { LOGD << "Including " << full_sub_path << std::endl; - AddItem(chosen_input_folder, full_sub_path,itemit->type,*itemit); - } - else - { + AddItem(chosen_input_folder, full_sub_path, itemit->type, *itemit); + } else { LOGD << "Ignoring " << full_sub_path << std::endl; } } - } - else - { - AddItem(chosen_input_folder, item_path,itemit->type,*itemit); + } else { + AddItem(chosen_input_folder, item_path, itemit->type, *itemit); } } else { LOGE << "Path \"" << itemit->path << "\" for item is invalid, even after case correction. Row: " << itemit->row << std::endl; - } + } cur++; - SetPercent( item_path.c_str(), (int)(100.0f*((float)cur/(float)item_count)) ); + SetPercent(item_path.c_str(), (int)(100.0f * ((float)cur / (float)item_count))); } } - if( config_print_item_list ) - { + if (config_print_item_list) { LOGI << "Printing item list from deployment file..." << std::endl; - + std::vector<Item>::iterator itemit = items.begin(); - for( ;itemit != items.end();itemit++ ) - { + for (; itemit != items.end(); itemit++) { LOGI << *itemit << std::endl; } } @@ -169,15 +150,11 @@ bool JobHandler::Run(const std::string& path ) { SearcherFactory sf; std::vector<JobXMLParser::Searcher>::iterator searcherit; - for( searcherit = jobparser.searchers.begin(); searcherit != jobparser.searchers.end(); searcherit++ ) - { - if( sf.HasSearcher(searcherit->searcher)) - { - Searcher searcher = sf.CreateSearcher( searcherit->searcher, searcherit->path_ending, searcherit->type_pattern_re); + for (searcherit = jobparser.searchers.begin(); searcherit != jobparser.searchers.end(); searcherit++) { + if (sf.HasSearcher(searcherit->searcher)) { + Searcher searcher = sf.CreateSearcher(searcherit->searcher, searcherit->path_ending, searcherit->type_pattern_re); searchers.push_back(searcher); - } - else - { + } else { ret = false; LOGE << "Unable to find searcher matching name " << searcherit->searcher << std::endl; } @@ -188,15 +165,11 @@ bool JobHandler::Run(const std::string& path ) { BuilderFactory bf; std::vector<JobXMLParser::Builder>::iterator builderit; - for( builderit = jobparser.builders.begin(); builderit != jobparser.builders.end(); builderit++ ) - { - if( bf.HasBuilder( builderit->builder ) ) - { - Builder builder = bf.CreateBuilder( builderit->builder, builderit->path_ending, builderit->type_pattern_re); + for (builderit = jobparser.builders.begin(); builderit != jobparser.builders.end(); builderit++) { + if (bf.HasBuilder(builderit->builder)) { + Builder builder = bf.CreateBuilder(builderit->builder, builderit->path_ending, builderit->type_pattern_re); builders.push_back(builder); - } - else - { + } else { LOGE << "Unable to find builder matching name " << builderit->builder << std::endl; ret = false; } @@ -207,20 +180,15 @@ bool JobHandler::Run(const std::string& path ) { GeneratorFactory bf; std::vector<JobXMLParser::Generator>::iterator generatorit; - for( generatorit = jobparser.generators.begin(); generatorit != jobparser.generators.end(); generatorit++ ) - { - if( bf.HasGenerator( generatorit->generator ) ) - { - Generator generator = bf.CreateGenerator( generatorit->generator ); + for (generatorit = jobparser.generators.begin(); generatorit != jobparser.generators.end(); generatorit++) { + if (bf.HasGenerator(generatorit->generator)) { + Generator generator = bf.CreateGenerator(generatorit->generator); generators.push_back(generator); - } - else - { + } else { LOGE << "Unable to find generator matching name " << generatorit->generator << std::endl; ret = false; } } - } LOGD << jobparser << std::endl; @@ -230,90 +198,75 @@ bool JobHandler::Run(const std::string& path ) LOGI << "Running searchers through Items..." << std::endl; { std::vector<Item>::iterator itemit; - for( itemit = items.begin(); itemit != items.end(); itemit++ ) - { - RunRecursiveSearchOn( *itemit ); + for (itemit = items.begin(); itemit != items.end(); itemit++) { + RunRecursiveSearchOn(*itemit); } LOGI << "Found a total of " << foundItems.size() << " objects when searching" << std::endl; - items.insert( items.end(), foundItems.begin(), foundItems.end() ); + items.insert(items.end(), foundItems.begin(), foundItems.end()); } LOGI << "Marking overshadowed Items" << std::endl; { std::vector<Item>::iterator itemit; - for( itemit = items.begin(); itemit != items.end(); itemit++ ) - { + for (itemit = items.begin(); itemit != items.end(); itemit++) { std::vector<Item>::iterator item2it; - for( item2it = items.begin(); item2it != items.end(); item2it++ ) - { - if( itemit->Overshadows(*item2it) ) - { + for (item2it = items.begin(); item2it != items.end(); item2it++) { + if (itemit->Overshadows(*item2it)) { item2it->SetOvershadowed(true); } } } } - if( config_print_duplicates ) - { + if (config_print_duplicates) { LOGI << "Looking for duplicate items..." << std::endl; { - std::vector<Item>::iterator itemit; + std::vector<Item>::iterator itemit; std::vector<Item>::iterator itemit2; - + std::set<JobXMLParser::Item> first_level_duplicates; - for( itemit = items.begin(); itemit != items.end(); itemit++ ) - { - for( itemit2 = itemit + 1; itemit2 != items.end(); itemit2++ ) - { - if( itemit->GetAbsPath() == itemit2->GetAbsPath() - && itemit->type == itemit2->type ) - { - if( *itemit == itemit->source ) - { - first_level_duplicates.insert( itemit->source ); - LOGW << "Found duplicated of " << *itemit << " " << "sourced from rows: " << itemit->source.row << " and " << itemit2->source.row << "." << std::endl; - } - else if( *itemit2 == itemit2->source ) - { - first_level_duplicates.insert( itemit2->source ); - LOGW << "Found duplicated of " << *itemit << " " << "sourced from rows: " << itemit->source.row << " and " << itemit2->source.row << "." << std::endl; + for (itemit = items.begin(); itemit != items.end(); itemit++) { + for (itemit2 = itemit + 1; itemit2 != items.end(); itemit2++) { + if (itemit->GetAbsPath() == itemit2->GetAbsPath() && itemit->type == itemit2->type) { + if (*itemit == itemit->source) { + first_level_duplicates.insert(itemit->source); + LOGW << "Found duplicated of " << *itemit << " " + << "sourced from rows: " << itemit->source.row << " and " << itemit2->source.row << "." << std::endl; + } else if (*itemit2 == itemit2->source) { + first_level_duplicates.insert(itemit2->source); + LOGW << "Found duplicated of " << *itemit << " " + << "sourced from rows: " << itemit->source.row << " and " << itemit2->source.row << "." << std::endl; } } } } - + LOGI << "Listing all first-level first-time references to duplicates... (For simple removal)" << std::endl; { std::set<JobXMLParser::Item>::iterator parserit; - for( parserit = first_level_duplicates.begin(); parserit != first_level_duplicates.end(); parserit++ ) - { - fprintf( stderr, "RMLN:%d\n", parserit->row ); + for (parserit = first_level_duplicates.begin(); parserit != first_level_duplicates.end(); parserit++) { + fprintf(stderr, "RMLN:%d\n", parserit->row); } } } } - if( config_print_missing ) - { + if (config_print_missing) { LOGI << "Printing files in folder but not in deploy list..." << std::endl; - + std::vector<std::string> manifest; - for(const std::string& input_folder : input_folders) - { - GenerateManifest( input_folder.c_str(), manifest ); - } + for (const std::string& input_folder : input_folders) { + GenerateManifest(input_folder.c_str(), manifest); + } std::vector<std::string>::iterator manifestit = manifest.begin(); - for( ; manifestit != manifest.end(); manifestit++ ) - { - if( false == HasItemWithPath( *manifestit ) ) - { + for (; manifestit != manifest.end(); manifestit++) { + if (false == HasItemWithPath(*manifestit)) { std::cout << *manifestit << std::endl; } } @@ -328,30 +281,27 @@ bool JobHandler::Run(const std::string& path ) { if( searchTypeIt->second == 0 ) { - LOGW << "Item type: " << searchTypeIt->first << " has no assigned searchers." << std::endl; + LOGW << "Item type: " << searchTypeIt->first << " has no assigned searchers." << std::endl; } } } */ - LOGI << "Calculating Item hashes...[" << threads << "]"<< std::endl; + LOGI << "Calculating Item hashes...[" << threads << "]" << std::endl; { JobHandlerThreadPool jhtp(threads); jhtp.RunHashCalculation(items); } - if( !config_mute_missing ) - { + if (!config_mute_missing) { LOGI << "Listing referenced items missing from disk..." << std::endl; { - std::vector<Item>::iterator itemit; + std::vector<Item>::iterator itemit; - for( itemit = items.begin(); itemit != items.end(); itemit++ ) - { - if( itemit->hash.empty() && itemit->IsOvershadowed() == false ) - { + for (itemit = items.begin(); itemit != items.end(); itemit++) { + if (itemit->hash.empty() && itemit->IsOvershadowed() == false) { LOGE << "Missing item " << *itemit << std::endl; - } + } } } } @@ -362,118 +312,94 @@ bool JobHandler::Run(const std::string& path ) size_t item_count = items.size(); size_t cur = 0; std::vector<Item>::iterator itemit; - for( itemit = items.begin(); itemit != items.end(); itemit++ ) - { - if( itemit->IsOvershadowed() ) - { - LOGI << "Skipping " << *itemit << " because it's overshadowed" << std::endl; - } - else if( itemit->IsOnlySearch() ) - { - LOGD << "Skipping " << *itemit << " because it's search only" << std::endl; - } - else - { + for (itemit = items.begin(); itemit != items.end(); itemit++) { + if (itemit->IsOvershadowed()) { + LOGI << "Skipping " << *itemit << " because it's overshadowed" << std::endl; + } else if (itemit->IsOnlySearch()) { + LOGD << "Skipping " << *itemit << " because it's search only" << std::endl; + } else { std::vector<Builder>::iterator builderit; int count = 0; - for( builderit = builders.begin(); builderit != builders.end(); builderit++ ) - { - if( builderit->IsMatch( *itemit )) - { + for (builderit = builders.begin(); builderit != builders.end(); builderit++) { + if (builderit->IsMatch(*itemit)) { count++; - if(builderit->RunEvenOnIdenticalSource() == false && old_manifest.IsUpToDate( *this, *itemit, *builderit ) ) - { + if (builderit->RunEvenOnIdenticalSource() == false && old_manifest.IsUpToDate(*this, *itemit, *builderit)) { LOGD << "Using cached result on " << *itemit << std::endl; - result_manifest.AddResult(old_manifest.GetPreviouslyBuiltResult( *itemit, *builderit )); - } - else if( config_load_from_database && builderit->RunEvenOnIdenticalSource() == false && builderit->StoreResultInDatabase() && database_manifest.HasBuiltResultFor(*this, *itemit, *builderit) ) - { + result_manifest.AddResult(old_manifest.GetPreviouslyBuiltResult(*itemit, *builderit)); + } else if (config_load_from_database && builderit->RunEvenOnIdenticalSource() == false && builderit->StoreResultInDatabase() && database_manifest.HasBuiltResultFor(*this, *itemit, *builderit)) { LOGI << "Using database value on " << *itemit << std::endl; DatabaseManifestResult dmr = database_manifest.GetPreviouslyBuiltResult(*itemit, *builderit); - - std::string result_source_path = AssemblePath(databasedir,AssemblePath("files",AssemblePath(dmr.item.hash,dmr.dest_hash))); - std::string result_dest_path = AssemblePath(output_folder,dmr.dest); + + std::string result_source_path = AssemblePath(databasedir, AssemblePath("files", AssemblePath(dmr.item.hash, dmr.dest_hash))); + std::string result_dest_path = AssemblePath(output_folder, dmr.dest); CreateParentDirs(result_dest_path); - copyfile(result_source_path,result_dest_path); + copyfile(result_source_path, result_dest_path); result_manifest.AddResult(ManifestResult(dmr.dest_hash, *itemit, dmr.dest, true, dmr.name, dmr.version, ManifestResult::DATABASE, dmr.type)); - } - else - { - //Check if item has source hash, meaning if the source file exists. - if( !itemit->hash.empty() ) - { + } else { + // Check if item has source hash, meaning if the source file exists. + if (!itemit->hash.empty()) { LOGD << "Running " << builderit->GetBuilderName() << " on " << *itemit << std::endl; result_manifest.AddResult(builderit->Run(*this, *itemit)); - } - else - { + } else { LOGE << "Unable to run " << builderit->GetBuilderName() << " on " << *itemit << " file missing." << std::endl; ret = false; } } - } - else - { - LOGD << "Skipping " << builderit->GetBuilderName() << " on " << *itemit << ", doesn't match pattern." << std::endl; + } else { + LOGD << "Skipping " << builderit->GetBuilderName() << " on " << *itemit << ", doesn't match pattern." << std::endl; } } - if( count == 0 && !itemit->hash.empty() ) + if (count == 0 && !itemit->hash.empty()) LOGW << *itemit << " has no assigned builder" << std::endl; - if( count > typeBuilderCount[itemit->type] ) + if (count > typeBuilderCount[itemit->type]) typeBuilderCount[itemit->type] = count; } cur++; - SetPercent( itemit->GetPath().c_str(), (int)(100.0f*((float)cur/(float)item_count)) ); + SetPercent(itemit->GetPath().c_str(), (int)(100.0f * ((float)cur / (float)item_count))); } } - //Copy manifest to use when running the generators. + // Copy manifest to use when running the generators. const Manifest generated_manifest = result_manifest; LOGI << "Running Generators..." << std::endl; { std::vector<Generator>::iterator generatorit; int count = 0; - for( generatorit = generators.begin(); generatorit != generators.end(); generatorit++ ) - { + for (generatorit = generators.begin(); generatorit != generators.end(); generatorit++) { count++; LOGD << "Running " << generatorit->GetGeneratorName() << std::endl; - result_manifest.AddResult(generatorit->Run(*this,generated_manifest)); + result_manifest.AddResult(generatorit->Run(*this, generated_manifest)); } } LOGI << "Checking what items don't have a builder..." << std::endl; { - std::map<std::string,int>::iterator builderTypeIt; + std::map<std::string, int>::iterator builderTypeIt; - for( builderTypeIt = typeBuilderCount.begin(); builderTypeIt != typeBuilderCount.end(); builderTypeIt++ ) - { - if( builderTypeIt->second == 0 ) - { - LOGW << "Item type: " << builderTypeIt->first << " has no assigned builder." << std::endl; + for (builderTypeIt = typeBuilderCount.begin(); builderTypeIt != typeBuilderCount.end(); builderTypeIt++) { + if (builderTypeIt->second == 0) { + LOGW << "Item type: " << builderTypeIt->first << " has no assigned builder." << std::endl; } } } - if( result_manifest.HasError() ) - { + if (result_manifest.HasError()) { LOGE << "Some builder(s) caused an error, see manifest for more info." << std::endl; ret = false; } - //Unlinks are serious business, so we do this carefully - if( ret || force_removes ) - { + // Unlinks are serious business, so we do this carefully + if (ret || force_removes) { LOGI << "Removing items not listed in the generated manifest" << std::endl; std::vector<std::string> destination_file_list; - GenerateManifest( output_folder.c_str(), destination_file_list ); + GenerateManifest(output_folder.c_str(), destination_file_list); { std::vector<std::string>::iterator missit; - for(missit = destination_file_list.begin(); missit != destination_file_list.end(); missit++ ) - { + for (missit = destination_file_list.begin(); missit != destination_file_list.end(); missit++) { LOGD << "In Output Folder: " << *missit << std::endl; } } @@ -481,8 +407,7 @@ bool JobHandler::Run(const std::string& path ) std::vector<std::string> new_manifest_file_list = result_manifest.GetDestinationFiles(); { std::vector<std::string>::iterator missit; - for(missit = new_manifest_file_list.begin(); missit != new_manifest_file_list.end(); missit++ ) - { + for (missit = new_manifest_file_list.begin(); missit != new_manifest_file_list.end(); missit++) { LOGD << "New Manifest File: " << *missit << std::endl; } } @@ -490,216 +415,178 @@ bool JobHandler::Run(const std::string& path ) std::vector<std::string> old_manifest_file_list = old_manifest.GetDestinationFiles(); { std::vector<std::string>::iterator missit; - for(missit = old_manifest_file_list.begin(); missit != old_manifest_file_list.end(); missit++ ) - { + for (missit = old_manifest_file_list.begin(); missit != old_manifest_file_list.end(); missit++) { LOGD << "Old Manifest File: " << *missit << std::endl; } } std::vector<std::string> unlisted_files; - std::sort( destination_file_list.begin(), destination_file_list.end() ); - std::sort( new_manifest_file_list.begin(), new_manifest_file_list.end() ); - std::sort( old_manifest_file_list.begin(), old_manifest_file_list.end() ); + std::sort(destination_file_list.begin(), destination_file_list.end()); + std::sort(new_manifest_file_list.begin(), new_manifest_file_list.end()); + std::sort(old_manifest_file_list.begin(), old_manifest_file_list.end()); - std::set_difference( destination_file_list.begin(), destination_file_list.end(), - new_manifest_file_list.begin(), new_manifest_file_list.end(), - std::back_inserter(unlisted_files) ); + std::set_difference(destination_file_list.begin(), destination_file_list.end(), + new_manifest_file_list.begin(), new_manifest_file_list.end(), + std::back_inserter(unlisted_files)); { std::vector<std::string>::iterator missit; - for(missit = unlisted_files.begin(); missit != unlisted_files.end(); missit++ ) - { + for (missit = unlisted_files.begin(); missit != unlisted_files.end(); missit++) { LOGI << "Unlisted: " << *missit << std::endl; } } std::vector<std::string> remove_list; - - //Remove files that are in the folder but not known from previous builds? - if( config_remove_unlisted_files ) - { + // Remove files that are in the folder but not known from previous builds? + if (config_remove_unlisted_files) { LOGI << "Adding all unlisted files into the remove list. (--remove-unlisted)" << std::endl; - remove_list.insert(remove_list.begin(), unlisted_files.begin(), unlisted_files.end() ); - } - else - { - //Only remove unlisted files that are mentioned in the old manifest. - std::set_intersection( unlisted_files.begin(), unlisted_files.end(), - old_manifest_file_list.begin(), old_manifest_file_list.end(), - std::back_inserter(remove_list) ); + remove_list.insert(remove_list.begin(), unlisted_files.begin(), unlisted_files.end()); + } else { + // Only remove unlisted files that are mentioned in the old manifest. + std::set_intersection(unlisted_files.begin(), unlisted_files.end(), + old_manifest_file_list.begin(), old_manifest_file_list.end(), + std::back_inserter(remove_list)); } - //If this passes i'm comfortable removing files. - if( remove_list == unlisted_files || force_removes ) - { - if( remove_list == unlisted_files ) - { + // If this passes i'm comfortable removing files. + if (remove_list == unlisted_files || force_removes) { + if (remove_list == unlisted_files) { LOGI << "Unlisted files match old manifest, removing them" << std::endl; - } - else - { + } else { LOGI << "Dictated to forcefully remove all found items." << std::endl; } { std::vector<std::string>::iterator missit; - for(missit = remove_list.begin(); missit != remove_list.end(); missit++ ) - { - std::string full_remove_path = AssemblePath(output_folder,*missit); - if( perform_removes ) - { + for (missit = remove_list.begin(); missit != remove_list.end(); missit++) { + std::string full_remove_path = AssemblePath(output_folder, *missit); + if (perform_removes) { LOGW << "Removing " << full_remove_path << std::endl; - remove( full_remove_path.c_str() ); - } - else - { + remove(full_remove_path.c_str()); + } else { LOGI << "Pretending to remove (no --perform-removes): " << full_remove_path << std::endl; } } } - } - else - { + } else { LOGF << "Unlisted files and old manifest files don't match, i refuse to try and remove anything because this is a hint that something isn't right in this fully managed directory." << std::endl; ret = false; } - } - else - { + } else { LOGE << "Skipping removal due to previous error(s)" << std::endl; } LOGI << "Removing temporary items..." << std::endl; { std::vector<Item>::iterator itemit; - for( itemit = items.begin(); itemit != items.end(); itemit++ ) - { - if( itemit->IsDeleteOnExit() ) - { - if( perform_removes ) - { - LOGD << "Removing " << *itemit << std::endl; - std::string path = itemit->GetAbsPath(); - remove( path.c_str() ); - } - else - { + for (itemit = items.begin(); itemit != items.end(); itemit++) { + if (itemit->IsDeleteOnExit()) { + if (perform_removes) { + LOGD << "Removing " << *itemit << std::endl; + std::string path = itemit->GetAbsPath(); + remove(path.c_str()); + } else { LOGD << "Skipping remove of " << *itemit << " as --perform-removes isn't specified" << std::endl; } - - } + } } } - if( !manifest_dest.empty() ) - { + if (!manifest_dest.empty()) { LOGI << "Saving resulting manifest to disk: " << manifest_dest << std::endl; result_manifest.Save(manifest_dest); } - if(!databasedir.empty() ) { - if( config_save_to_database ) { + if (!databasedir.empty()) { + if (config_save_to_database) { std::vector<ManifestResult>::const_iterator mareit = result_manifest.ResultsBegin(); BuilderFactory builder_factory; - for(; mareit != result_manifest.ResultsEnd(); mareit++ ) { - if( mareit->mr_type == ManifestResult::BUILT ) { - if( mareit->items.size() == 1 ) { - if( builder_factory.StoreResultInDatabase(mareit->name) ) { - + for (; mareit != result_manifest.ResultsEnd(); mareit++) { + if (mareit->mr_type == ManifestResult::BUILT) { + if (mareit->items.size() == 1) { + if (builder_factory.StoreResultInDatabase(mareit->name)) { LOGI << "Storing " << *mareit << " in database for future use." << std::endl; - std::string result_source_path = AssemblePath(output_folder,mareit->dest); - std::string result_dest_path = AssemblePath(databasedir,AssemblePath("files",AssemblePath(mareit->items[0].hash,mareit->dest_hash))); + std::string result_source_path = AssemblePath(output_folder, mareit->dest); + std::string result_dest_path = AssemblePath(databasedir, AssemblePath("files", AssemblePath(mareit->items[0].hash, mareit->dest_hash))); CreateParentDirs(result_dest_path); - copyfile(result_source_path,result_dest_path); - + copyfile(result_source_path, result_dest_path); + database_manifest.AddResult(DatabaseManifestResult( - mareit->items[0], - mareit->dest_hash, + mareit->items[0], + mareit->dest_hash, mareit->dest, - mareit->name, + mareit->name, mareit->version, - mareit->type - )); + mareit->type)); } - } else { + } else { LOGW << "Database doesn't support multi item sources" << std::endl; } } } CreateParentDirs(database_file); - database_manifest.Save(database_file); + database_manifest.Save(database_file); } - } + } return ret; } -void JobHandler::RunRecursiveSearchOn( const Item& item ) -{ +void JobHandler::RunRecursiveSearchOn(const Item& item) { std::vector<Item> foundSum; - if( std::find(searchedItems.begin(),searchedItems.end(),item) == searchedItems.end() ) - { + if (std::find(searchedItems.begin(), searchedItems.end(), item) == searchedItems.end()) { std::vector<Searcher>::iterator searcherit; int count = 0; - for( searcherit = searchers.begin(); searcherit != searchers.end(); searcherit++ ) - { - std::vector<Item> f = searcherit->TrySearch(*this,item,&count); + for (searcherit = searchers.begin(); searcherit != searchers.end(); searcherit++) { + std::vector<Item> f = searcherit->TrySearch(*this, item, &count); - foundSum.insert(foundSum.end(),f.begin(),f.end()); + foundSum.insert(foundSum.end(), f.begin(), f.end()); } assert((count > 0 && foundSum.size() > 0) || foundSum.size() == 0); - if( count == 0 ) - { + if (count == 0) { LOGW << item << " has no assigned searcher" << std::endl; } - if( count > typeSearcherCount[item.type] ) + if (count > typeSearcherCount[item.type]) typeSearcherCount[item.type] = count; searchedItems.push_back(item); std::vector<Item>::iterator foundSumIt; - for( foundSumIt = foundSum.begin(); foundSumIt != foundSum.end(); foundSumIt++ ) - { - //We sometimes get broken paths from the files (bad case etc) + for (foundSumIt = foundSum.begin(); foundSumIt != foundSum.end(); foundSumIt++) { + // We sometimes get broken paths from the files (bad case etc) foundSumIt->VerifyPath(); - RunRecursiveSearchOn( *foundSumIt ); + RunRecursiveSearchOn(*foundSumIt); } - if( foundSum.size() > 0 ) + if (foundSum.size() > 0) LOGD << "Found " << foundSum.size() << " in " << item << std::endl; foundItems.insert(foundSum.begin(), foundSum.end()); } } -void JobHandler::AddItem(const std::string& input_folder, const std::string& path, const std::string& type, const JobXMLParser::Item& source) -{ - LOGD << "Adding " << type << ": " << path << std::endl; - items.push_back(Item(input_folder,path,type,source)); +void JobHandler::AddItem(const std::string& input_folder, const std::string& path, const std::string& type, const JobXMLParser::Item& source) { + LOGD << "Adding " << type << ": " << path << std::endl; + items.push_back(Item(input_folder, path, type, source)); } -std::vector<Item>::const_iterator JobHandler::ItemsBegin() const -{ +std::vector<Item>::const_iterator JobHandler::ItemsBegin() const { return items.begin(); } -std::vector<Item>::const_iterator JobHandler::ItemsEnd() const -{ +std::vector<Item>::const_iterator JobHandler::ItemsEnd() const { return items.end(); } -bool JobHandler::HasItemWithPath( const std::string& path ) -{ +bool JobHandler::HasItemWithPath(const std::string& path) { std::vector<Item>::iterator itemit = items.begin(); - for( ; itemit != items.end(); itemit++ ) - { - if( itemit->path == path ) - { + for (; itemit != items.end(); itemit++) { + if (itemit->path == path) { return true; } } |