Merges the two filtering operation to keep valid verbose output.

This commit is contained in:
Andrea Mazzoleni 2012-11-23 00:09:50 +01:00
parent 99223533eb
commit 9b95d5951c
3 changed files with 19 additions and 10 deletions

View file

@ -376,8 +376,7 @@ int main(int argc, char* argv[])
state_read(&state);
/* apply the command line filter */
state_filter(&state, &filterlist_file);
state_filter(&state, &filterlist_disk);
state_filter(&state, &filterlist_file, &filterlist_disk);
/* intercept Ctrl+C */
signal(SIGINT, &signal_handler);
@ -391,8 +390,7 @@ int main(int argc, char* argv[])
state_read(&state);
/* apply the command line filter */
state_filter(&state, &filterlist_file);
state_filter(&state, &filterlist_disk);
state_filter(&state, &filterlist_file, &filterlist_disk);
/* intercept Ctrl+C */
signal(SIGINT, &signal_handler);

21
state.c
View file

@ -1517,19 +1517,26 @@ void state_write(struct snapraid_state* state)
state->need_write = 0; /* no write needed anymore */
}
void state_filter(struct snapraid_state* state, tommy_list* filterlist)
void state_filter(struct snapraid_state* state, tommy_list* filterlist_file, tommy_list* filterlist_disk)
{
tommy_node* i;
/* if no filter, include all */
if (tommy_list_empty(filterlist))
if (tommy_list_empty(filterlist_file) && tommy_list_empty(filterlist_disk))
return;
printf("Filtering...\n");
if (state->verbose) {
tommy_node* k;
for(k=tommy_list_head(filterlist);k!=0;k=k->next) {
for(k=tommy_list_head(filterlist_disk);k!=0;k=k->next) {
struct snapraid_filter* filter = k->data;
printf("\t%s", filter->pattern);
if (filter->is_disk)
printf("//");
printf("\n");
}
for(k=tommy_list_head(filterlist_file);k!=0;k=k->next) {
struct snapraid_filter* filter = k->data;
printf("\t%s", filter->pattern);
if (filter->is_dir)
@ -1547,7 +1554,9 @@ void state_filter(struct snapraid_state* state, tommy_list* filterlist)
for(j=tommy_list_head(&disk->filelist);j!=0;j=j->next) {
struct snapraid_file* file = j->data;
if (filter_path(filterlist, disk->name, file->sub) != 0) {
if (filter_path(filterlist_disk, disk->name, file->sub) != 0
|| filter_path(filterlist_file, disk->name, file->sub) != 0
) {
file_flag_set(file, FILE_IS_EXCLUDED);
}
@ -1560,7 +1569,9 @@ void state_filter(struct snapraid_state* state, tommy_list* filterlist)
for(j=tommy_list_head(&disk->linklist);j!=0;j=j->next) {
struct snapraid_link* link = j->data;
if (filter_path(filterlist, disk->name, link->sub) != 0) {
if (filter_path(filterlist_disk, disk->name, link->sub) != 0
|| filter_path(filterlist_file, disk->name, link->sub) != 0
) {
link_flag_set(link, FILE_IS_EXCLUDED);
}

View file

@ -111,7 +111,7 @@ void state_dup(struct snapraid_state* state);
* Filter files.
* Apply and additional filter to list of file currently loaded.
*/
void state_filter(struct snapraid_state* state, tommy_list* filterlist);
void state_filter(struct snapraid_state* state, tommy_list* filterlist_file, tommy_list* filterlist_disk);
/**
* Begins the progress visualization.