ソースを参照

Allow to dump configuration with help comments

tags/1.2.0
Vsevolod Stakhov 8年前
コミット
9a4dfa8ee6
1個のファイルの変更36行の追加30行の削除
  1. 36
    30
      src/rspamadm/configdump.c

+ 36
- 30
src/rspamadm/configdump.c ファイルの表示

@@ -20,6 +20,7 @@
#include "utlist.h"
#include "rspamd.h"
#include "lua/lua_common.h"
#include "utlist.h"

static gboolean json = FALSE;
static gboolean compact = FALSE;
@@ -95,57 +96,67 @@ rspamadm_add_doc_elt (const ucl_object_t *obj, const ucl_object_t *doc_obj,
ucl_object_t *comment_obj)
{
rspamd_fstring_t *comment = rspamd_fstring_new ();
const ucl_object_t *elt, *cur;
ucl_object_t *nobj;
const ucl_object_t *elt;
ucl_object_t *nobj, *cur_comment;

if (doc_obj != NULL) {
/* Create doc comment */
rspamd_printf_fstring (&comment, "/*\n");
nobj = ucl_object_fromstring_common ("/*", 0, 0);
}
else {
return;
}

/* We create comments as a list of parts */
elt = ucl_object_find_key (doc_obj, "data");
if (elt) {
rspamd_printf_fstring (&comment, "* %s\n", ucl_object_tostring (elt));
rspamd_printf_fstring (&comment, " * %s", ucl_object_tostring (elt));
cur_comment = ucl_object_fromstring_common (comment->str, comment->len, 0);
rspamd_fstring_erase (comment, 0, comment->len);
DL_APPEND (nobj, cur_comment);
}

elt = ucl_object_find_key (doc_obj, "type");
if (elt) {
rspamd_printf_fstring (&comment, "* Type: %s\n", ucl_object_tostring (elt));
rspamd_printf_fstring (&comment, " * Type: %s", ucl_object_tostring (elt));
cur_comment = ucl_object_fromstring_common (comment->str, comment->len, 0);
rspamd_fstring_erase (comment, 0, comment->len);
DL_APPEND (nobj, cur_comment);
}

elt = ucl_object_find_key (doc_obj, "required");
if (elt) {
rspamd_printf_fstring (&comment, "* Required %b\n",
rspamd_printf_fstring (&comment, " * Required: %B",
ucl_object_toboolean (elt));
cur_comment = ucl_object_fromstring_common (comment->str, comment->len, 0);
rspamd_fstring_erase (comment, 0, comment->len);
DL_APPEND (nobj, cur_comment);
}

rspamd_printf_fstring (&comment, " */\n");

nobj = ucl_object_fromlstring (comment->str, comment->len);
cur_comment = ucl_object_fromstring (" */");
DL_APPEND (nobj, cur_comment);
rspamd_fstring_free (comment);

LL_FOREACH (obj, cur) {
ucl_object_insert_key (comment_obj, nobj, (const char *)&cur,
sizeof (void *), true);
}
ucl_object_insert_key (comment_obj, ucl_object_ref (nobj),
(const char *)&obj,
sizeof (void *), true);

ucl_object_unref (nobj);
}

static void
rspamadm_gen_comments (const ucl_object_t *obj, const ucl_object_t *doc_obj,
ucl_object_t *comments)
{
const ucl_object_t *cur_obj, *cur_doc;
const ucl_object_t *cur_obj, *cur_doc, *cur_elt;
ucl_object_iter_t it = NULL;
ucl_object_t *cur_elt;

if (obj == NULL || doc_obj == NULL || obj->keylen == 0) {
if (obj == NULL || doc_obj == NULL) {
return;
}

cur_doc = ucl_object_find_keyl (doc_obj, obj->key, obj->keylen);

if (cur_doc != NULL) {
rspamadm_add_doc_elt (obj, cur_doc, comments);
if (obj->keylen > 0) {
rspamadm_add_doc_elt (obj, doc_obj, comments);
}

if (ucl_object_type (obj) == UCL_OBJECT) {
@@ -154,17 +165,12 @@ rspamadm_gen_comments (const ucl_object_t *obj, const ucl_object_t *doc_obj,
cur_obj->keylen);

if (cur_doc != NULL) {
cur_elt = (ucl_object_t *)ucl_object_find_keyl (comments,
(const char *)&cur_obj,
sizeof (void *));
if (cur_elt == NULL) {
cur_elt = ucl_object_typed_new (UCL_OBJECT);
LL_FOREACH (cur_obj, cur_elt) {
if (ucl_object_find_keyl (comments, (const char *)&cur_elt,
sizeof (void *)) == NULL) {
rspamadm_gen_comments (cur_elt, cur_doc, comments);
}
}

ucl_object_insert_key (comments, cur_elt, (const char *)&cur_obj,
sizeof (void *), true);

rspamadm_gen_comments (cur_obj, cur_doc, cur_elt);
}
}
}

読み込み中…
キャンセル
保存