Fix '--addons' argument
authorCampbell Barton <ideasman42@gmail.com>
Sun, 14 Jun 2015 12:17:38 +0000 (22:17 +1000)
committerCampbell Barton <ideasman42@gmail.com>
Sun, 14 Jun 2015 12:18:44 +0000 (22:18 +1000)
- only enable addons which aren't already enabled
- use 'persistent' load option (new file wont reset)

source/creator/creator.c

index 237dcec4b26d606e3705f2b11c25754ac3ab2d30..8c1ae3d8c87c29eb1d67a3208c89fc232a269677 100644 (file)
@@ -1325,11 +1325,18 @@ static int set_addons(int argc, const char **argv, void *data)
        /* workaround for scripts not getting a bpy.context.scene, causes internal errors elsewhere */
        if (argc > 1) {
 #ifdef WITH_PYTHON
-               const int slen = strlen(argv[1]) + 128;
+               const char script_str[] =
+                       "from addon_utils import check, enable\n"
+                       "for m in '%s'.split(','):\n"
+                       "    if check(m)[1] is False:\n"
+                       "        enable(m, persistent=True)";
+               const int slen = strlen(argv[1]) + (sizeof(script_str) - 2);
                char *str = malloc(slen);
                bContext *C = data;
-               BLI_snprintf(str, slen, "[__import__('addon_utils').enable(i, default_set=False) for i in '%s'.split(',')]", argv[1]);
-               BPY_CTX_SETUP(BPY_string_exec(C, str));
+               BLI_snprintf(str, slen, script_str, argv[1]);
+
+               BLI_assert(strlen(str) + 1 == slen);
+               BPY_CTX_SETUP(BPY_string_exec_ex(C, str, false));
                free(str);
 #else
                UNUSED_VARS(argv, data);