[Cin] automatic save of

Andrew Randrianasulu randrianasulu at gmail.com
Tue Jan 19 03:04:12 CET 2021


В сообщении от Monday 18 January 2021 13:43:36 Rafa Mar Multimedia en Gnu\Linux via Cin написал(а):
> Thank you very much Reuss András, with the multiple backup copies you have
> done an excellent job, perhaps you could limit these so that you do not end
> up with thousands of copies, with about 50 would be enough.


I tried to copy/paste cleanup function, TEST WITH CAUTION!!!!

======
void MWindow::clean_backups()
{
    FileSystem fs;
    int total_excess;
    long oldest = 0;
    int oldest_item = -1;
    int result;
    char string[BCTEXTLEN];

// Delete extra backups
    fs.set_filter("backup_*.xml");
    fs.complete_path(preferences->index_directory);
    fs.update(preferences->index_directory);

    total_excess = fs.dir_list.total - preferences->index_count;
    printf("Total excess of backups: %i \n", total_excess);

//printf("MWindow::clean_backups 1 %d\n", fs.dir_list.total);

    while(total_excess > 0)
    {
// Get oldest
       for(int i = 0; i < fs.dir_list.total; i++)
       {
           fs.join_names(string, preferences->index_directory, fs.dir_list[i]->name);

           if(i == 0 || fs.get_date(string) <= oldest)
           {
               oldest = fs.get_date(string);
               oldest_item = i;
           }
       }

       if(oldest_item >= 0)
       {
// Remove backup file
           fs.join_names(string,
               preferences->index_directory,
               fs.dir_list[oldest_item]->name);
//printf("MWindow::clean_backups 1 %s\n", string);
           if(remove(string))
               perror("delete_backups");
           delete fs.dir_list[oldest_item];
           fs.dir_list.remove_number(oldest_item);

       }

       total_excess--;
    }
}


=====

it clears backups down to same number as max indexes number set in Preferences,
looking for backup_*.xml (note "_" part!!!)

you need to add 

diff --git a/cinelerra-5.1/cinelerra/mwindow.h b/cinelerra-5.1/cinelerra/mwindow.h
index 8f9bfbb7..df9fd9db 100644
--- a/cinelerra-5.1/cinelerra/mwindow.h
+++ b/cinelerra-5.1/cinelerra/mwindow.h
@@ -853,6 +853,7 @@ public:
        int get_cpus();
 //
        void clean_indexes();
+       void clean_backups();
 //     TimeBomb timebomb;
        SigHandler *sighandler;
        int restart_status;

also ...

Ha, remaint of Timebomb :}

Need to be deleted ....

*My* hack for making many_backups was in mwindow.C:

@@ -4276,10 +4369,27 @@ void MWindow::save_backup()
        edl->optimize();
        edl->set_path(session->filename);

-       char backup_path[BCTEXTLEN], backup_path1[BCTEXTLEN];
+       char backup_path[BCTEXTLEN], backup_path1[BCTEXTLEN], backup_path2[BCTEXTLEN];
+
+       time_t t = time(NULL);
+        struct tm tm = *localtime(&t);
+       char BACKUP_FILE2[BCTEXTLEN] ;
+       sprintf(BACKUP_FILE2, _("backup_%02d%02d%02d-%02d%02d%02d.xml"),
+           tm.tm_year+1900, tm.tm_mon+1, tm.tm_mday,
+           tm.tm_hour, tm.tm_min, tm.tm_sec);
+
+       snprintf(backup_path2, sizeof(backup_path2), "%s/%s",
+               File::get_config_path(), BACKUP_FILE2);
+
        snprintf(backup_path1, sizeof(backup_path1), "%s/%s",
                File::get_config_path(), BACKUP_FILE1);
        get_backup_path(backup_path, sizeof(backup_path));
+
+       char cmd[1024], *cp = cmd;
+       cp += sprintf(cp, "cp %s %s &", backup_path, backup_path2);
+       system(cmd);
+
+
        rename(backup_path, backup_path1);
        edl->save_xml(&file, backup_path);
        file.terminate_string();

For Reuss' solution you most likely need to tweak 

fs.set_filter("backup_*.xml"); 

line

....





More information about the Cin mailing list