| 138 | } |
| 139 | |
| 140 | Ref<FileDiffResult> FileDiffResult::get_resource_diff(Ref<Resource> p_res, Ref<Resource> p_res2, const Dictionary &p_structured_changes) { |
| 141 | Ref<FileDiffResult> result; |
| 142 | result.instantiate(); |
| 143 | result->set_res_old(p_res); |
| 144 | result->set_res_new(p_res2); |
| 145 | if (p_res.is_null() && p_res2.is_null()) { |
| 146 | result->set_type("unchanged"); |
| 147 | return result; |
| 148 | } |
| 149 | if (p_res.is_null()) { |
| 150 | result->set_type("added"); |
| 151 | return result; |
| 152 | } |
| 153 | if (p_res2.is_null()) { |
| 154 | result->set_type("deleted"); |
| 155 | return result; |
| 156 | } |
| 157 | if (p_res->get_class() != p_res2->get_class()) { |
| 158 | result->set_type("type_changed"); |
| 159 | return result; |
| 160 | } |
| 161 | if (p_res->get_class() != "PackedScene") { |
| 162 | auto diff = ObjectDiffResult::get_diff_obj((Object *)p_res.ptr(), (Object *)p_res2.ptr(), true, p_structured_changes); |
| 163 | result->set_type("resource_changed"); |
| 164 | result->set_props(diff); |
| 165 | return result; |
| 166 | } |
| 167 | Ref<PackedScene> p_scene1 = p_res; |
| 168 | Ref<PackedScene> p_scene2 = p_res2; |
| 169 | auto scene1 = p_scene1->instantiate(); |
| 170 | auto scene2 = p_scene2->instantiate(); |
| 171 | HashSet<NodePath> paths; |
| 172 | NodeDiffResult::get_child_node_paths(scene1, paths); |
| 173 | NodeDiffResult::get_child_node_paths(scene2, paths); |
| 174 | HashMap<String, Ref<NodeDiffResult>> node_diffs; |
| 175 | for (auto &path : paths) { |
| 176 | Ref<NodeDiffResult> value1 = NodeDiffResult::evaluate_node_differences(scene1, scene2, path, p_structured_changes); |
| 177 | if (value1.is_valid()) { |
| 178 | node_diffs[String(path)] = value1; |
| 179 | } |
| 180 | } |
| 181 | result->set_type("scene_changed"); |
| 182 | result->set_node_diff_map(node_diffs); |
| 183 | return result; |
| 184 | } |
| 185 | |
| 186 | void ObjectDiffResult::_bind_methods() { |
| 187 | ClassDB::bind_method(D_METHOD("set_old_object", "old_object"), &ObjectDiffResult::set_old_object); |
nothing calls this directly
no test coverage detected