netstar pushed a commit to branch master.

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

commit c75c2d817f1b38f433088c8fc10b0df979cbfc98
Author: Al Poole <[email protected]>
Date:   Wed Sep 27 19:46:09 2017 +0100

    scm: refactor scm screens.
    
    There's absolutely zero need for a hash table here.
    Refactor the scm commit screen to be more efficient and make more
    sense.
---
 src/bin/screens/edi_scm_screens.c | 89 ++++++++++++---------------------------
 1 file changed, 26 insertions(+), 63 deletions(-)

diff --git a/src/bin/screens/edi_scm_screens.c 
b/src/bin/screens/edi_scm_screens.c
index 45cc5c0..dcae40f 100644
--- a/src/bin/screens/edi_scm_screens.c
+++ b/src/bin/screens/edi_scm_screens.c
@@ -12,7 +12,6 @@
 #include "edi_private.h"
 
 static Evas_Object *_parent_obj, *_popup, *_edi_scm_screens_message_popup;
-static Eina_Hash *_hash_statuses = NULL;
 
 static void
 _edi_scm_screens_message_close_cb(void *data EINA_UNUSED,
@@ -106,60 +105,29 @@ _entry_lines_append(Elm_Code *code, char *text)
       elm_code_file_line_append(code->file, start, end - start, NULL);
 }
 
-static Edi_Scm_Status_Code *
-_file_status_item_find(const char *path)
-{
-   return eina_hash_find(_hash_statuses, path);
-}
-
-static void
-_file_status_item_add(const char *path, Edi_Scm_Status_Code status)
-{
-   Edi_Scm_Status_Code *code;
-
-   if (_file_status_item_find(path)) return;
-
-   code = malloc(sizeof(Edi_Scm_Status_Code));
-
-   *code = status;
-   eina_hash_add(_hash_statuses, path, code);
-}
-
-
-static void _list_status_free_cb(void *data)
-{
-   Edi_Scm_Status_Code *code = data;
-
-   free(code);
-}
-
 static const char *
-_icon_status(Edi_Scm_Status_Code code, Eina_Bool *staged)
+_icon_status(Edi_Scm_Status_Code code)
 {
    switch (code)
      {
         case EDI_SCM_STATUS_NONE:
+        case EDI_SCM_STATUS_UNKNOWN:
+           return NULL;
         case EDI_SCM_STATUS_RENAMED:
            return "document-new";
         case EDI_SCM_STATUS_DELETED:
            return "edit-delete";
-        case EDI_SCM_STATUS_UNKNOWN:
-           return NULL;
         case EDI_SCM_STATUS_RENAMED_STAGED:
-           *staged = EINA_TRUE;
            return "document-new";
         case EDI_SCM_STATUS_DELETED_STAGED:
-           *staged = EINA_TRUE;
            return "edit-delete";
         case EDI_SCM_STATUS_ADDED:
            return "document-new";
         case EDI_SCM_STATUS_ADDED_STAGED:
-           *staged = EINA_TRUE;
            return "document-new";
         case EDI_SCM_STATUS_MODIFIED:
            return "document-save-as";
         case EDI_SCM_STATUS_MODIFIED_STAGED:
-           *staged = EINA_TRUE;
            return "document-save-as";
         case EDI_SCM_STATUS_UNTRACKED:
            return "dialog-question";
@@ -169,32 +137,36 @@ _icon_status(Edi_Scm_Status_Code code, Eina_Bool *staged)
 }
 
 static void
+_file_status_free(Edi_Scm_Status *status)
+{
+   eina_stringshare_del(status->fullpath);
+   eina_stringshare_del(status->path);
+   eina_stringshare_del(status->unescaped);
+
+   free(status);
+}
+
+static void
 _content_del(void *data, Evas_Object *obj EINA_UNUSED)
 {
-  char *path = data;
+   Edi_Scm_Status *status = data;
 
-  free(path);
+   _file_status_free(status);
 }
 
 static Evas_Object *
 _content_get(void *data, Evas_Object *obj, const char *source)
 {
    Evas_Object *box, *lbox, *mbox, *rbox, *label, *ic;
-   Edi_Scm_Status_Code *code;
+   Edi_Scm_Status *status;
    const char *text, *icon_name, *icon_status;
-   char *path;
-   Eina_Bool staged = EINA_FALSE;
 
    if (strcmp(source, "elm.swallow.content"))
      return NULL;
 
-   path =  (char *) data;
+   status = (Edi_Scm_Status *) data;
 
-   icon_name = icon_status = NULL;
-
-   code = _file_status_item_find(path);
-   if (code)
-     icon_status = _icon_status(*code, &staged);
+   icon_status = _icon_status(status->change);
 
    icon_name = "dialog-information";
 
@@ -214,7 +186,7 @@ _content_get(void *data, Evas_Object *obj, const char 
*source)
    elm_box_pack_end(lbox, ic);
 
    label = elm_label_add(lbox);
-   elm_object_text_set(label, path);
+   elm_object_text_set(label, status->unescaped);
    evas_object_show(label);
    elm_box_pack_end(lbox, label);
 
@@ -236,7 +208,7 @@ _content_get(void *data, Evas_Object *obj, const char 
*source)
         evas_object_show(ic);
         elm_box_pack_end(rbox, ic);
 
-        if (staged)
+        if (status->staged)
           {
              ic = elm_icon_add(mbox);
              elm_icon_standard_set(ic, "dialog-information");
@@ -253,7 +225,7 @@ _content_get(void *data, Evas_Object *obj, const char 
*source)
              evas_object_show(ic);
              elm_box_pack_end(rbox, ic);
 
-             if (*code != EDI_SCM_STATUS_UNTRACKED)
+             if (status->change != EDI_SCM_STATUS_UNTRACKED)
                text = _("Unstaged changes");
              else
                text = _("Untracked changes");
@@ -273,6 +245,7 @@ static Eina_Bool
 _file_status_list_fill(Evas_Object *list)
 {
    Edi_Scm_Engine *e;
+   Eina_List *l;
    Edi_Scm_Status *status;
    Elm_Genlist_Item_Class *itc;
    Eina_Bool staged = EINA_FALSE;
@@ -281,14 +254,6 @@ _file_status_list_fill(Evas_Object *list)
    if (!e)
      return EINA_FALSE;
 
-   if (_hash_statuses)
-     {
-        eina_hash_free_buckets(_hash_statuses);
-        eina_hash_free(_hash_statuses);
-     }
-
-   _hash_statuses = eina_hash_string_superfast_new(_list_status_free_cb);
-
    itc = elm_genlist_item_class_new();
    itc->item_style = "full";
    itc->func.text_get = NULL;
@@ -298,18 +263,16 @@ _file_status_list_fill(Evas_Object *list)
 
    if (edi_scm_status_get())
      {
-        EINA_LIST_FREE(e->statuses, status)
+        EINA_LIST_FOREACH(e->statuses, l, status)
           {
              if (status->staged)
                {
                   staged = EINA_TRUE;
-                  _file_status_item_add(status->path, status->change);
-                  elm_genlist_item_append(list, itc, strdup(status->path), 
NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
+                  elm_genlist_item_append(list, itc, status, NULL, 
ELM_GENLIST_ITEM_NONE, NULL, NULL);
                }
+             else
+              _file_status_free(status);
 
-             eina_stringshare_del(status->fullpath);
-             eina_stringshare_del(status->path);
-             free(status);
           }
      }
 

-- 


Reply via email to