scm: refactor of scm

This commit is contained in:
Al Poole 2017-12-28 23:44:28 +00:00
parent 33556aeae2
commit d603f4bf3d
5 changed files with 157 additions and 173 deletions

View File

@ -15,18 +15,24 @@ static void
_win_title_set(Evas_Object *win)
{
Eina_Strbuf *title;
char *workdir;
const char *directory;
char *project_root;
Edi_Scm_Engine *e = edi_scm_engine_get();
if (!e)
exit(1 << 1);
workdir = _edi_scm_ui_workdir_get();
if (!workdir)
workdir = getcwd(NULL, PATH_MAX);
directory = edi_scm_root_directory_get();
if (!directory)
project_root = getcwd(NULL, PATH_MAX);
else
project_root = strdup(ecore_file_file_get(directory));
title = eina_strbuf_new();
eina_strbuf_append_printf(title, "Edi Source Control :: %s", workdir);
eina_strbuf_append_printf(title, "Edi Source Control :: %s", project_root);
elm_win_title_set(win, eina_strbuf_string_get(title));
eina_strbuf_free(title);
free(workdir);
free(project_root);
}
static Evas_Object *

View File

@ -9,7 +9,7 @@
#define DEFAULT_USER_ICON "applications-development"
typedef struct _Edi_Scm_Ui {
typedef struct _Edi_Scm_Ui_Data {
Ecore_Thread *thread;
Eio_Monitor *monitor;
Elm_Code *code;
@ -26,7 +26,7 @@ typedef struct _Edi_Scm_Ui {
Evas_Object *commit_button;
Evas_Object *commit_entry;
} Edi_Scm_Ui;
} Edi_Scm_Ui_Data;
const char *
_edi_scm_ui_avatar_cache_path_get(const char *email)
@ -36,7 +36,7 @@ _edi_scm_ui_avatar_cache_path_get(const char *email)
}
void _edi_scm_ui_screens_avatar_download_complete(void *data, const char *file,
int status)
int status)
{
Evas_Object *image = data;
@ -84,8 +84,8 @@ _edi_scm_ui_screens_avatar_load(Evas_Object *image, const char *email)
static void
_edi_scm_ui_screens_message_close_cb(void *data EINA_UNUSED,
Evas_Object *obj EINA_UNUSED,
void *event_info EINA_UNUSED)
Evas_Object *obj EINA_UNUSED,
void *event_info EINA_UNUSED)
{
Evas_Object *popup = data;
@ -112,32 +112,32 @@ _edi_scm_ui_screens_message_open(Evas_Object *parent, const char *message)
static void
_edi_scm_ui_screens_cancel_cb(void *data, Evas_Object *obj EINA_UNUSED,
void *event_info EINA_UNUSED)
void *event_info EINA_UNUSED)
{
Edi_Scm_Ui *edi_scm = data;
Edi_Scm_Ui_Data *pd = data;
if (edi_scm->thread)
ecore_thread_cancel(edi_scm->thread);
if (pd->thread)
ecore_thread_cancel(pd->thread);
while ((ecore_thread_wait(edi_scm->thread, 0.1)) != EINA_TRUE);
while ((ecore_thread_wait(pd->thread, 0.1)) != EINA_TRUE);
evas_object_del(edi_scm->parent);
evas_object_del(pd->parent);
if (edi_scm->monitor)
eio_monitor_del(edi_scm->monitor);
if (pd->monitor)
eio_monitor_del(pd->monitor);
free(edi_scm);
free(pd);
elm_exit();
}
static void
_edi_scm_ui_screens_commit_cb(void *data,
Evas_Object *obj EINA_UNUSED,
void *event_info EINA_UNUSED)
Evas_Object *obj EINA_UNUSED,
void *event_info EINA_UNUSED)
{
Edi_Scm_Engine *engine;
Edi_Scm_Ui *edi_scm;
Edi_Scm_Ui_Data *pd;
const char *text;
char *message;
@ -145,11 +145,12 @@ _edi_scm_ui_screens_commit_cb(void *data,
if (!engine)
return;
edi_scm = data;
text = elm_object_text_get((Evas_Object *) edi_scm->commit_entry);
pd = data;
text = elm_object_text_get((Evas_Object *) pd->commit_entry);
if (!text || !text[0])
{
_edi_scm_ui_screens_message_open(edi_scm->parent, _("Please enter a valid commit message."));
_edi_scm_ui_screens_message_open(pd->parent, _("Please enter a valid commit message."));
return;
}
@ -158,17 +159,17 @@ _edi_scm_ui_screens_commit_cb(void *data,
free(message);
if (edi_scm->thread)
ecore_thread_cancel(edi_scm->thread);
if (pd->thread)
ecore_thread_cancel(pd->thread);
while ((ecore_thread_wait(edi_scm->thread, 0.1)) != EINA_TRUE);
while ((ecore_thread_wait(pd->thread, 0.1)) != EINA_TRUE);
evas_object_del(edi_scm->parent);
evas_object_del(pd->parent);
if (edi_scm->monitor)
eio_monitor_del(edi_scm->monitor);
if (pd->monitor)
eio_monitor_del(pd->monitor);
free(edi_scm);
free(pd);
elm_exit();
}
@ -316,14 +317,14 @@ _content_get(void *data, Evas_Object *obj, const char *source)
}
static Eina_Bool
_edi_scm_ui_status_list_fill(Edi_Scm_Ui *edi_scm)
_edi_scm_ui_status_list_fill(Edi_Scm_Ui_Data *pd)
{
Elm_Genlist_Item_Class *itc;
Edi_Scm_Status *status;
Edi_Scm_Engine *e;
Eina_List *l;
Eina_Bool staged = EINA_FALSE;
Evas_Object *list = edi_scm->list;
Evas_Object *list = pd->list;
e = edi_scm_engine_get();
if (!e)
@ -344,7 +345,7 @@ _edi_scm_ui_status_list_fill(Edi_Scm_Ui *edi_scm)
if (status->staged)
staged = EINA_TRUE;
if (edi_scm->results_max)
if (pd->results_max)
{
elm_genlist_item_append(list, itc, status, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
}
@ -369,7 +370,7 @@ done:
}
static void
_entry_lines_append(Ecore_Thread *thread, Elm_Code *code, char *text)
_diff_widget_lines_append(Ecore_Thread *thread, Elm_Code *code, char *text)
{
char *pos = text;
char *start, *end = NULL;
@ -407,146 +408,104 @@ _entry_lines_append(Ecore_Thread *thread, Elm_Code *code, char *text)
static void
_edi_scm_diff_thread_cancel_cb(void *data, Ecore_Thread *thread EINA_UNUSED)
{
Edi_Scm_Ui *edi_scm = data;
Edi_Scm_Ui_Data *pd = data;
edi_scm->in_progress = EINA_FALSE;
edi_scm->thread = NULL;
pd->in_progress = EINA_FALSE;
pd->thread = NULL;
if (edi_scm->data)
if (pd->data)
{
free(edi_scm->data);
edi_scm->data = NULL;
free(pd->data);
pd->data = NULL;
}
}
static void
_edi_scm_diff_thread_end_cb(void *data, Ecore_Thread *thread EINA_UNUSED)
{
Edi_Scm_Ui *edi_scm = data;
Edi_Scm_Ui_Data *pd = data;
edi_scm->in_progress = EINA_FALSE;
edi_scm->thread = NULL;
pd->in_progress = EINA_FALSE;
pd->thread = NULL;
}
static void
_edi_scm_diff_thread_cb(void *data, Ecore_Thread *thread)
{
Edi_Scm_Ui *edi_scm = data;
Edi_Scm_Ui_Data *pd = data;
if (edi_scm->in_progress) return;
if (pd->in_progress) return;
edi_scm->data = edi_scm_diff(!edi_scm->results_max);
pd->data = edi_scm_diff(!pd->results_max);
edi_scm->in_progress = EINA_TRUE;
edi_scm->thread = thread;
pd->in_progress = EINA_TRUE;
pd->thread = thread;
_entry_lines_append(thread, edi_scm->code, edi_scm->data);
_diff_widget_lines_append(thread, pd->code, pd->data);
free(edi_scm->data);
edi_scm->data = NULL;
free(pd->data);
pd->data = NULL;
}
static void
_edi_scm_ui_refresh(Edi_Scm_Ui *edi_scm)
_edi_scm_ui_refresh(Edi_Scm_Ui_Data *pd)
{
Eina_Bool staged;
edi_scm->results_max = elm_check_state_get(edi_scm->check);
pd->results_max = elm_check_state_get(pd->check);
elm_genlist_clear(edi_scm->list);
elm_genlist_clear(pd->list);
elm_code_file_clear(edi_scm->code->file);
elm_code_file_clear(pd->code->file);
staged = _edi_scm_ui_status_list_fill(edi_scm);
staged = _edi_scm_ui_status_list_fill(pd);
if (!edi_scm->is_configured)
if (!pd->is_configured)
{
elm_object_disabled_set(edi_scm->commit_button, EINA_TRUE);
elm_entry_editable_set(edi_scm->commit_entry, EINA_FALSE);
elm_object_disabled_set(pd->commit_button, EINA_TRUE);
elm_entry_editable_set(pd->commit_entry, EINA_FALSE);
}
else
{
elm_object_disabled_set(edi_scm->commit_button, !staged);
elm_entry_editable_set(edi_scm->commit_entry, staged);
elm_object_disabled_set(pd->commit_button, !staged);
elm_entry_editable_set(pd->commit_entry, staged);
}
elm_genlist_realized_items_update(edi_scm->list);
elm_genlist_realized_items_update(pd->list);
ecore_thread_run(_edi_scm_diff_thread_cb, _edi_scm_diff_thread_end_cb, _edi_scm_diff_thread_cancel_cb, edi_scm);
ecore_thread_run(_edi_scm_diff_thread_cb, _edi_scm_diff_thread_end_cb, _edi_scm_diff_thread_cancel_cb, pd);
}
static void
_edi_scm_ui_refresh_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
{
Edi_Scm_Ui *edi_scm = data;
Edi_Scm_Ui_Data *pd = data;
if (edi_scm->thread)
ecore_thread_cancel(edi_scm->thread);
if (pd->thread)
ecore_thread_cancel(pd->thread);
while ((ecore_thread_wait(edi_scm->thread, 0.1)) != EINA_TRUE);
while ((ecore_thread_wait(pd->thread, 0.1)) != EINA_TRUE);
if (edi_scm->data)
if (pd->data)
{
free(edi_scm->data);
edi_scm->data = NULL;
free(pd->data);
pd->data = NULL;
}
_edi_scm_ui_refresh(edi_scm);
_edi_scm_ui_refresh(pd);
}
static Eina_Bool
_edi_scm_ui_file_changes_cb(void *data EINA_UNUSED, int type EINA_UNUSED,
void *event EINA_UNUSED)
void *event EINA_UNUSED)
{
Edi_Scm_Ui *edi_scm = data;
Edi_Scm_Ui_Data *pd = data;
_edi_scm_ui_refresh(edi_scm);
_edi_scm_ui_refresh(pd);
return ECORE_CALLBACK_DONE;
}
char *
_edi_scm_ui_workdir_get(void)
{
Edi_Scm_Engine *engine;
char *directory, *workdir, *path, *tmp;
engine = edi_scm_engine_get();
if (!engine)
exit(1 << 1);
tmp = path = workdir = NULL;
directory = strdup(engine->workdir);
while (directory)
{
path = edi_path_append(directory, engine->directory);
if (ecore_file_exists(path) && ecore_file_is_dir(path))
{
if (!strcmp(directory, "/"))
workdir = strdup(directory);
else
workdir = strdup(ecore_file_file_get(directory));
break;
}
tmp = ecore_file_dir_get(directory);
free(directory);
directory = tmp;
free(path);
path = NULL;
}
if (path)
free(path);
if (directory)
free(directory);
return workdir;
}
static void
_item_menu_dismissed_cb(void *data EINA_UNUSED, Evas_Object *obj,
void *ev EINA_UNUSED)
@ -556,53 +515,53 @@ _item_menu_dismissed_cb(void *data EINA_UNUSED, Evas_Object *obj,
static void
_item_menu_scm_stage_cb(void *data, Evas_Object *obj,
void *event_info EINA_UNUSED)
void *event_info EINA_UNUSED)
{
Edi_Scm_Status *status;
Edi_Scm_Ui *edi_scm = evas_object_data_get(obj, "edi_scm_ui");
Edi_Scm_Ui_Data *pd = evas_object_data_get(obj, "edi_scm_ui");
status = data;
edi_scm_stage(status->path);
_edi_scm_ui_refresh(edi_scm);
_edi_scm_ui_refresh(pd);
}
static void
_item_menu_scm_unstage_cb(void *data, Evas_Object *obj,
void *event_info EINA_UNUSED)
void *event_info EINA_UNUSED)
{
Edi_Scm_Status *status;
Edi_Scm_Ui *edi_scm = evas_object_data_get(obj, "edi_scm_ui");
Edi_Scm_Ui_Data *pd = evas_object_data_get(obj, "edi_scm_ui");
status = data;
edi_scm_unstage(status->path);
_edi_scm_ui_refresh(edi_scm);
_edi_scm_ui_refresh(pd);
}
static void
_item_menu_scm_staged_toggle(Edi_Scm_Status *status, Edi_Scm_Ui *edi_scm)
_item_menu_scm_staged_toggle(Edi_Scm_Status *status, Edi_Scm_Ui_Data *pd)
{
if (status->staged)
edi_scm_unstage(status->path);
else
edi_scm_stage(status->path);
_edi_scm_ui_refresh(edi_scm);
_edi_scm_ui_refresh(pd);
}
static Evas_Object *
_item_menu_create(Edi_Scm_Ui *edi_scm, Edi_Scm_Status *status)
_item_menu_create(Edi_Scm_Ui_Data *pd, Edi_Scm_Status *status)
{
Evas_Object *menu, *parent;
Elm_Object_Item *menu_it;
parent = edi_scm->parent;
parent = pd->parent;
menu = elm_menu_add(parent);
evas_object_data_set(menu, "edi_scm_ui", edi_scm);
evas_object_data_set(menu, "edi_scm_ui", pd);
evas_object_smart_callback_add(menu, "dismissed", _item_menu_dismissed_cb, NULL);
menu_it = elm_menu_item_add(menu, NULL, "document-properties", basename((char *)status->path), NULL, NULL);
@ -622,13 +581,13 @@ _item_menu_create(Edi_Scm_Ui *edi_scm, Edi_Scm_Status *status)
static void
_list_item_clicked_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj,
void *event_info)
void *event_info)
{
Evas_Object *menu;
Evas_Event_Mouse_Up *ev;
Elm_Object_Item *it;
Edi_Scm_Status *status;
Edi_Scm_Ui *edi_scm = data;
Edi_Scm_Ui_Data *pd = data;
ev = event_info;
it = elm_genlist_at_xy_item_get(obj, ev->output.x, ev->output.y, NULL);
@ -640,11 +599,11 @@ _list_item_clicked_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj,
if (ev->button != 3)
{
if (ev->button == 1 && ev->flags & EVAS_BUTTON_DOUBLE_CLICK)
_item_menu_scm_staged_toggle(status, edi_scm);
_item_menu_scm_staged_toggle(status, pd);
return;
}
menu = _item_menu_create(edi_scm, status);
menu = _item_menu_create(pd, status);
elm_menu_move(menu, ev->canvas.x, ev->canvas.y);
evas_object_show(menu);
}
@ -658,7 +617,7 @@ edi_scm_ui_add(Evas_Object *parent)
Elm_Code *code;
Eina_Strbuf *string;
Edi_Scm_Engine *engine;
Edi_Scm_Ui *edi_scm;
Edi_Scm_Ui_Data *pd;
const char *remote_name, *remote_email;
Eina_Bool staged_changes;
@ -666,18 +625,18 @@ edi_scm_ui_add(Evas_Object *parent)
if (!engine)
exit(1 << 1);
edi_scm = calloc(1, sizeof(Edi_Scm_Ui));
edi_scm->workdir = engine->workdir;
edi_scm->monitor = eio_monitor_add(edi_scm->workdir);
edi_scm->parent = parent;
edi_scm->results_max = isatty(fileno(stdin));
pd = calloc(1, sizeof(Edi_Scm_Ui_Data));
pd->workdir = engine->root_directory;
pd->monitor = eio_monitor_add(pd->workdir);
pd->parent = parent;
pd->results_max = isatty(fileno(stdin));
ecore_event_handler_add(EIO_MONITOR_FILE_CREATED, _edi_scm_ui_file_changes_cb, edi_scm);
ecore_event_handler_add(EIO_MONITOR_FILE_MODIFIED, _edi_scm_ui_file_changes_cb, edi_scm);
ecore_event_handler_add(EIO_MONITOR_FILE_DELETED, _edi_scm_ui_file_changes_cb, edi_scm);
ecore_event_handler_add(EIO_MONITOR_DIRECTORY_CREATED, _edi_scm_ui_file_changes_cb, edi_scm);
ecore_event_handler_add(EIO_MONITOR_DIRECTORY_MODIFIED, _edi_scm_ui_file_changes_cb, edi_scm);
ecore_event_handler_add(EIO_MONITOR_DIRECTORY_DELETED, _edi_scm_ui_file_changes_cb, edi_scm);
ecore_event_handler_add(EIO_MONITOR_FILE_CREATED, _edi_scm_ui_file_changes_cb, pd);
ecore_event_handler_add(EIO_MONITOR_FILE_MODIFIED, _edi_scm_ui_file_changes_cb, pd);
ecore_event_handler_add(EIO_MONITOR_FILE_DELETED, _edi_scm_ui_file_changes_cb, pd);
ecore_event_handler_add(EIO_MONITOR_DIRECTORY_CREATED, _edi_scm_ui_file_changes_cb, pd);
ecore_event_handler_add(EIO_MONITOR_DIRECTORY_MODIFIED, _edi_scm_ui_file_changes_cb, pd);
ecore_event_handler_add(EIO_MONITOR_DIRECTORY_DELETED, _edi_scm_ui_file_changes_cb, pd);
box = elm_box_add(parent);
elm_box_horizontal_set(box, EINA_FALSE);
@ -698,7 +657,11 @@ edi_scm_ui_add(Evas_Object *parent)
evas_object_size_hint_align_set(hbox, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_show(hbox);
remote_name = engine->remote_name_get();
remote_email = engine->remote_email_get();
avatar = elm_icon_add(parent);
evas_object_size_hint_min_set(avatar, 48 * elm_config_scale_get(), 48 * elm_config_scale_get());
evas_object_size_hint_weight_set(avatar, 0.1, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(avatar, 1.0, EVAS_HINT_FILL);
@ -720,14 +683,11 @@ edi_scm_ui_add(Evas_Object *parent)
evas_object_show(pbox);
elm_box_pack_end(hbox, pbox);
remote_name = engine->remote_name_get();
remote_email = engine->remote_email_get();
string = eina_strbuf_new();
if (!remote_name[0] && !remote_email[0])
{
eina_strbuf_append(string, _("Unable to obtain user information."));
elm_icon_standard_set(avatar, DEFAULT_USER_ICON);
}
else
@ -736,19 +696,18 @@ edi_scm_ui_add(Evas_Object *parent)
engine->remote_name_get(), engine->remote_email_get());
_edi_scm_ui_screens_avatar_load(avatar, engine->remote_email_get());
edi_scm->is_configured = EINA_TRUE;
pd->is_configured = EINA_TRUE;
}
elm_object_text_set(label, eina_strbuf_string_get(string));
eina_strbuf_free(string);
edi_scm->check = check = elm_check_add(parent);
pd->check = check = elm_check_add(parent);
elm_object_text_set(check, _("Show unstaged changes"));
elm_check_state_set(check, edi_scm->results_max);
elm_check_state_set(check, pd->results_max);
evas_object_show(check);
evas_object_smart_callback_add(check, "changed",
_edi_scm_ui_refresh_cb, edi_scm);
_edi_scm_ui_refresh_cb, pd);
elm_box_pack_end(hbox, check);
elm_object_content_set(frame, hbox);
elm_box_pack_end(box, frame);
@ -760,7 +719,7 @@ edi_scm_ui_add(Evas_Object *parent)
evas_object_size_hint_align_set(hbox, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_show(hbox);
edi_scm->list = list = elm_genlist_add(box);
pd->list = list = elm_genlist_add(box);
elm_genlist_mode_set(list, ELM_LIST_SCROLL);
elm_genlist_select_mode_set(list, ELM_OBJECT_SELECT_MODE_NONE);
elm_scroller_bounce_set(list, EINA_TRUE, EINA_TRUE);
@ -768,7 +727,7 @@ edi_scm_ui_add(Evas_Object *parent)
evas_object_size_hint_weight_set(list, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(list, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_show(list);
evas_object_event_callback_add(list, EVAS_CALLBACK_MOUSE_UP, _list_item_clicked_cb, edi_scm);
evas_object_event_callback_add(list, EVAS_CALLBACK_MOUSE_UP, _list_item_clicked_cb, pd);
table = elm_table_add(parent);
evas_object_size_hint_weight_set(table, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
@ -791,7 +750,7 @@ edi_scm_ui_add(Evas_Object *parent)
elm_box_pack_end(hbox, frame);
elm_box_pack_end(box, hbox);
staged_changes = _edi_scm_ui_status_list_fill(edi_scm);
staged_changes = _edi_scm_ui_status_list_fill(pd);
/* Commit entry */
table = elm_table_add(parent);
@ -811,7 +770,7 @@ edi_scm_ui_add(Evas_Object *parent)
evas_object_show(frame);
elm_object_content_set(frame, table);
edi_scm->commit_entry = input = elm_entry_add(box);
pd->commit_entry = input = elm_entry_add(box);
elm_object_text_set(input, _("Enter commit summary<br><br>And change details<br>"));
evas_object_size_hint_weight_set(input, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(input, EVAS_HINT_FILL, EVAS_HINT_FILL);
@ -842,7 +801,7 @@ edi_scm_ui_add(Evas_Object *parent)
elm_object_content_set(frame, cbox);
elm_box_pack_end(box, frame);
edi_scm->code = code = elm_code_create();
pd->code = code = elm_code_create();
entry = elm_code_widget_add(box, code);
elm_code_parser_standard_add(code, ELM_CODE_PARSER_STANDARD_DIFF);
elm_obj_code_widget_gravity_set(entry, 0.0, 0.0);
@ -853,7 +812,7 @@ edi_scm_ui_add(Evas_Object *parent)
evas_object_show(entry);
elm_box_pack_end(cbox, entry);
ecore_thread_run(_edi_scm_diff_thread_cb, _edi_scm_diff_thread_end_cb, _edi_scm_diff_thread_cancel_cb, edi_scm);
ecore_thread_run(_edi_scm_diff_thread_cb, _edi_scm_diff_thread_end_cb, _edi_scm_diff_thread_cancel_cb, pd);
sep = elm_separator_add(parent);
elm_separator_horizontal_set(sep, EINA_TRUE);
@ -873,10 +832,10 @@ edi_scm_ui_add(Evas_Object *parent)
evas_object_show(button);
elm_object_text_set(button, _("Cancel"));
evas_object_smart_callback_add(button, "clicked",
_edi_scm_ui_screens_cancel_cb, edi_scm);
_edi_scm_ui_screens_cancel_cb, pd);
elm_box_pack_end(hbox, button);
edi_scm->commit_button = button = elm_button_add(parent);
pd->commit_button = button = elm_button_add(parent);
evas_object_size_hint_weight_set(button, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(button, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_data_set(button, "input", input);
@ -884,7 +843,7 @@ edi_scm_ui_add(Evas_Object *parent)
elm_object_text_set(button, _("Commit"));
elm_object_disabled_set(button, !staged_changes);
evas_object_smart_callback_add(button, "clicked",
_edi_scm_ui_screens_commit_cb, edi_scm);
_edi_scm_ui_screens_commit_cb, pd);
elm_box_pack_end(hbox, button);
elm_box_pack_end(box, hbox);

View File

@ -29,8 +29,6 @@ extern "C" {
* @ingroup SCM
*/
void edi_scm_ui_add(Evas_Object *parent);
char *_edi_scm_ui_workdir_get(void);
/**
* @}
*/

View File

@ -27,7 +27,7 @@ _edi_scm_exec(const char *command)
oldpwd = getcwd(NULL, PATH_MAX);
chdir(self->workdir);
chdir(self->root_directory);
code = edi_exe_wait(command);
chdir(oldpwd);
@ -46,7 +46,7 @@ _edi_scm_exec_response(const char *command)
oldpwd = getcwd(NULL, PATH_MAX);
chdir(self->workdir);
chdir(self->root_directory);
response = edi_exe_response(command);
chdir(oldpwd);
@ -232,7 +232,7 @@ _parse_line(char *line)
esc_path = ecore_file_escape_name(path);
status->path = eina_stringshare_add(esc_path);
fullpath = edi_path_append(edi_scm_engine_get()->workdir, esc_path);
fullpath = edi_path_append(edi_scm_engine_get()->root_directory, esc_path);
status->fullpath = eina_stringshare_add(fullpath);
status->unescaped = eina_stringshare_add(path);
@ -547,7 +547,7 @@ edi_scm_shutdown()
eina_stringshare_del(engine->name);
eina_stringshare_del(engine->directory);
eina_stringshare_del(engine->path);
free(engine->workdir);
free(engine->root_directory);
free(engine);
_edi_scm_global_object = NULL;
@ -742,6 +742,17 @@ edi_scm_push(void)
ecore_thread_run(_edi_scm_push_thread_cb, NULL, NULL, e);
}
EAPI const char *
edi_scm_root_directory_get(void)
{
Edi_Scm_Engine *e = edi_scm_engine_get();
if (!e->root_directory)
return NULL;
return e->root_directory;
}
static char *
_edi_scm_git_project_root_get(void)
{
@ -813,9 +824,9 @@ _edi_scm_git_init()
engine->status_get = _edi_scm_git_status_get;
if (edi_project_get())
engine->workdir = strdup(edi_project_get());
engine->root_directory = strdup(edi_project_get());
else
engine->workdir = _edi_scm_git_project_root_get();
engine->root_directory = _edi_scm_git_project_root_get();
engine->initialized = EINA_TRUE;

View File

@ -58,7 +58,7 @@ typedef struct _Edi_Scm_Engine
const char *name;
const char *directory;
const char *path;
char *workdir;
char *root_directory;
Eina_List *statuses;
scm_fn_stage *file_stage;
@ -297,6 +297,16 @@ Eina_Bool edi_scm_remote_enabled(void);
*/
const char *edi_scm_avatar_url_get(const char *email);
/**
* Return the root directory of the SCM.
*
* @return The location of the SCM's root working directory.
*
* @ingroup Scm
*/
const char *edi_scm_root_directory_get(void);
/**
* @}
*/