[Bf-blender-cvs] [ddedcf7ada1] blender2.8: Outliner/layer: fix users trying to drop a collection into itself (recursion hell)

Dalai Felinto noreply at git.blender.org
Mon Mar 13 17:38:43 CET 2017


Commit: ddedcf7ada1bec8a4e2f1c89984ded312a12cc46
Author: Dalai Felinto
Date:   Mon Mar 13 17:35:58 2017 +0100
Branches: blender2.8
https://developer.blender.org/rBddedcf7ada1bec8a4e2f1c89984ded312a12cc46

Outliner/layer: fix users trying to drop a collection into itself (recursion hell)

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

M	source/blender/blenkernel/intern/layer.c
M	tests/python/render_layer/CMakeLists.txt
A	tests/python/render_layer/test_move_into_layer_collection_j.py

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

diff --git a/source/blender/blenkernel/intern/layer.c b/source/blender/blenkernel/intern/layer.c
index 132cf6c8ac6..418dc68a503 100644
--- a/source/blender/blenkernel/intern/layer.c
+++ b/source/blender/blenkernel/intern/layer.c
@@ -580,6 +580,11 @@ bool BKE_layer_collection_move_into(const Scene *scene, LayerCollection *lc_dst,
 		return false;
 	}
 
+	/* We can't nest the collection into itself */
+	if (lc_src->scene_collection == lc_dst->scene_collection) {
+		return false;
+	}
+
 	/* Collection is already where we wanted it to be */
 	if (lc_dst->layer_collections.last == lc_src) {
 		return false;
diff --git a/tests/python/render_layer/CMakeLists.txt b/tests/python/render_layer/CMakeLists.txt
index 3781ce02ec0..f03a04a7029 100644
--- a/tests/python/render_layer/CMakeLists.txt
+++ b/tests/python/render_layer/CMakeLists.txt
@@ -135,6 +135,7 @@ RENDER_LAYER_TEST(move_into_layer_collection_f)
 RENDER_LAYER_TEST(move_into_layer_collection_g)
 RENDER_LAYER_TEST(move_into_layer_collection_h)
 RENDER_LAYER_TEST(move_into_layer_collection_i)
+RENDER_LAYER_TEST(move_into_layer_collection_j)
 RENDER_LAYER_TEST(layer_linking)
 RENDER_LAYER_TEST(layer_syncinc)
 RENDER_LAYER_TEST(scene_copy)
diff --git a/tests/python/render_layer/test_move_into_layer_collection_j.py b/tests/python/render_layer/test_move_into_layer_collection_j.py
new file mode 100644
index 00000000000..32cd3732544
--- /dev/null
+++ b/tests/python/render_layer/test_move_into_layer_collection_j.py
@@ -0,0 +1,49 @@
+# ./blender.bin --background -noaudio --python tests/python/render_layer/test_link.py -- --testdir="/data/lib/tests/"
+
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+
+import os, sys
+sys.path.append(os.path.dirname(__file__))
+
+from render_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(MoveLayerCollectionTesting):
+    def get_reference_scene_tree_map(self):
+        # original tree, no changes
+        return self.get_initial_scene_tree_map()
+
+    def get_reference_layers_tree_map(self):
+        # original tree, no changes
+        return self.get_initial_layers_tree_map()
+
+    def test_layer_collection_into(self):
+        """
+        Test outliner operations
+        Prevent collection from being dragged into itself
+        """
+        self.setup_tree()
+        self.assertFalse(self.move_into("Layer 2.dog", "Layer 2.3.dog"))
+        self.compare_tree_maps()
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+    import sys
+
+    extra_arguments = sys.argv[sys.argv.index("--") + 1:] if "--" in sys.argv else []
+    sys.argv = [__file__] + (sys.argv[sys.argv.index("--") + 2:] if "--" in sys.argv else [])
+
+    UnitTesting._extra_arguments = extra_arguments
+    unittest.main()




More information about the Bf-blender-cvs mailing list