ajwillia-ms pushed a commit to branch master. http://git.enlightenment.org/tools/edi.git/commit/?id=b333e47c248566c9e6e03a0778a67da4ff22deef
commit b333e47c248566c9e6e03a0778a67da4ff22deef Author: Andy Williams <a...@andywilliams.me> Date: Tue Feb 3 22:31:17 2015 +0000 Provide project creation through the edi_build command line app --- .../eflproject/data/desktop/${edi_name}.desktop.in | 2 +- src/bin/edi_build_main.c | 48 +++++++++++++++++++--- src/lib/edi_create.c | 14 +++++-- 3 files changed, 54 insertions(+), 10 deletions(-) diff --git a/data/extra/skeleton/eflproject/data/desktop/${edi_name}.desktop.in b/data/extra/skeleton/eflproject/data/desktop/${edi_name}.desktop.in index a87b6d7..c54a32b 100644 --- a/data/extra/skeleton/eflproject/data/desktop/${edi_name}.desktop.in +++ b/data/extra/skeleton/eflproject/data/desktop/${edi_name}.desktop.in @@ -4,7 +4,7 @@ Version=@VERSION@ Type=Application Name=@PACKAGE_NAME@ Name[fr]=@PACKAGE_NAME@ -GenericName=Efl Application Skeletion +GenericName=${Edi_Name} Comment=Efl Application ${Edi_Name} Icon=@PACKAGE_NAME@ TryExec=@PACKAGE_NAME@ diff --git a/src/bin/edi_build_main.c b/src/bin/edi_build_main.c index b7fc63f..cfbe577 100644 --- a/src/bin/edi_build_main.c +++ b/src/bin/edi_build_main.c @@ -17,6 +17,8 @@ #define COPYRIGHT "Copyright © 2014 Andy Williams <a...@andyilliams.me> and various contributors (see AUTHORS)." +static int _exit_code; + static Eina_Bool _exe_data(void *d EINA_UNUSED, int t EINA_UNUSED, void *event_info) { @@ -55,8 +57,31 @@ static const Ecore_Getopt optdesc = { } }; +static void +_edi_build_create_done_cb(const char *path, Eina_Bool success) +{ + if (success) + fprintf(stdout, "Project created at path %s\n", path); + else + { + fprintf(stderr, "Unable to create project at path %s\n", path); + _exit_code = EXIT_FAILURE; + } + + ecore_main_loop_quit(); + elm_shutdown(); +} + +static void +_edi_build_create_start(int argc, int arg0, char **argv) +{ + elm_init(argc, argv); + edi_create_efl_project(argv[arg0+1], argv[arg0+2], argv[arg0+3], argv[arg0+4], argv[arg0+5], + _edi_build_create_done_cb); +} + EAPI_MAIN int -main(int argc EINA_UNUSED, char **argv EINA_UNUSED) +main(int argc, char **argv) { int args; char path[PATH_MAX], *build_type = NULL; @@ -77,6 +102,7 @@ main(int argc EINA_UNUSED, char **argv EINA_UNUSED) textdomain(PACKAGE); #endif + _exit_code = EXIT_SUCCESS; if (!ecore_init()) goto exit; edi_init(); @@ -107,6 +133,21 @@ main(int argc EINA_UNUSED, char **argv EINA_UNUSED) if (!build_type) build_type = "build"; + if (!strncmp("create", build_type, 6)) + { + if (argc - args != 6) + { + fprintf(stderr, "create requires 5 additional parameters:\n"); + fprintf(stderr, " parent_path, project_name, project_url, creator_name, creator_email\n"); + goto end; + } + + _edi_build_create_start(argc, args, argv); + + ecore_main_loop_begin(); + goto end; + } + ecore_event_handler_add(ECORE_EXE_EVENT_DATA, _exe_data, NULL); ecore_event_handler_add(ECORE_EXE_EVENT_ERROR, _exe_data, NULL); ecore_event_handler_add(ECORE_EXE_EVENT_DEL, _exe_del, NULL); @@ -117,9 +158,6 @@ main(int argc EINA_UNUSED, char **argv EINA_UNUSED) edi_builder_test(); else if (!strncmp("build", build_type, 5)) edi_builder_build(); - else if (!strncmp("create", build_type, 6)) -fprintf(stderr, "cannot yet make projects on command line"); -// edi_create_efl_project(...); else { fprintf(stderr, "Unrecognised build type - try build, clean, create or test.\n"); @@ -130,7 +168,7 @@ fprintf(stderr, "cannot yet make projects on command line"); end: edi_shutdown(); ecore_shutdown(); - return EXIT_SUCCESS; + return _exit_code; exit: return EXIT_FAILURE; diff --git a/src/lib/edi_create.c b/src/lib/edi_create.c index 3ba1be4..a961591 100644 --- a/src/lib/edi_create.c +++ b/src/lib/edi_create.c @@ -192,10 +192,14 @@ _edi_create_notify_cb(void *d, Eio_File *handler EINA_UNUSED, const Eio_Progress } static void -_edi_create_error_cb(void *data EINA_UNUSED, Eio_File *handler EINA_UNUSED, int error) - +_edi_create_error_cb(void *data, Eio_File *handler EINA_UNUSED, int error) { + Edi_Create *create; + + create = (Edi_Create *) data; fprintf(stderr, "copy error: [%s]\n", strerror(error)); + create->callback(create->path, EINA_FALSE); + _edi_create_free_data(); } @@ -203,14 +207,16 @@ EAPI void edi_create_efl_project(const char *parentdir, const char *name, const char *url, const char *user, const char *email, Edi_Create_Cb func) { - char source[PATH_MAX], dest[PATH_MAX]; + char *source; + char dest[PATH_MAX]; Edi_Create *data; Ecore_Event_Handler *handler; - snprintf(source, sizeof(source), "%s/skeleton/eflproject", elm_app_data_dir_get()); + source = PACKAGE_DATA_DIR "/skeleton/eflproject"; snprintf(dest, sizeof(dest), "%s/%s", parentdir, name); INF("Creating project \"%s\" at path %s for %s<%s>\n", name, dest, user, email); + DBG("Extracting project files from %s\n", source); data = calloc(1, sizeof(Edi_Create)); data->path = strdup(dest); --