netstar pushed a commit to branch master. http://git.enlightenment.org/tools/edi.git/commit/?id=647d866bba0b34d6b59a6360ae42bcf181767aaa
commit 647d866bba0b34d6b59a6360ae42bcf181767aaa Author: Al Poole <[email protected]> Date: Wed Sep 20 16:47:30 2017 +0100 Build: make build proces more robust. Use a different socket address for each type. Also add some UI indicators when a build is in progress. --- src/bin/edi_main.c | 23 ++++++++++++++++++----- src/lib/edi_build_provider_cargo.c | 4 ++-- src/lib/edi_build_provider_cmake.c | 4 ++-- src/lib/edi_build_provider_make.c | 4 ++-- src/lib/edi_build_provider_meson.c | 8 +++++--- src/lib/edi_build_provider_python.c | 4 ++-- src/lib/edi_exe.c | 13 +------------ 7 files changed, 32 insertions(+), 28 deletions(-) diff --git a/src/bin/edi_main.c b/src/bin/edi_main.c index 3ffdd4a..70cd299 100644 --- a/src/bin/edi_main.c +++ b/src/bin/edi_main.c @@ -49,6 +49,7 @@ static Elm_Object_Item *_edi_selected_bottompanel; static Evas_Object *_edi_filepanel, *_edi_filepanel_icon; static Evas_Object *_edi_menu_undo, *_edi_menu_redo, *_edi_toolbar_undo, *_edi_toolbar_redo; +static Evas_Object *_edi_menu_build, *_edi_menu_clean, *_edi_menu_test; static Evas_Object *_edi_menu_init, *_edi_menu_commit, *_edi_menu_push, *_edi_menu_pull, *_edi_menu_status, *_edi_menu_stash; static Evas_Object *_edi_menu_save, *_edi_toolbar_save; static Evas_Object *_edi_main_win, *_edi_main_box; @@ -697,6 +698,14 @@ _edi_launcher_run(Edi_Project_Config_Launch *launch) } static void +_edi_build_menu_items_disabled_set(Eina_Bool state) +{ + elm_object_disabled_set(_edi_menu_build, state); + elm_object_disabled_set(_edi_menu_test, state); + elm_object_disabled_set(_edi_menu_clean, state); +} + +static void _edi_build_display_status_cb(int status, void *data) { Eina_Strbuf *title, *message; @@ -714,6 +723,7 @@ _edi_build_display_status_cb(int status, void *data) edi_screens_desktop_notify(eina_strbuf_string_get(title), eina_strbuf_string_get(message)); + _edi_build_menu_items_disabled_set(EINA_FALSE); eina_strbuf_free(title); eina_strbuf_free(message); } @@ -723,6 +733,7 @@ _edi_build_project(void) { if (edi_exe_notify_handle("edi_build", _edi_build_display_status_cb, _("Build"))) { + _edi_build_menu_items_disabled_set(EINA_TRUE); edi_consolepanel_show(); edi_builder_build(); } @@ -731,8 +742,9 @@ _edi_build_project(void) static void _edi_build_clean_project(void) { - if (edi_exe_notify_handle("edi_build", _edi_build_display_status_cb, _("Clean"))) + if (edi_exe_notify_handle("edi_clean", _edi_build_display_status_cb, _("Clean"))) { + _edi_build_menu_items_disabled_set(EINA_TRUE); edi_consolepanel_show(); edi_builder_clean(); } @@ -741,8 +753,9 @@ _edi_build_clean_project(void) static void _edi_build_test_project(void) { - if (edi_exe_notify_handle("edi_build", _edi_build_display_status_cb, _("Test"))) + if (edi_exe_notify_handle("edi_test", _edi_build_display_status_cb, _("Test"))) { + _edi_build_menu_items_disabled_set(EINA_TRUE); edi_consolepanel_show(); edi_builder_test(); } @@ -1130,11 +1143,11 @@ _edi_menu_setup(Evas_Object *win) elm_menu_item_add(menu, menu_it, "edit-find", _("Open Tasks"), _edi_menu_view_tasks_cb, NULL); menu_it = elm_menu_item_add(menu, NULL, NULL, _("Build"), NULL, NULL); - elm_menu_item_add(menu, menu_it, "system-run", _("Build"), _edi_menu_build_cb, NULL); - elm_menu_item_add(menu, menu_it, "media-record", _("Test"), _edi_menu_test_cb, NULL); + _edi_menu_build = elm_menu_item_add(menu, menu_it, "system-run", _("Build"), _edi_menu_build_cb, NULL); + _edi_menu_test = elm_menu_item_add(menu, menu_it, "media-record", _("Test"), _edi_menu_test_cb, NULL); elm_menu_item_add(menu, menu_it, "media-playback-start", _("Run"), _edi_menu_run_cb, NULL); elm_menu_item_add(menu, menu_it, "utilities-terminal", _("Debug"), _edi_menu_debug_cb, NULL); - elm_menu_item_add(menu, menu_it, "edit-clear", _("Clean"), _edi_menu_clean_cb, NULL); + _edi_menu_clean = elm_menu_item_add(menu, menu_it, "edit-clear", _("Clean"), _edi_menu_clean_cb, NULL); menu_it = elm_menu_item_add(menu, NULL, NULL, _("Project"), NULL, NULL); _edi_menu_init = elm_menu_item_add(menu, menu_it, "media-playback-start", _("Init"), _edi_menu_scm_init_cb, NULL); diff --git a/src/lib/edi_build_provider_cargo.c b/src/lib/edi_build_provider_cargo.c index c78b8e0..dcf2ee1 100644 --- a/src/lib/edi_build_provider_cargo.c +++ b/src/lib/edi_build_provider_cargo.c @@ -67,7 +67,7 @@ static void _cargo_test(void) { if (chdir(edi_project_get()) == 0) - edi_exe_notify("edi_build", "cargo test"); + edi_exe_notify("edi_test", "cargo test"); } static void @@ -81,7 +81,7 @@ static void _cargo_clean(void) { if (chdir(edi_project_get()) == 0) - edi_exe_notify("edi_build", "cargo clean"); + edi_exe_notify("edi_clean", "cargo clean"); } Edi_Build_Provider _edi_build_provider_cargo = diff --git a/src/lib/edi_build_provider_cmake.c b/src/lib/edi_build_provider_cmake.c index 78ddfb6..f43e43d 100644 --- a/src/lib/edi_build_provider_cmake.c +++ b/src/lib/edi_build_provider_cmake.c @@ -61,7 +61,7 @@ _cmake_test(void) if (chdir(edi_project_get()) != 0) ERR("Could not chdir"); - edi_exe_notify("edi_build", "env CK_VERBOSITY=verbose make check"); + edi_exe_notify("edi_test", "env CK_VERBOSITY=verbose make check"); } static void @@ -100,7 +100,7 @@ _cmake_clean(void) if (chdir(edi_project_get()) != 0) ERR("Could not chdir"); - edi_exe_notify("edi_build", "make clean"); + edi_exe_notify("edi_clean", "make clean"); } Edi_Build_Provider _edi_build_provider_cmake = diff --git a/src/lib/edi_build_provider_make.c b/src/lib/edi_build_provider_make.c index de65d4b..2f3854c 100644 --- a/src/lib/edi_build_provider_make.c +++ b/src/lib/edi_build_provider_make.c @@ -128,7 +128,7 @@ _make_test(void) ERR("Could not chdir"); chdir(edi_project_get()); - edi_exe_notify("edi_build", cmd); + edi_exe_notify("edi_test", cmd); } static void @@ -171,7 +171,7 @@ _make_clean(void) if (chdir(edi_project_get()) !=0) ERR("Could not chdir"); - edi_exe_notify("edi_build", cmd); + edi_exe_notify("edi_clean", cmd); } Edi_Build_Provider _edi_build_provider_make = diff --git a/src/lib/edi_build_provider_meson.c b/src/lib/edi_build_provider_meson.c index 6679faf..e4e47b2 100644 --- a/src/lib/edi_build_provider_meson.c +++ b/src/lib/edi_build_provider_meson.c @@ -85,8 +85,10 @@ _meson_ninja_do(Meson_Data *md, const char *arg) const char *cmd; cmd = eina_slstr_printf("ninja -C %s %s", md->fulldir, arg ?: ""); - - edi_exe_notify("edi_build", cmd); + if (arg && !strcmp(arg, "clean")) + edi_exe_notify("edi_clean", cmd); + else + edi_exe_notify("edi_build", cmd); } static Eina_Bool @@ -137,7 +139,7 @@ _meson_build(void) static void _meson_test(void) { - edi_exe_notify("edi_build", "exit 1"); + edi_exe_notify("edi_test", "exit 1"); ERR("Edi doesn't support test with Meson/Ninja!"); } diff --git a/src/lib/edi_build_provider_python.c b/src/lib/edi_build_provider_python.c index ff57b7c..3993e0e 100644 --- a/src/lib/edi_build_provider_python.c +++ b/src/lib/edi_build_provider_python.c @@ -67,7 +67,7 @@ static void _python_test(void) { if (chdir(edi_project_get()) == 0) - edi_exe_notify("edi_build", "./setup.py test"); + edi_exe_notify("edi_test", "./setup.py test"); } static void @@ -81,7 +81,7 @@ static void _python_clean(void) { if (chdir(edi_project_get()) == 0) - edi_exe_notify("edi_build", "./setup.py clean --all"); + edi_exe_notify("edi_clean", "./setup.py clean --all"); } Edi_Build_Provider _edi_build_provider_python = diff --git a/src/lib/edi_exe.c b/src/lib/edi_exe.c index 4cdd199..caccfb9 100644 --- a/src/lib/edi_exe.c +++ b/src/lib/edi_exe.c @@ -16,8 +16,6 @@ typedef struct _Edi_Exe_Args { Ecore_Event_Handler *handler; } Edi_Exe_Args; -static Eina_Bool _edi_exe_in_progress = EINA_FALSE; - static Eina_Bool _edi_exe_notify_data_cb(void *data, int type EINA_UNUSED, void *event EINA_UNUSED) { @@ -28,12 +26,10 @@ _edi_exe_notify_data_cb(void *data, int type EINA_UNUSED, void *event EINA_UNUSE status = ev->data; args = data; + ecore_event_handler_del(args->handler); args->func(*status, args->data); - ecore_event_handler_del(args->handler); - args->handler = NULL; - free(args); return ECORE_CALLBACK_DONE; @@ -83,8 +79,6 @@ _edi_exe_event_done_cb(void *data EINA_UNUSED, int type EINA_UNUSED, void *event free(args); - _edi_exe_in_progress = EINA_FALSE; - return ECORE_CALLBACK_DONE; } @@ -93,11 +87,6 @@ edi_exe_notify(const char *name, const char *command) { Edi_Exe_Args *args; - if (_edi_exe_in_progress) - return; - - _edi_exe_in_progress = EINA_TRUE; - ecore_exe_pipe_run(command, ECORE_EXE_PIPE_READ_LINE_BUFFERED | ECORE_EXE_PIPE_READ | ECORE_EXE_PIPE_ERROR_LINE_BUFFERED | ECORE_EXE_PIPE_ERROR | --
