class ConfigurationUpdater: var EditorGlobals = load("res://addons/gut/gui/editor_globals.gd") func warn(message): print('GUT Warning: ', message) func info(message): print("GUT Info: ", message) func moved_file(from, to): if(FileAccess.file_exists(from) and !FileAccess.file_exists(to)): info(str('Copying [', from, '] to [', to, ']')) var result = DirAccess.copy_absolute(from, to) if(result != OK): warn(str('Could not copy [', from, '] to [', to, ']')) if(FileAccess.file_exists(from) and FileAccess.file_exists(to)): warn(str('File [', from, '] has been moved to [', to, "].\n You can delete ", from)) func move_user_file(from, to): if(from.begins_with('user://') and to.begins_with('user://')): if(FileAccess.file_exists(from) and !FileAccess.file_exists(to)): info(str('Moving [', from, '] to [', to, ']')) var result = DirAccess.copy_absolute(from, to) if(result == OK): info(str(' ', 'Created ', to)) result = DirAccess.remove_absolute(from) if(result != OK): warn(str(' ', 'Could not delete ', from)) else: info(str(' ', 'Deleted ', from)) else: warn(str(' ', 'Could not copy [', from, '] to [', to, ']')) else: warn(str('Attempt to move_user_file with files not in user:// ', from, '->', to)) func remove_user_file(which): if(which.begins_with('user://') and FileAccess.file_exists(which)): info(str('Deleting obsolete file ', which)) var result = DirAccess.remove_absolute(which) if(result != OK): warn(str(' ', 'Could not delete ', which)) else: info(str(' ', 'Deleted ', which)) class v9_2_0: extends ConfigurationUpdater func validate(): moved_file('res://.gut_editor_config.json', EditorGlobals.editor_run_gut_config_path) moved_file('res://.gut_editor_shortcuts.cfg', EditorGlobals.editor_shortcuts_path) remove_user_file('user://.gut_editor.bbcode') remove_user_file('user://.gut_editor.json') # list=Array[Dictionary]([{ # "base": &"RefCounted", # "class": &"DynamicGutTest", # "icon": "", # "language": &"GDScript", # "path": "res://test/resources/tools/dynamic_gut_test.gd" # }, { # "base": &"RefCounted", # "class": &"GutDoubleTestInnerClasses", # "icon": "", # "language": &"GDScript", # "path": "res://test/resources/doubler_test_objects/inner_classes.gd" # }, ... ]) static func get_missing_gut_class_names() -> Array: var gut_class_names = [ "GutErrorTracker", "GutHookScript", "GutInputFactory", "GutInputSender", "GutMain", "GutStringUtils", "GutTest", "GutTrackedError", "GutUtils", ] var class_cach_path = 'res://.godot/global_script_class_cache.cfg' var cfg = ConfigFile.new() cfg.load(class_cach_path) var all_class_names = {} var missing = [] var class_cache_entries = cfg.get_value('', 'list', []) for entry in class_cache_entries: if(entry.path.begins_with(&"res://addons/gut/")): # print(entry["class"], ': ', entry["path"]) all_class_names[entry["class"]] = entry for cn in gut_class_names: if(!all_class_names.has(cn)): missing.append(cn) return missing static func error_if_not_all_classes_imported() -> bool: var missing_class_names = get_missing_gut_class_names() if(missing_class_names.size() > 0): push_error(str("Some GUT class_names have not been imported. Please restart the Editor or run godot --headless --import\n", "Missing class_names: ", missing_class_names)) return true else: return false static func convert(): var inst = v9_2_0.new() inst.validate()