]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
menuselect: Add ability to set deprecated and removed versions.
authorJoshua C. Colp <jcolp@sangoma.com>
Wed, 10 Mar 2021 14:05:58 +0000 (10:05 -0400)
committerGeorge Joseph <gjoseph@digium.com>
Wed, 17 Mar 2021 15:07:35 +0000 (10:07 -0500)
The "deprecated_in" and "removed_in" information can now be
set in MODULEINFO for a module and is then displayed in
menuselect so users can be aware of when a module is slated
to be deprecated and then removed.

ASTERISK-29337

Change-Id: I6952889cf08e0e9e99cf8b43f99b3cef4688087a

menuselect/menuselect.c
menuselect/menuselect.h
menuselect/menuselect_curses.c
menuselect/menuselect_newt.c

index 2eea3f09eb41f31c4b0054a1ba67ab11bfadafc2..2ef075fdbe2fb24f571a48adaee510ba17cc75b0 100644 (file)
@@ -210,6 +210,8 @@ static void free_member(struct member *mem)
                xmlFree((void *) mem->defaultenabled);
                xmlFree((void *) mem->support_level);
                xmlFree((void *) mem->replacement);
+               xmlFree((void *) mem->deprecated_in);
+               xmlFree((void *) mem->removed_in);
        }
 
        free(mem);
@@ -341,6 +343,32 @@ static int process_xml_replacement_node(xmlNode *node, struct member *mem)
        return 0;
 }
 
+static int process_xml_deprecatedin_node(xmlNode *node, struct member *mem)
+{
+       const char *tmp = (const char *) xmlNodeGetContent(node);
+
+       if (tmp && !strlen_zero(tmp)) {
+               xmlFree((void *) mem->deprecated_in);
+               mem->deprecated_in = tmp;
+               print_debug("Set deprecated_in for %s to %s\n", mem->name, mem->deprecated_in);
+       }
+
+       return 0;
+}
+
+static int process_xml_removedin_node(xmlNode *node, struct member *mem)
+{
+       const char *tmp = (const char *) xmlNodeGetContent(node);
+
+       if (tmp && !strlen_zero(tmp)) {
+               xmlFree((void *) mem->removed_in);
+               mem->removed_in = tmp;
+               print_debug("Set removed_in for %s to %s\n", mem->name, mem->removed_in);
+       }
+
+       return 0;
+}
+
 static int process_xml_ref_node(xmlNode *node, struct member *mem, struct reference_list *refs)
 {
        struct reference *ref;
@@ -416,6 +444,8 @@ static const struct {
        { "conflict",       process_xml_conflict_node       },
        { "use",            process_xml_use_node            },
        { "member_data",    process_xml_member_data_node    },
+       { "deprecated_in",  process_xml_deprecatedin_node   },
+       { "removed_in",     process_xml_removedin_node      },
 };
 
 static node_handler lookup_node_handler(xmlNode *node)
index d41859e194992d02fd7b4ad66f19fe2ec855236b..9c71de28b3c524d04f6c19b108dfd4271a65da86 100644 (file)
@@ -70,6 +70,8 @@ struct member {
        const char *touch_on_change;
        const char *support_level;
        const char *replacement;
+       const char *deprecated_in;
+       const char *removed_in;
        /*! member_data is just an opaque, member-specific string */
        const char *member_data;
        /*! This module is currently selected */
index fe42119db6354b85ba759ac342f1f0280fdd702d..769806152fc586614f597bdf0ac21e8752d1a95c 100644 (file)
@@ -279,13 +279,21 @@ static void display_mem_info(WINDOW *menu, struct member *mem, int start_y, int
 
        if (!mem->is_separator) { /* Separators lack support levels */
                { /* support level */
+                       char buf2[64];
                        wmove(menu, end - start_y + 7, start_x);
                        snprintf(buf, sizeof(buf), "Support Level: %s", mem->support_level);
                        if (mem->replacement && *mem->replacement) {
-                               char buf2[64];
                                snprintf(buf2, sizeof(buf2), ", Replaced by: %s", mem->replacement);
                                strncat(buf, buf2, sizeof(buf) - strlen(buf) - 1);
                        }
+                       if (mem->deprecated_in && *mem->deprecated_in) {
+                               snprintf(buf2, sizeof(buf2), ", Deprecated in: %s", mem->deprecated_in);
+                               strncat(buf, buf2, sizeof(buf) - strlen(buf) - 1);
+                       }
+                       if (mem->removed_in && *mem->removed_in) {
+                               snprintf(buf2, sizeof(buf2), ", Removed in: %s", mem->removed_in);
+                               strncat(buf, buf2, sizeof(buf) - strlen(buf) - 1);
+                       }
                        waddstr(menu, buf);
                }
        }
index bc03f9b1b57ea43a36b0e2f559a48c754e0ba57e..b0f7574566b06cc0ad9bd005af179b1ede7fa0a1 100644 (file)
@@ -110,6 +110,7 @@ static void reset_display()
 static void display_member_info(struct member *mem)
 {
        char buffer[128] = { 0 };
+       char buf2[64];
 
        struct reference *dep;
        struct reference *con;
@@ -175,10 +176,17 @@ static void display_member_info(struct member *mem)
        { /* Support Level */
                snprintf(buffer, sizeof(buffer), "%s", mem->support_level);
                if (mem->replacement && *mem->replacement) {
-                       char buf2[64];
                        snprintf(buf2, sizeof(buf2), ", Replaced by: %s", mem->replacement);
                        strncat(buffer, buf2, sizeof(buffer) - strlen(buffer) - 1);
                }
+               if (mem->deprecated_in && *mem->deprecated_in) {
+                       snprintf(buf2, sizeof(buf2), ", Deprecated in: %s", mem->deprecated_in);
+                       strncat(buffer, buf2, sizeof(buffer) - strlen(buffer) - 1);
+               }
+               if (mem->removed_in && *mem->removed_in) {
+                       snprintf(buf2, sizeof(buf2), ", Removed in: %s", mem->removed_in);
+                       strncat(buffer, buf2, sizeof(buffer) - strlen(buffer) - 1);
+               }
                if (mem->is_separator) {
                        newtTextboxSetText(supportLevelDataTextbox, "");
                } else {