Browse Source

Merge pull request #92320 from Hilderin/fix-importing-assets-with-csv

Fix reimporting assets with csv in the project
Rémi Verschelde 1 year ago
parent
commit
74f9f12c71
2 changed files with 24 additions and 3 deletions
  1. 13 1
      core/io/resource_importer.cpp
  2. 11 2
      editor/editor_file_system.cpp

+ 13 - 1
core/io/resource_importer.cpp

@@ -118,9 +118,21 @@ Error ResourceFormatImporter::_get_path_and_type(const String &p_path, PathAndTy
 	}
 	}
 #endif
 #endif
 
 
-	if (r_path_and_type.path.is_empty() || r_path_and_type.type.is_empty()) {
+	if (r_path_and_type.type.is_empty()) {
 		return ERR_FILE_CORRUPT;
 		return ERR_FILE_CORRUPT;
 	}
 	}
+	if (r_path_and_type.path.is_empty()) {
+		// Some importers may not write files to the .godot folder, so the path can be empty.
+		if (r_path_and_type.importer.is_empty()) {
+			return ERR_FILE_CORRUPT;
+		}
+
+		// It's only invalid if the extension for the importer is not empty.
+		Ref<ResourceImporter> importer = get_importer_by_name(r_path_and_type.importer);
+		if (importer.is_null() || !importer->get_save_extension().is_empty()) {
+			return ERR_FILE_CORRUPT;
+		}
+	}
 	return OK;
 	return OK;
 }
 }
 
 

+ 11 - 2
editor/editor_file_system.cpp

@@ -2468,18 +2468,23 @@ void EditorFileSystem::reimport_files(const Vector<String> &p_files) {
 	int from = 0;
 	int from = 0;
 	for (int i = 0; i < reimport_files.size(); i++) {
 	for (int i = 0; i < reimport_files.size(); i++) {
 		if (groups_to_reimport.has(reimport_files[i].path)) {
 		if (groups_to_reimport.has(reimport_files[i].path)) {
+			from = i + 1;
 			continue;
 			continue;
 		}
 		}
 
 
 		if (use_multiple_threads && reimport_files[i].threaded) {
 		if (use_multiple_threads && reimport_files[i].threaded) {
-			if (i + 1 == reimport_files.size() || reimport_files[i + 1].importer != reimport_files[from].importer) {
+			if (i + 1 == reimport_files.size() || reimport_files[i + 1].importer != reimport_files[from].importer || groups_to_reimport.has(reimport_files[i + 1].path)) {
 				if (from - i == 0) {
 				if (from - i == 0) {
 					// Single file, do not use threads.
 					// Single file, do not use threads.
 					pr.step(reimport_files[i].path.get_file(), i);
 					pr.step(reimport_files[i].path.get_file(), i);
 					_reimport_file(reimport_files[i].path);
 					_reimport_file(reimport_files[i].path);
 				} else {
 				} else {
 					Ref<ResourceImporter> importer = ResourceFormatImporter::get_singleton()->get_importer_by_name(reimport_files[from].importer);
 					Ref<ResourceImporter> importer = ResourceFormatImporter::get_singleton()->get_importer_by_name(reimport_files[from].importer);
-					ERR_CONTINUE(!importer.is_valid());
+					if (importer.is_null()) {
+						ERR_PRINT(vformat("Invalid importer for \"%s\".", reimport_files[from].importer));
+						from = i + 1;
+						continue;
+					}
 
 
 					importer->import_threaded_begin();
 					importer->import_threaded_begin();
 
 
@@ -2509,6 +2514,10 @@ void EditorFileSystem::reimport_files(const Vector<String> &p_files) {
 		} else {
 		} else {
 			pr.step(reimport_files[i].path.get_file(), i);
 			pr.step(reimport_files[i].path.get_file(), i);
 			_reimport_file(reimport_files[i].path);
 			_reimport_file(reimport_files[i].path);
+
+			// We need to increment the counter, maybe the next file is multithreaded
+			// and doesn't have the same importer.
+			from = i + 1;
 		}
 		}
 	}
 	}