Serj Kalichev 11 месяцев назад
Родитель
Сommit
2c946ddc7c
5 измененных файлов с 29 добавлено и 2 удалено
  1. 7 0
      docs/klish-plugin-sysrepo.ru.md
  2. 1 0
      src/pline.h
  3. 8 0
      src/plugin.c
  4. 12 2
      src/show.c
  5. 1 0
      xml/sysrepo.xml

+ 7 - 0
docs/klish-plugin-sysrepo.ru.md

@@ -605,6 +605,13 @@ list key1 def1 key2 def2 key3 nnn {
 ```
 
 
+### Настройка `ShowDefaultKeys`
+
+Если значение настройки установлено в `n`, а значение ключа
+списка (в режиме `DefaultKeys = y`) совпадает со значением по умолчанию, то
+такой ключ не будет показываться на экране при выводе конфигурации.
+
+
 ### Настройка `HidePasswords`
 
 Если в конфигурации хранятся пароли или хэши паролей, то такую информацию

+ 1 - 0
src/pline.h

@@ -121,6 +121,7 @@ typedef struct {
 	bool_t colorize;
 	uint8_t indent;
 	bool_t default_keys;
+	bool_t show_default_keys;
 	bool_t hide_passwords;
 } pline_opts_t;
 

+ 8 - 0
src/plugin.c

@@ -95,6 +95,7 @@ int kplugin_sysrepo_init(kcontext_t *context)
 	udata->opts.colorize = BOOL_TRUE;
 	udata->opts.indent = 2;
 	udata->opts.default_keys = BOOL_FALSE;
+	udata->opts.show_default_keys = BOOL_FALSE;
 	udata->opts.hide_passwords = BOOL_TRUE;
 	parse_plugin_conf(kplugin_conf(plugin), &udata->opts);
 
@@ -228,6 +229,13 @@ static int parse_plugin_conf(const char *conf, pline_opts_t *opts)
 			opts->default_keys = BOOL_FALSE;
 	}
 
+	if ((val = faux_ini_find(ini, "ShowDefaultKeys"))) {
+		if (faux_str_cmp(val, "y") == 0)
+			opts->show_default_keys = BOOL_TRUE;
+		else if (faux_str_cmp(val, "n") == 0)
+			opts->show_default_keys = BOOL_FALSE;
+	}
+
 	if ((val = faux_ini_find(ini, "HidePasswords"))) {
 		if (faux_str_cmp(val, "y") == 0)
 			opts->hide_passwords = BOOL_TRUE;

+ 12 - 2
src/show.c

@@ -87,6 +87,7 @@ static void show_list(const struct lyd_node *node, size_t level,
 	char begin_bracket[3] = {' ', opts->begin_bracket, '\0'};
 	const struct lyd_node *iter = NULL;
 	bool_t first_key = BOOL_TRUE;
+	const char *default_value = NULL;
 
 	if (!node)
 		return;
@@ -103,11 +104,20 @@ static void show_list(const struct lyd_node *node, size_t level,
 			continue;
 		if (!(iter->schema->flags & LYS_KEY))
 			continue;
+
+		default_value = klysc_node_ext_default(iter->schema);
+		value = klyd_node_value(iter);
+		// Don't show "default" keys with default values
+		if (opts->default_keys &&
+			!opts->show_default_keys && default_value &&
+			(faux_str_cmp(default_value, value) == 0)) {
+			faux_str_free(value);
+			continue;
+		}
 		if (opts->keys_w_stmt && (!first_key || (first_key &&
 			(opts->first_key_w_stmt ||
-			(opts->default_keys && klysc_node_ext_default(iter->schema))))))
+			(opts->default_keys && default_value)))))
 			printf(" %s", iter->schema->name);
-		value = klyd_node_value(iter);
 		printf(" %s", value);
 		faux_str_free(value);
 		first_key = BOOL_FALSE;

+ 1 - 0
xml/sysrepo.xml

@@ -12,6 +12,7 @@
 	Colorize = y
 	Indent = 2
 	DefaultKeys = n
+	ShowDefaultKeys = n
 	HidePasswords = y
 </PLUGIN>