+ FileDataSizeCmp sizecmp;
+ sort( backups_s.begin(), backups_s.end(), sizecmp );
+
+ file_set final;
+ unsigned long long space = 0x107c00000ULL; // 4220 MBytes
+
+ insert_iterator<file_set> final_i( final, final.begin() );
+
+ // Copy files over until full or out of files
+ bool complete = copy_until_full( backups_s.rbegin(),
+ backups_s.rend(),
+ final_i,
+ space );
+
+ // Now, sort the non-backed-up list by last_backup_date and back-fill
+ if( 0 != space ) {
+ file_vector leftovers;
+ FileDataNameCmp cmp;
+ set_difference( current.begin(), current.end(),
+ final.begin(), final.end(),
+ back_inserter( leftovers ),
+ cmp );
+
+ FileDataLastBackupCmp lastbackupcmp;
+ sort( leftovers.begin(), leftovers.end(), lastbackupcmp );
+
+ copy_until_full( leftovers.begin(), leftovers.end(), final_i, space );
+ }
+
+ unsigned long long now = current_time();
+ for( file_set::iterator k = final.begin(); k != final.end(); ++k ) {
+ (*k)->setLastBackupDate( now );
+ }