[Bf-blender-cvs] [8f4d6f6] asset-experiments: Merge branch 'master' into asset-experiments

Bastien Montagne noreply at git.blender.org
Sat Jan 3 17:08:10 CET 2015


Commit: 8f4d6f62ea02de2c5589087c2bd9928874844fcf
Author: Bastien Montagne
Date:   Sat Jan 3 17:07:16 2015 +0100
Branches: asset-experiments
https://developer.blender.org/rB8f4d6f62ea02de2c5589087c2bd9928874844fcf

Merge branch 'master' into asset-experiments

Conflicts:
	source/blender/blenkernel/BKE_camera.h
	source/blender/blenkernel/intern/camera.c
	source/blender/blenlib/BLI_fileops.h
	source/blender/blenlib/intern/storage.c
	source/blender/editors/space_file/filelist.c
	source/blender/makesrna/intern/rna_object_api.c
	tests/gtests/blenlib/BLI_path_util_test.cc

===================================================================



===================================================================

diff --cc source/blender/editors/space_file/filelist.c
index 65f8a69,abfa1ed..828d85b
--- a/source/blender/editors/space_file/filelist.c
+++ b/source/blender/editors/space_file/filelist.c
@@@ -675,20 -565,14 +675,20 @@@ void filelist_setfilter_options(FileLis
  	if ((filelist->filter_data.hide_dot != hide_dot) ||
  	    (filelist->filter_data.hide_parent != hide_parent) ||
  	    (filelist->filter_data.filter != filter) ||
 -	    (!STREQ(filelist->filter_data.filter_glob, filter_glob)))
 +	    (filelist->filter_data.filter_id != filter_id) ||
 +	    !STREQ(filelist->filter_data.filter_glob, filter_glob) ||
- 	    (BLI_fnmatch_strcmp_ignore_endswildcards(filelist->filter_data.filter_search, filter_search) != 0))
++	    (BLI_strcmp_ignore_pad(filelist->filter_data.filter_search, filter_search, '*') != 0))
  	{
  		filelist->filter_data.hide_dot = hide_dot;
  		filelist->filter_data.hide_parent = hide_parent;
  
  		filelist->filter_data.filter = filter;
 +		filelist->filter_data.filter_id = filter_id;
  		BLI_strncpy(filelist->filter_data.filter_glob, filter_glob, sizeof(filelist->filter_data.filter_glob));
- 		BLI_fnmatch_strncpy_add_endswildcards(filelist->filter_data.filter_search, filter_search,
- 		                                      sizeof(filelist->filter_data.filter_search));
++		BLI_strncpy_ensure_pad(filelist->filter_data.filter_search, filter_search, '*',
++		                       sizeof(filelist->filter_data.filter_search));
  
 +		/* And now, free filtered data so that we now we have to filter again. */
  		filelist_filter_clear(filelist);
  	}
  }
@@@ -968,23 -722,6 +968,23 @@@ FileList *filelist_new(short type
  	return p;
  }
  
 +void filelist_clear(struct FileList *filelist)
 +{
 +	if (!filelist) {
 +		return;
 +	}
 +
 +	if (filelist->fidx) {
 +		MEM_freeN(filelist->fidx);
 +		filelist->fidx = NULL;
 +	}
 +
- 	BLI_free_filelist(filelist->filelist, filelist->numfiles);
++	BLI_filelist_free(filelist->filelist, filelist->numfiles, NULL);
 +	filelist->numfiles = 0;
 +	filelist->filelist = NULL;
 +	filelist->numfiltered = 0;
 +}
 +
  void filelist_free(struct FileList *filelist)
  {
  	if (!filelist) {
@@@ -999,9 -736,7 +999,9 @@@
  	filelist->need_sorting = false;
  	filelist->sort = FILE_SORT_NONE;
  
 +	filelist->need_thumbnails = false;
 +
- 	BLI_free_filelist(filelist->filelist, filelist->numfiles);
+ 	BLI_filelist_free(filelist->filelist, filelist->numfiles, NULL);
  	filelist->numfiles = 0;
  	filelist->filelist = NULL;
  }
@@@ -1714,291 -1325,6 +1714,291 @@@ static void filelist_readjob_main_rec(s
  		}
  	}
  }
 +#endif
 +
 +static void filelist_readjob_dir_lib_rec(
 +        const bool do_lib, const char *main_name,
 +        FileList *filelist, int *filelist_buffsize, const char *dir, const char *filter_glob, const int recursion_level,
 +        short *stop, short *do_update, float *progress, int *done_files, ThreadMutex *lock)
 +{
 +	/* only used if recursing, will contain all non-immediate children then. */
 +	struct direntry *file, *files = NULL;
 +	bool is_lib = do_lib;
 +	int num_files = 0;
 +	int i;
 +
 +	if (!filelist) {
 +		return;
 +	}
 +
 +	if (do_lib) {
 +		filelist_readjob_list_lib(dir, &files, &num_files);
 +
 +		if (!files) {
 +			is_lib = false;
- 			num_files = BLI_dir_contents(dir, &files);
++			num_files = BLI_filelist_dir_contents(dir, &files);
 +		}
 +	}
 +	else {
- 		num_files = BLI_dir_contents(dir, &files);
++		num_files = BLI_filelist_dir_contents(dir, &files);
 +	}
 +
 +	if (!files) {
 +		return;
 +	}
 +
 +	/* We only set filtypes for our own level, sub ones will be set by subcalls. */
 +	filelist_setfiletypes(dir, files, num_files, filter_glob);
 +
 +	if (do_lib) {
 +		/* Promote blend files from mere file status to prestigious directory one! */
 +		for (i = 0, file = files; i < num_files; i++, file++) {
 +			if (BLO_has_bfile_extension(file->relname)) {
 +				char name[FILE_MAX];
 +
 +				BLI_join_dirfile(name, sizeof(name), dir, file->relname);
 +
 +				/* prevent current file being used as acceptable dir */
 +				if (BLI_path_cmp(main_name, name) != 0) {
 +					file->type &= ~S_IFMT;
 +					file->type |= S_IFDIR;
 +				}
 +			}
 +		}
 +	}
 +
 +	BLI_mutex_lock(lock);
 +
 +	filelist_readjob_merge_sublist(&filelist->filelist, filelist_buffsize, &filelist->numfiles, filelist->dir,
 +	                               dir, files, num_files, recursion_level != 0);
 +
 +	(*done_files)++;
 +	*progress = (float)(*done_files) / filelist->numfiles;
 +
 +	//~ printf("%f (%d / %d)\n", *progress, *done_files, filelist->numfiles);
 +
 +	BLI_mutex_unlock(lock);
 +
 +	*do_update = true;
 +
 +	/* in case it's a lib we don't care anymore about max recursion level... */
 +	if (!*stop && filelist->use_recursion && ((do_lib && is_lib) || (recursion_level < FILELIST_MAX_RECURSION))) {
 +		for (i = 0, file = files; i < num_files && !*stop; i++, file++) {
 +			char subdir[FILE_MAX];
 +
 +			if (FILENAME_IS_BREADCRUMBS(file->relname)) {
 +				/* do not increase done_files here, we completly ignore those. */
 +				continue;
 +			}
 +			else if ((file->type & S_IFDIR) == 0) {
 +				(*done_files)++;
 +				continue;
 +			}
 +
 +			BLI_join_dirfile(subdir, sizeof(subdir), dir, file->relname);
 +			BLI_cleanup_dir(main_name, subdir);
 +			filelist_readjob_dir_lib_rec(do_lib, main_name,
 +			                             filelist, filelist_buffsize, subdir, filter_glob, recursion_level + 1,
 +			                             stop, do_update, progress, done_files, lock);
 +		}
 +	}
- 	BLI_free_filelist(files, num_files);
++	BLI_filelist_free(files, num_files, NULL);
 +}
 +
 +static void filelist_readjob_dir(
 +        FileList *filelist, const char *main_name, short *stop, short *do_update, float *progress, ThreadMutex *lock)
 +{
 +	char dir[FILE_MAX];
 +	char filter_glob[64];  /* TODO should be define! */
 +	int filelist_buffsize = 0;
 +	int done_files = 0;
 +
 +	BLI_assert(filelist->fidx == NULL);
 +	BLI_assert(filelist->filelist == NULL);
 +
 +	BLI_mutex_lock(lock);
 +
 +	BLI_strncpy(dir, filelist->dir, sizeof(dir));
 +	BLI_strncpy(filter_glob, filelist->filter_data.filter_glob, sizeof(filter_glob));
 +
 +	BLI_mutex_unlock(lock);
 +
 +	filelist_readjob_dir_lib_rec(false, main_name, filelist, &filelist_buffsize, dir, filter_glob, 0,
 +	                             stop, do_update, progress, &done_files, lock);
 +}
 +
 +static void filelist_readjob_lib(
 +        FileList *filelist, const char *main_name, short *stop, short *do_update, float *progress, ThreadMutex *lock)
 +{
 +	char dir[FILE_MAX];
 +	char filter_glob[64];  /* TODO should be define! */
 +	int filelist_buffsize = 0;
 +	int done_files = 0;
 +
 +	BLI_assert(filelist->fidx == NULL);
 +	BLI_assert(filelist->filelist == NULL);
 +
 +	BLI_mutex_lock(lock);
 +
 +	BLI_strncpy(dir, filelist->dir, sizeof(dir));
 +	BLI_strncpy(filter_glob, filelist->filter_data.filter_glob, sizeof(filter_glob));
 +
 +	BLI_mutex_unlock(lock);
 +
 +	BLI_cleanup_dir(main_name, dir);
 +
 +	filelist_readjob_dir_lib_rec(true, main_name, filelist, &filelist_buffsize, dir, filter_glob, 0,
 +	                             stop, do_update, progress, &done_files, lock);
 +}
 +
 +static void filelist_readjob_main(
 +        FileList *filelist, const char *main_name, short *stop, short *do_update, float *progress, ThreadMutex *lock)
 +{
 +	BLI_mutex_lock(lock);
 +
 +	/* TODO! */
 +	filelist_readjob_dir(filelist, main_name, stop, do_update, progress, lock);
 +
 +	BLI_mutex_unlock(lock);
 +}
 +
 +
 +typedef struct FileListReadJob {
 +	ThreadMutex lock;
 +	char main_name[FILE_MAX];
 +	struct FileList *filelist;
 +	struct FileList *tmp_filelist;
 +	//~ ReportList reports;
 +} FileListReadJob;
 +
 +static void filelist_readjob_startjob(void *flrjv, short *stop, short *do_update, float *progress)
 +{
 +	FileListReadJob *flrj = flrjv;
 +
 +	printf("START filelist reading (%d files, main thread: %d)\n", flrj->filelist->numfiles, BLI_thread_is_main());
 +
 +	BLI_mutex_lock(&flrj->lock);
 +
 +	BLI_assert((flrj->tmp_filelist == NULL) && flrj->filelist);
 +
 +	flrj->tmp_filelist = MEM_dupallocN(flrj->filelist);
 +
 +	BLI_mutex_unlock(&flrj->lock);
 +
 +	flrj->tmp_filelist->filelist = NULL;
 +	flrj->tmp_filelist->fidx = NULL;
 +	flrj->tmp_filelist->numfiles = 0;
 +	flrj->tmp_filelist->fidx = 0;
 +	flrj->tmp_filelist->libfiledata = NULL;
 +
 +	flrj->tmp_filelist->read_jobf(flrj->tmp_filelist, flrj->main_name, stop, do_update, progress, &flrj->lock);
 +
 +	printf("END filelist reading (%d files, STOPPED: %d, DO_UPDATE: %d)\n", flrj->filelist->numfiles, *stop, *do_update);
 +}
 +
 +static void filelist_readjob_update(void *flrjv)
 +{
 +	FileListReadJob *flrj = flrjv;
 +	struct direntry *new_entries = NULL;
 +	int num_new_entries = 0;
 +
 +	BLI_mutex_lock(&flrj->lock);
 +
 +	if (flrj->tmp_filelist->numfiles != flrj->filelist->numfiles) {
 +		num_new_entries = flrj->tmp_filelist->numfiles;
 +		/* This way we are sure we won't share any mem with background job! */
 +		/* Note direntry->poin is not handled here, should not matter though currently. */
- 		BLI_duplicate_filelist(&new_entries, flrj->tmp_filelist->filelist, num_new_entries, NULL);
++		BLI_filelist_duplicate(&new_entries, flrj->tmp_filelist->filelist, num_new_entries, NULL);
 +	}
 +
 +	BLI_mutex_unlock(&flrj->lock);
 +
 +	if (new_entries) {
 +		if (flrj->filelist->filelist) {
- 			BLI_free_filelist(flrj->filelist->filelist, flrj->filelist->numfiles);
++			BLI_filelist_free(flrj->filelist->filelist, flrj->filelist->numfiles, NULL);
 +		}
 +		flrj->filelist->filelist = new_entries;
 +		flrj->filelist->numfiles = num_new_entries;
 +		if (flrj->filelist->fidx) {
 +			MEM_freeN(flrj->filelist->fidx);
 +			flrj->filelist->fidx = NULL;
 +			flrj->filelist->numfiltered = 0;
 +		}
 +
 +		flrj->filelist->need_sorting = true;
 +		flrj->filelist->force_refresh = true;
 +		/* Better be explicit here, since we overwrite filelist->filelist on each run of this update func,
 +		 * it would be stupid to start thumbnail job! */
 +		flrj->filelist->need_thumbnails = false;
 +	}
 +}
 +
 +static void filelist_readjob_endjob(void *flrjv)
 +{
 +	FileListReadJob *flrj = flrjv;
 +
 +	flrj->filelist->filelist_pending = false;
 +	flrj->filelist->filelist_ready = true;
 +	/* Now we can update

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list