ajwillia-ms pushed a commit to branch master.

http://git.enlightenment.org/tools/edi.git/commit/?id=4edcc6ba160cc1c1271d78f21688a0d6ac95c2d2

commit 4edcc6ba160cc1c1271d78f21688a0d6ac95c2d2
Author: Andy Williams <[email protected]>
Date:   Mon Feb 2 22:07:02 2015 +0000

    A working skeleton processor built into EDI, no scripts needed
---
 data/extra/Makefile.am                             |   1 -
 data/extra/skeleton/eflproject/AUTHORS             |   3 +-
 .../eflproject/data/desktop/${edi_name}.desktop.in |   2 +-
 .../extra/skeleton/eflproject/doc/${edi_name}.1.in |   4 +-
 .../eflproject/packaging/pkgbuild/PKGBUILD         |   4 +-
 .../eflproject/packaging/slackware/slack-desc      |   6 +-
 .../skeleton/eflproject/src/bin/${edi_name}_main.c |   6 +-
 .../src/lib/{${EDI_NAME}.h => ${Edi_Name}.h}       |  22 +--
 .../skeleton/eflproject/src/lib/${edi_name}.c      |   4 +-
 data/extra/skeleton/eflproject/src/lib/Makefile.am |   6 +-
 .../eflproject/src/tests/test_${edi_name}.c        |   6 +-
 src/bin/edi_build_main.c                           |   7 +-
 src/bin/welcome/edi_welcome.c                      |  38 +++-
 src/lib/Edi.h                                      |   1 +
 src/lib/edi_create.c                               | 202 ++++++++++++++++++---
 src/lib/edi_create.h                               |   7 +-
 16 files changed, 257 insertions(+), 62 deletions(-)

diff --git a/data/extra/Makefile.am b/data/extra/Makefile.am
index 0032b03..f7932b2 100644
--- a/data/extra/Makefile.am
+++ b/data/extra/Makefile.am
@@ -9,5 +9,4 @@ install-data-hook:
 uninstall-local:
        rm -rf $(skeletondir)/skeleton
 
-
 EXTRA_DIST = $(skeleton_DATA)
diff --git a/data/extra/skeleton/eflproject/AUTHORS 
b/data/extra/skeleton/eflproject/AUTHORS
index c51bc99..60436d3 100644
--- a/data/extra/skeleton/eflproject/AUTHORS
+++ b/data/extra/skeleton/eflproject/AUTHORS
@@ -1,2 +1 @@
-${EDI_USER} <${EDI_EMAIL}> 
-
+${Edi_User} <${Edi_Email}>
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 e005207..a87b6d7 100644
--- a/data/extra/skeleton/eflproject/data/desktop/${edi_name}.desktop.in
+++ b/data/extra/skeleton/eflproject/data/desktop/${edi_name}.desktop.in
@@ -5,7 +5,7 @@ Type=Application
 Name=@PACKAGE_NAME@
 Name[fr]=@PACKAGE_NAME@
 GenericName=Efl Application Skeletion
-Comment=Efl Application ${EDI_NAME}
+Comment=Efl Application ${Edi_Name}
 Icon=@PACKAGE_NAME@
 TryExec=@PACKAGE_NAME@
 Exec=@PACKAGE_NAME@
diff --git a/data/extra/skeleton/eflproject/doc/${edi_name}.1.in 
b/data/extra/skeleton/eflproject/doc/${edi_name}.1.in
index d7cafa9..0e3e367 100644
--- a/data/extra/skeleton/eflproject/doc/${edi_name}.1.in
+++ b/data/extra/skeleton/eflproject/doc/${edi_name}.1.in
@@ -9,7 +9,7 @@ ${edi_name} \- a demo application
 
 .SH DESCRIPTION
 
-${EDI_NAME} is a demo application to show how to integrate EFL and autotools 
into a
+${Edi_Name} is a demo application to show how to integrate EFL and autotools 
into a
 cross platform build. You should be able to generate an executable easily for 
all
 target supported by EFL with this ${edi_name}.
 
@@ -47,4 +47,4 @@ http://enlightenment.org
 
 .SH AUTHORS
 
-${EDI_USER} <${EDI_EMAIL}> and various contributors.
+${Edi_User} <${Edi_Email}> and various contributors.
diff --git a/data/extra/skeleton/eflproject/packaging/pkgbuild/PKGBUILD 
b/data/extra/skeleton/eflproject/packaging/pkgbuild/PKGBUILD
index ddcc9ab..4183aca 100644
--- a/data/extra/skeleton/eflproject/packaging/pkgbuild/PKGBUILD
+++ b/data/extra/skeleton/eflproject/packaging/pkgbuild/PKGBUILD
@@ -4,7 +4,7 @@ pkgver=1.8.99.8967.a1cfce6
 pkgrel=1
 pkgdesc="Enlightenment toolkit ${edi_name} - GIT development snapshot"
 arch=('i686' 'x86_64' 'arm')
-url="http://${EDI_WWW}";
+url="http://${Edi_Url}";
 license=('WTFPL')
 makedepends=('doxygen' 'imagemagick' 'git')
 depends=('elementary-git')
@@ -49,7 +49,7 @@ package_${edi_name}-git() {
 }
 
 package_${edi_name}_doc-git() {
-  pkgdesc="Documentation for ${EDI_NAME}"
+  pkgdesc="Documentation for ${Edi_Name}"
   arch=('any')
   unset depends optdepends
 
diff --git a/data/extra/skeleton/eflproject/packaging/slackware/slack-desc 
b/data/extra/skeleton/eflproject/packaging/slackware/slack-desc
index f5aef32..96d1280 100644
--- a/data/extra/skeleton/eflproject/packaging/slackware/slack-desc
+++ b/data/extra/skeleton/eflproject/packaging/slackware/slack-desc
@@ -8,12 +8,12 @@
         
|-----handy-ruler------------------------------------------------------|
 ${edi_name}: ${edi_name}
 ${edi_name}:
-${edi_name}: ${EDI_NAME} is an example of application written using the 
Enlightenment
+${edi_name}: ${Edi_Name} is an example of application written using the 
Enlightenment
 ${edi_name}: Foundation Libraries.
 ${edi_name}: 
 ${edi_name}: It requires elementary.
 ${edi_name}:
-${edi_name}: ${edi_name} was written by ${EDI_USER} <${EDI_EMAIL}>
-${edi_name}: website: <http://${EDI_WWW}/>
+${edi_name}: ${edi_name} was written by ${Edi_User} <${Edi_Email}>
+${edi_name}: website: <http://${Edi_Url}/>
 ${edi_name}:
 ${edi_name}:
diff --git a/data/extra/skeleton/eflproject/src/bin/${edi_name}_main.c 
b/data/extra/skeleton/eflproject/src/bin/${edi_name}_main.c
index df3dfdb..d268cb6 100644
--- a/data/extra/skeleton/eflproject/src/bin/${edi_name}_main.c
+++ b/data/extra/skeleton/eflproject/src/bin/${edi_name}_main.c
@@ -11,11 +11,11 @@
 
 #include "gettext.h"
 
-#include "${EDI_NAME}.h"
+#include "${Edi_Name}.h"
 
 #include "${edi_name}_private.h"
 
-#define COPYRIGHT "Copyright © ${EDI_YEAR} ${EDI_USER} <${EDI_EMAIL}> and 
various contributors (see AUTHORS)."
+#define COPYRIGHT "Copyright © ${Edi_Year} ${Edi_User} <${Edi_Email}> and 
various contributors (see AUTHORS)."
 
 static void
 _${edi_name}_win_del(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, 
void *event_info EINA_UNUSED)
@@ -29,7 +29,7 @@ ${edi_name}_win_setup(void)
    Evas_Object *win;
    Evas_Object *label;
 
-   win = elm_win_util_standard_add("main", "${EDI_NAME}");
+   win = elm_win_util_standard_add("main", "${Edi_Name}");
    if (!win) return NULL;
 
    elm_win_focus_highlight_enabled_set(win, EINA_TRUE);
diff --git a/data/extra/skeleton/eflproject/src/lib/${EDI_NAME}.h 
b/data/extra/skeleton/eflproject/src/lib/${Edi_Name}.h
similarity index 74%
rename from data/extra/skeleton/eflproject/src/lib/${EDI_NAME}.h
rename to data/extra/skeleton/eflproject/src/lib/${Edi_Name}.h
index 6cb5277..0809238 100644
--- a/data/extra/skeleton/eflproject/src/lib/${EDI_NAME}.h
+++ b/data/extra/skeleton/eflproject/src/lib/${Edi_Name}.h
@@ -35,7 +35,7 @@ extern "C" {
 
 /**
  * @file
- * @brief These routines are used for ${EDI_NAME} library interaction.
+ * @brief These routines are used for ${Edi_Name} library interaction.
  */
 
 /**
@@ -47,20 +47,20 @@ extern "C" {
  * Functions of obligatory usage, handling proper initialization
  * and shutdown routines.
  *
- * Before the usage of any other function, ${EDI_NAME} should be properly
- * initialized with @ref ${edi_name}_init() and the last call to ${EDI_NAME}'s
+ * Before the usage of any other function, ${Edi_Name} should be properly
+ * initialized with @ref ${edi_name}_init() and the last call to ${Edi_Name}'s
  * functions should be @ref ${edi_name}_shutdown(), so everything will
  * be correctly freed.
  *
- * ${EDI_NAME} logs everything with Eina Log, using the "${edi_name}" log 
domain.
+ * ${Edi_Name} logs everything with Eina Log, using the "${edi_name}" log 
domain.
  *
  */
 
 /**
- * Initialize ${EDI_NAME}.
+ * Initialize ${Edi_Name}.
  *
- * Initializes ${EDI_NAME}, its dependencies and modules. Should be the first
- * function of ${EDI_NAME} to be called.
+ * Initializes ${Edi_Name}, its dependencies and modules. Should be the first
+ * function of ${Edi_Name} to be called.
  *
  * @return The init counter value.
  *
@@ -71,12 +71,12 @@ extern "C" {
 EAPI int ${edi_name}_init(void);
 
 /**
- * Shutdown ${EDI_NAME}
+ * Shutdown ${Edi_Name}
  *
- * Shutdown ${EDI_NAME}. If init count reaches 0, all the internal structures 
will
- * be freed. Any ${EDI_NAME} library call after this point will leads to an 
error.
+ * Shutdown ${Edi_Name}. If init count reaches 0, all the internal structures 
will
+ * be freed. Any ${Edi_Name} library call after this point will leads to an 
error.
  *
- * @return ${EDI_NAME}'s init counter value.
+ * @return ${Edi_Name}'s init counter value.
  *
  * @see ${edi_name}_init().
  *
diff --git a/data/extra/skeleton/eflproject/src/lib/${edi_name}.c 
b/data/extra/skeleton/eflproject/src/lib/${edi_name}.c
index 02c739d..f2bfeb3 100644
--- a/data/extra/skeleton/eflproject/src/lib/${edi_name}.c
+++ b/data/extra/skeleton/eflproject/src/lib/${edi_name}.c
@@ -2,7 +2,7 @@
 # include "config.h"
 #endif
 
-#include "${EDI_NAME}.h"
+#include "${Edi_Name}.h"
 
 #include "${edi_name}_private.h"
 
@@ -20,7 +20,7 @@ ${edi_name}_init(void)
    _${edi_name}_lib_log_dom = eina_log_domain_register("${edi_name}", 
EINA_COLOR_CYAN);
    if (_${edi_name}_lib_log_dom < 0)
      {
-       EINA_LOG_ERR("${EDI_NAME} can not create its log domain.");
+       EINA_LOG_ERR("${Edi_Name} can not create its log domain.");
        goto shutdown_eina;
      }
 
diff --git a/data/extra/skeleton/eflproject/src/lib/Makefile.am 
b/data/extra/skeleton/eflproject/src/lib/Makefile.am
index 39e772c..eea9995 100644
--- a/data/extra/skeleton/eflproject/src/lib/Makefile.am
+++ b/data/extra/skeleton/eflproject/src/lib/Makefile.am
@@ -6,13 +6,13 @@ AM_CPPFLAGS = \
 -DPACKAGE_LIB_DIR=\"$(libdir)\" \
 -DPACKAGE_DATA_DIR=\"$(datadir)/$(PACKAGE)\" \
 @EFL_CFLAGS@ \
--DEFL_EFL_BUILD
+-DEFL_${EDI_NAME}_BUILD
 
 lib_LTLIBRARIES = lib${edi_name}.la
 
-includes_HEADERS = ${EDI_NAME}.h
+includes_HEADERS = ${Edi_Name}.h
 includesdir = $(includedir)/${edi_name}-@VMAJ@
 
 lib${edi_name}_la_SOURCES = ${edi_name}.c
 lib${edi_name}_la_LIBADD = @EFL_LIBS@ -lm
-lib${edi_name}_la_LDFLAGS = @EFL_LTLIBRARY_FLAGS@
+lib${edi_name}_la_LDFLAGS = -no-undefined @EFL_LTLIBRARY_FLAGS@
diff --git a/data/extra/skeleton/eflproject/src/tests/test_${edi_name}.c 
b/data/extra/skeleton/eflproject/src/tests/test_${edi_name}.c
index a5afe33..2927ea6 100644
--- a/data/extra/skeleton/eflproject/src/tests/test_${edi_name}.c
+++ b/data/extra/skeleton/eflproject/src/tests/test_${edi_name}.c
@@ -5,9 +5,9 @@
 #include <Ecore_Getopt.h>
 #include <check.h>
 
-#include "${EDI_NAME}.h"
+#include "${Edi_Name}.h"
 
-#define COPYRIGHT "Copyright © ${EDI_YEAR} ${EDI_USER} <${EDI_EMAIL}> and 
various contributors (see AUTHORS)."
+#define COPYRIGHT "Copyright © ${Edi_Year} ${Edi_User} <${Edi_Email}> and 
various contributors (see AUTHORS)."
 
 static void ${edi_name}_test_basic(TCase *tc);
 
@@ -96,7 +96,7 @@ main(int argc EINA_UNUSED, char **argv EINA_UNUSED)
        goto end;
      }
 
-   s = suite_create("${EDI_NAME}");
+   s = suite_create("${Edi_Name}");
 
    for (i = 0; i < sizeof (tests) / sizeof (tests[0]); i++)
      {
diff --git a/src/bin/edi_build_main.c b/src/bin/edi_build_main.c
index 893275c..b7fc63f 100644
--- a/src/bin/edi_build_main.c
+++ b/src/bin/edi_build_main.c
@@ -40,7 +40,7 @@ _exe_del(void *d EINA_UNUSED, int t EINA_UNUSED, void 
*event_info EINA_UNUSED)
 
 static const Ecore_Getopt optdesc = {
   "edi_build",
-  "%prog [options] [build-type]",
+  "%prog [options] [build|clean|create|test]",
   PACKAGE_VERSION,
   COPYRIGHT,
   "BSD with advertisement clause",
@@ -117,9 +117,12 @@ 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, test or 
clean.\n");
+        fprintf(stderr, "Unrecognised build type - try build, clean, create or 
test.\n");
         goto end;
      }
    ecore_main_loop_begin();
diff --git a/src/bin/welcome/edi_welcome.c b/src/bin/welcome/edi_welcome.c
index 43be047..63c5e2e 100644
--- a/src/bin/welcome/edi_welcome.c
+++ b/src/bin/welcome/edi_welcome.c
@@ -2,6 +2,9 @@
 # include "config.h"
 #endif
 
+#include <sys/types.h>
+#include <pwd.h>
+
 #include <Elementary.h>
 
 #include "edi_welcome.h"
@@ -218,7 +221,30 @@ _edi_welcome_project_new_create_cb(void *data EINA_UNUSED, 
Evas_Object *obj EINA
    user = elm_object_text_get(_create_inputs[3]);
    email = elm_object_text_get(_create_inputs[4]);
 
-   edi_create_project(path, name, url, user, email, 
_edi_welcome_project_new_create_done_cb);
+   edi_create_efl_project(path, name, url, user, email, 
_edi_welcome_project_new_create_done_cb);
+}
+
+static int
+_edi_welcome_user_fullname_get(const char *username, char *fullname, size_t 
max)
+{
+    struct passwd *p;
+    size_t n;
+
+    errno = 0;
+    p = getpwnam(username);
+    if (p == NULL && errno == 0)
+        return 0;
+    if (p == NULL)
+        return -1;
+
+    n = strcspn(p->pw_gecos, ",");
+    if (max == 0 || n <= 0)
+        return 0;
+    if (n > max - 1)
+        n = max - 1;
+    memcpy(fullname, p->pw_gecos, n);
+    fullname[n] = '\0';
+    return 1;
 }
 
 static void
@@ -227,17 +253,23 @@ _edi_welcome_project_new_cb(void *data, Evas_Object *obj 
EINA_UNUSED, void *even
    Evas_Object *content, *button, *naviframe = data;
    Elm_Object_Item *item;
    int row = 0;
+   char fullname[1024];
+   char *username;
 
    content = elm_table_add(naviframe);
    elm_table_homogeneous_set(content, EINA_TRUE);
    evas_object_size_hint_weight_set(content, EVAS_HINT_EXPAND, 
EVAS_HINT_EXPAND);
    evas_object_show(content);
 
+   username = getenv("USER");
    _edi_welcome_project_new_directory_row_add("Parent Path", NULL, row++, 
content);
    _edi_welcome_project_new_input_row_add("Project Name", NULL, row++, 
content);
    _edi_welcome_project_new_input_row_add("Project URL", NULL, row++, content);
-   _edi_welcome_project_new_input_row_add("Username", getenv("USER"), row++, 
content);
-   _edi_welcome_project_new_input_row_add("Email", NULL, row++, content);
+   if (_edi_welcome_user_fullname_get(username, fullname, 1024) > 0)
+      _edi_welcome_project_new_input_row_add("Creator Name", fullname, row++, 
content);
+   else
+      _edi_welcome_project_new_input_row_add("Creator Name", username, row++, 
content);
+   _edi_welcome_project_new_input_row_add("Creator Email", NULL, row++, 
content);
 
    button = elm_button_add(content);
    elm_object_text_set(button, "Create");
diff --git a/src/lib/Edi.h b/src/lib/Edi.h
index b1e5330..0b31cd2 100644
--- a/src/lib/Edi.h
+++ b/src/lib/Edi.h
@@ -3,6 +3,7 @@
 
 #include <Elementary.h>
 #include <Eina.h>
+#include <Eio.h>
 
 #ifdef EAPI
 # undef EAPI
diff --git a/src/lib/edi_create.c b/src/lib/edi_create.c
index 26dbfd6..d404b6c 100644
--- a/src/lib/edi_create.c
+++ b/src/lib/edi_create.c
@@ -6,6 +6,102 @@
 
 #include "edi_private.h"
 
+static Edi_Create *_edi_create_data;
+
+static const char *
+_edi_create_filter_variable(const char *text, const char *variable, const char 
*value)
+{
+   char *pos, *ret;
+   int copylen;
+
+   pos = strstr(text, variable);
+   if (!pos)
+     return strdup(text);
+
+   copylen = pos - text;
+   ret = malloc(sizeof(char) * (strlen(text) + strlen(value) - 
strlen(variable) + 1));
+
+   snprintf(ret, copylen + 1, text);
+   snprintf(ret + copylen, strlen(value) + 1, value);
+   snprintf(ret + copylen + strlen(value), strlen(text) - copylen - 
strlen(variable) + 1, text + copylen + strlen(variable));
+
+   return ret;
+}
+
+static const char *
+_edi_create_filter_name(const char *text, const char *name)
+{
+   char *lowername;
+   const char *filtered, *ret;
+
+   filtered = _edi_create_filter_variable(text, "${Edi_Name}", name);
+
+   lowername = strdup(name);
+   eina_str_tolower(&lowername);
+
+   ret = _edi_create_filter_variable(filtered, "${edi_name}", lowername);
+   free(lowername);
+   free((void *) filtered);
+
+   return ret;
+}
+
+static int
+_edi_create_year_get()
+{
+   time_t timeval;
+   struct tm *tp;
+
+   time (&timeval);
+   tp = gmtime(&timeval);
+
+   return tp->tm_year + 1900;
+}
+
+static void
+_edi_create_filter_file(Edi_Create *create, const char *path)
+{
+   char *cmd, *lowername, *uppername;
+   const char *template;
+   int length;
+
+// TODO speed this up - pre-cache this filter!
+   template = "sed -i 
\"s|\\${edi_name}|%s|g;s|\\${Edi_Name}|%s|g;s|\\${EDI_NAME}|%s|g;s|\\${Edi_User}|%s|ig;s|\\${Edi_Email}|%s|g;s|\\${Edi_Url}|$%s|g;s|\\${Edi_Year}|%d|g\"
 %s";
+   length = strlen(template) + (strlen(create->name) * 3)  + 
strlen(create->user) + strlen(create->email) + strlen(create->url) + 
strlen(path) + 4 - 16 + 1;
+
+   lowername = strdup(create->name);
+   eina_str_tolower(&lowername);
+   uppername = strdup(create->name);
+   eina_str_toupper(&uppername);
+
+   cmd = malloc(sizeof(char) * length);
+   snprintf(cmd, length, template, lowername, create->name, uppername , 
create->user, create->email, create->url, _edi_create_year_get(), path);
+
+   ecore_exe_run(cmd, NULL);
+   free(lowername);
+   free(uppername);
+   free(cmd);
+
+   // This matches the filtered path copy created in the copy callback
+   free((void *) path);
+}
+
+static void _edi_create_free_data()
+{
+   Edi_Create *create;
+
+   create = _edi_create_data;
+   _edi_create_data = NULL;
+
+   free(create->url);
+   free(create->user);
+   free(create->email);
+   free(create->name);
+   free(create->path);
+
+   free(create);
+}
+
 static Eina_Bool
 _edi_create_project_done(void *data, int type EINA_UNUSED, void *event 
EINA_UNUSED)
 {
@@ -15,40 +111,104 @@ _edi_create_project_done(void *data, int type 
EINA_UNUSED, void *event EINA_UNUS
 
    ecore_event_handler_del(create->handler); 
    create->callback(create->path, EINA_TRUE);
-   free(create->path);
-   free(data);
 
+   _edi_create_free_data();
    return ECORE_CALLBACK_DONE; // or ECORE_CALLBACK_PASS_ON
 }
 
+static void
+_edi_create_move_done_cb(void *data, Eio_File *file EINA_UNUSED)
+{
+   _edi_create_filter_file(_edi_create_data, (const char *) data);
+}
+
+static void
+_edi_create_move_error_cb(void *data, Eio_File *handler EINA_UNUSED, int error)
+{
+   fprintf(stderr, "move error for %s: [%s]\n", (char *) data, 
strerror(error));
+
+   // This matches the filtered path copy created in the copy callback
+   free(data);
+}
+
+static void
+_edi_create_notify_cb(void *d, Eio_File *handler EINA_UNUSED, const 
Eio_Progress *info)
+
+{
+   Edi_Create *data;
+   const char *filtered;
+
+   data = (Edi_Create *) d;
+
+   switch (info->op)
+     {
+        case EIO_FILE_COPY:
+          // this will get freed in the filter callback when it's done with
+          filtered = _edi_create_filter_name(info->dest, data->name);
+
+          if (strcmp(info->dest, filtered))
+            {
+               eio_file_move(info->dest, filtered, NULL, 
_edi_create_move_done_cb, _edi_create_move_error_cb, filtered);
+            }
+          else
+            {
+               _edi_create_filter_file(data, filtered);
+            }
+
+          break;
+        default:
+          break;
+     }
+}
+
+static void
+_edi_create_done_cb(void *d, Eio_File *file EINA_UNUSED)
+{
+   Edi_Create *data;
+   Ecore_Event_Handler *handler;
+
+   data = (Edi_Create *) d;
+
+   handler = ecore_event_handler_add(ECORE_EXE_EVENT_DEL, 
_edi_create_project_done, data); 
+   data->handler = handler;
+
+   chdir(data->path);
+   ecore_exe_run("git init && git add .", data);
+}
+
+
+static void
+_edi_create_error_cb(void *data EINA_UNUSED, Eio_File *handler EINA_UNUSED, 
int error)
+
+{
+   fprintf(stderr, "copy error: [%s]\n", strerror(error));
+   _edi_create_free_data();
+}
+
 EAPI void
-edi_create_project(const char *path, const char *name, const char *url,
+edi_create_efl_project(const char *parentdir, const char *name, const char 
*url,
                    const char *user, const char *email, Edi_Create_Cb func)
 {
-   char script[PATH_MAX], fullpath[PATH_MAX];
-   char *cmd;
-   int cmdlen;
+   char source[PATH_MAX], dest[PATH_MAX];
    Edi_Create *data;
-   Ecore_Event_Handler *handler;
+
+   snprintf(source, sizeof(source), "%s/skeleton/eflproject", 
elm_app_data_dir_get());
+   snprintf(dest, sizeof(dest), "%s/%s", parentdir, name);
+
+   INF("Creating project \"%s\" at path %s for %s<%s>\n", name, dest, user, 
email);
 
    data = calloc(1, sizeof(Edi_Create));
-   handler = ecore_event_handler_add(ECORE_EXE_EVENT_DEL, 
_edi_create_project_done, data); 
-   snprintf(script, sizeof(script), "%s/skeleton/eflprj", 
elm_app_data_dir_get()
-);
-   snprintf(fullpath, sizeof(fullpath), "%s/%s", path, name);
+   data->path = strdup(dest);
+   data->name = strdup(name);
 
-   data->path = strdup(fullpath);
+   data->url = strdup(url);
+   data->user = strdup(user);
+   data->email = strdup(email);
    data->callback = func;
-   data->handler = handler;
+   _edi_create_data = data;
 
-   cmdlen = strlen(script) + 19 + strlen(path) + strlen(name) + strlen(url) + 
strlen(user) + strlen(email);
-   cmd = malloc(sizeof(char) * cmdlen);
-   snprintf(cmd, cmdlen, "%s \"%s\" \"%s\" \"%s\" \"%s\" \"%s\"",
-            script, fullpath, name, user, email, url);
-
-   INF("Creating project \"%s\" at path %s for %s<%s>\n", name, fullpath, 
user, email);
-   ecore_exe_run(cmd, data);
-   free(cmd);
+   eio_dir_copy(source, dest, NULL, _edi_create_notify_cb, _edi_create_done_cb,
+                _edi_create_error_cb, data);
 }
 
 
diff --git a/src/lib/edi_create.h b/src/lib/edi_create.h
index 80c3eee..7800451 100644
--- a/src/lib/edi_create.h
+++ b/src/lib/edi_create.h
@@ -16,7 +16,8 @@ typedef void (*Edi_Create_Cb)(const char *path, Eina_Bool 
success);
 
 typedef struct _Edi_Create
 {
-   char *path;
+   char *path, *name;
+   char *url, *user, *email;
 
    Edi_Create_Cb callback;
    Ecore_Event_Handler *handler;
@@ -38,8 +39,8 @@ typedef struct _Edi_Create
  * @ingroup Creation
  */
 EAPI void
-edi_create_project(const char *path, const char *name, const char *url,        
 
-                   const char *user, const char *email, Edi_Create_Cb func);
+edi_create_efl_project(const char *parentdir, const char *name, const char 
*url,
+                       const char *user, const char *email, Edi_Create_Cb 
func);
 
 /**
  * @}

-- 


Reply via email to