From: Markus Armbruster <armbru@redhat.com>
To: Eric Blake <eblake@redhat.com>
Cc: qemu-devel@nongnu.org, Michael Roth <mdroth@linux.vnet.ibm.com>
Subject: Re: [Qemu-devel] [PATCH v4 11/28] tests: Factor out common code in qapi output tests
Date: Wed, 01 Jun 2016 18:33:49 +0200 [thread overview]
Message-ID: <8760tsq36a.fsf@dusky.pond.sub.org> (raw)
In-Reply-To: <1463632874-28559-12-git-send-email-eblake@redhat.com> (Eric Blake's message of "Wed, 18 May 2016 22:40:57 -0600")
Eric Blake <eblake@redhat.com> writes:
> Create a new visitor_get() function to capture common
> actions taken in collecting output from an output visitor,
> to make it easier to refactor the output visitors in a
> later patch. While making test improvements, also use
> &error_abort and error_free_or_abort() in more places, use
> the generated qapi_free_intList() instead of open-coding it,
> reduce the scope of some variables, and copy the visitor_reset()
> concept from the qmp-output test to the string-output test.
Sounds like this would be easier to review if split into parts.
> Signed-off-by: Eric Blake <eblake@redhat.com>
>
> ---
> v4: new patch
> ---
> tests/test-qmp-output-visitor.c | 78 +++++++++++-------------------
> tests/test-string-output-visitor.c | 97 ++++++++++++++++++--------------------
> 2 files changed, 72 insertions(+), 103 deletions(-)
>
> diff --git a/tests/test-qmp-output-visitor.c b/tests/test-qmp-output-visitor.c
> index d638ea6..0362192 100644
> --- a/tests/test-qmp-output-visitor.c
> +++ b/tests/test-qmp-output-visitor.c
> @@ -24,6 +24,7 @@
> typedef struct TestOutputVisitorData {
> QmpOutputVisitor *qov;
> Visitor *ov;
> + QObject *obj;
> } TestOutputVisitorData;
>
> static void visitor_output_setup(TestOutputVisitorData *data,
> @@ -42,6 +43,15 @@ static void visitor_output_teardown(TestOutputVisitorData *data,
> visit_free(data->ov);
> data->qov = NULL;
> data->ov = NULL;
> + qobject_decref(data->obj);
> + data->obj = NULL;
> +}
> +
> +static QObject *visitor_get(TestOutputVisitorData *data)
> +{
> + data->obj = qmp_output_get_qobject(data->qov);
> + g_assert(data->obj);
> + return data->obj;
> }
>
> static void visitor_reset(TestOutputVisitorData *data)
> @@ -58,12 +68,9 @@ static void test_visitor_out_int(TestOutputVisitorData *data,
>
> visit_type_int(data->ov, NULL, &value, &error_abort);
>
> - obj = qmp_output_get_qobject(data->qov);
> - g_assert(obj != NULL);
> + obj = visitor_get(data);
> g_assert(qobject_type(obj) == QTYPE_QINT);
> g_assert_cmpint(qint_get_int(qobject_to_qint(obj)), ==, value);
> -
> - qobject_decref(obj);
> }
>
> static void test_visitor_out_bool(TestOutputVisitorData *data,
> @@ -74,12 +81,9 @@ static void test_visitor_out_bool(TestOutputVisitorData *data,
>
> visit_type_bool(data->ov, NULL, &value, &error_abort);
>
> - obj = qmp_output_get_qobject(data->qov);
> - g_assert(obj != NULL);
> + obj = visitor_get(data);
> g_assert(qobject_type(obj) == QTYPE_QBOOL);
> g_assert(qbool_get_bool(qobject_to_qbool(obj)) == value);
> -
> - qobject_decref(obj);
> }
>
> static void test_visitor_out_number(TestOutputVisitorData *data,
> @@ -90,12 +94,9 @@ static void test_visitor_out_number(TestOutputVisitorData *data,
>
> visit_type_number(data->ov, NULL, &value, &error_abort);
>
> - obj = qmp_output_get_qobject(data->qov);
> - g_assert(obj != NULL);
> + obj = visitor_get(data);
> g_assert(qobject_type(obj) == QTYPE_QFLOAT);
> g_assert(qfloat_get_double(qobject_to_qfloat(obj)) == value);
> -
> - qobject_decref(obj);
> }
>
> static void test_visitor_out_string(TestOutputVisitorData *data,
> @@ -106,12 +107,9 @@ static void test_visitor_out_string(TestOutputVisitorData *data,
>
> visit_type_str(data->ov, NULL, &string, &error_abort);
>
> - obj = qmp_output_get_qobject(data->qov);
> - g_assert(obj != NULL);
> + obj = visitor_get(data);
> g_assert(qobject_type(obj) == QTYPE_QSTRING);
> g_assert_cmpstr(qstring_get_str(qobject_to_qstring(obj)), ==, string);
> -
> - qobject_decref(obj);
> }
>
> static void test_visitor_out_no_string(TestOutputVisitorData *data,
> @@ -123,12 +121,9 @@ static void test_visitor_out_no_string(TestOutputVisitorData *data,
> /* A null string should return "" */
> visit_type_str(data->ov, NULL, &string, &error_abort);
>
> - obj = qmp_output_get_qobject(data->qov);
> - g_assert(obj != NULL);
> + obj = visitor_get(data);
> g_assert(qobject_type(obj) == QTYPE_QSTRING);
> g_assert_cmpstr(qstring_get_str(qobject_to_qstring(obj)), ==, "");
> -
> - qobject_decref(obj);
> }
>
> static void test_visitor_out_enum(TestOutputVisitorData *data,
> @@ -140,12 +135,10 @@ static void test_visitor_out_enum(TestOutputVisitorData *data,
> for (i = 0; i < ENUM_ONE__MAX; i++) {
> visit_type_EnumOne(data->ov, "unused", &i, &error_abort);
>
> - obj = qmp_output_get_qobject(data->qov);
> - g_assert(obj != NULL);
> + obj = visitor_get(data);
> g_assert(qobject_type(obj) == QTYPE_QSTRING);
> g_assert_cmpstr(qstring_get_str(qobject_to_qstring(obj)), ==,
> EnumOne_lookup[i]);
> - qobject_decref(obj);
> visitor_reset(data);
> }
> }
> @@ -178,8 +171,7 @@ static void test_visitor_out_struct(TestOutputVisitorData *data,
>
> visit_type_TestStruct(data->ov, NULL, &p, &error_abort);
>
> - obj = qmp_output_get_qobject(data->qov);
> - g_assert(obj != NULL);
> + obj = visitor_get(data);
> g_assert(qobject_type(obj) == QTYPE_QDICT);
>
> qdict = qobject_to_qdict(obj);
> @@ -187,8 +179,6 @@ static void test_visitor_out_struct(TestOutputVisitorData *data,
> g_assert_cmpint(qdict_get_int(qdict, "integer"), ==, 42);
> g_assert_cmpint(qdict_get_bool(qdict, "boolean"), ==, false);
> g_assert_cmpstr(qdict_get_str(qdict, "string"), ==, "foo");
> -
> - QDECREF(qdict);
> }
>
> static void test_visitor_out_struct_nested(TestOutputVisitorData *data,
> @@ -223,8 +213,7 @@ static void test_visitor_out_struct_nested(TestOutputVisitorData *data,
>
> visit_type_UserDefTwo(data->ov, "unused", &ud2, &error_abort);
>
> - obj = qmp_output_get_qobject(data->qov);
> - g_assert(obj != NULL);
> + obj = visitor_get(data);
> g_assert(qobject_type(obj) == QTYPE_QDICT);
>
> qdict = qobject_to_qdict(obj);
> @@ -251,7 +240,6 @@ static void test_visitor_out_struct_nested(TestOutputVisitorData *data,
> g_assert_cmpint(qdict_get_int(userdef, "integer"), ==, value);
> g_assert_cmpstr(qdict_get_str(userdef, "string"), ==, string);
>
> - QDECREF(qdict);
> qapi_free_UserDefTwo(ud2);
> }
>
> @@ -303,8 +291,7 @@ static void test_visitor_out_list(TestOutputVisitorData *data,
>
> visit_type_TestStructList(data->ov, NULL, &head, &error_abort);
>
> - obj = qmp_output_get_qobject(data->qov);
> - g_assert(obj != NULL);
> + obj = visitor_get(data);
> g_assert(qobject_type(obj) == QTYPE_QLIST);
>
> qlist = qobject_to_qlist(obj);
> @@ -325,7 +312,6 @@ static void test_visitor_out_list(TestOutputVisitorData *data,
> }
> g_assert_cmpint(i, ==, max_items);
>
> - QDECREF(qlist);
> qapi_free_TestStructList(head);
> }
>
> @@ -369,11 +355,9 @@ static void test_visitor_out_any(TestOutputVisitorData *data,
>
> qobj = QOBJECT(qint_from_int(-42));
> visit_type_any(data->ov, NULL, &qobj, &error_abort);
> - obj = qmp_output_get_qobject(data->qov);
> - g_assert(obj != NULL);
> + obj = visitor_get(data);
> g_assert(qobject_type(obj) == QTYPE_QINT);
> g_assert_cmpint(qint_get_int(qobject_to_qint(obj)), ==, -42);
> - qobject_decref(obj);
> qobject_decref(qobj);
>
> visitor_reset(data);
> @@ -383,9 +367,8 @@ static void test_visitor_out_any(TestOutputVisitorData *data,
> qdict_put(qdict, "string", qstring_from_str("foo"));
> qobj = QOBJECT(qdict);
> visit_type_any(data->ov, NULL, &qobj, &error_abort);
> + obj = visitor_get(data);
Any particular reason to put this here...
> qobject_decref(qobj);
> - obj = qmp_output_get_qobject(data->qov);
> - g_assert(obj != NULL);
... rather than here?
> qdict = qobject_to_qdict(obj);
> g_assert(qdict);
> qobj = qdict_get(qdict, "integer");
> @@ -403,7 +386,6 @@ static void test_visitor_out_any(TestOutputVisitorData *data,
> qstring = qobject_to_qstring(qobj);
> g_assert(qstring);
> g_assert_cmpstr(qstring_get_str(qstring), ==, "foo");
> - qobject_decref(obj);
> }
>
> static void test_visitor_out_union_flat(TestOutputVisitorData *data,
> @@ -419,7 +401,7 @@ static void test_visitor_out_union_flat(TestOutputVisitorData *data,
> tmp->u.value1.boolean = true;
>
> visit_type_UserDefFlatUnion(data->ov, NULL, &tmp, &error_abort);
> - arg = qmp_output_get_qobject(data->qov);
> + arg = visitor_get(data);
>
> g_assert(qobject_type(arg) == QTYPE_QDICT);
> qdict = qobject_to_qdict(arg);
> @@ -430,7 +412,6 @@ static void test_visitor_out_union_flat(TestOutputVisitorData *data,
> g_assert_cmpint(qdict_get_bool(qdict, "boolean"), ==, true);
>
> qapi_free_UserDefFlatUnion(tmp);
> - QDECREF(qdict);
> }
>
> static void test_visitor_out_alternate(TestOutputVisitorData *data,
> @@ -445,13 +426,12 @@ static void test_visitor_out_alternate(TestOutputVisitorData *data,
> tmp->u.i = 42;
>
> visit_type_UserDefAlternate(data->ov, NULL, &tmp, &error_abort);
> - arg = qmp_output_get_qobject(data->qov);
> + arg = visitor_get(data);
>
> g_assert(qobject_type(arg) == QTYPE_QINT);
> g_assert_cmpint(qint_get_int(qobject_to_qint(arg)), ==, 42);
>
> qapi_free_UserDefAlternate(tmp);
> - qobject_decref(arg);
>
> visitor_reset(data);
> tmp = g_new0(UserDefAlternate, 1);
> @@ -459,13 +439,12 @@ static void test_visitor_out_alternate(TestOutputVisitorData *data,
> tmp->u.s = g_strdup("hello");
>
> visit_type_UserDefAlternate(data->ov, NULL, &tmp, &error_abort);
> - arg = qmp_output_get_qobject(data->qov);
> + arg = visitor_get(data);
>
> g_assert(qobject_type(arg) == QTYPE_QSTRING);
> g_assert_cmpstr(qstring_get_str(qobject_to_qstring(arg)), ==, "hello");
>
> qapi_free_UserDefAlternate(tmp);
> - qobject_decref(arg);
>
> visitor_reset(data);
> tmp = g_new0(UserDefAlternate, 1);
> @@ -476,7 +455,7 @@ static void test_visitor_out_alternate(TestOutputVisitorData *data,
> tmp->u.udfu.u.value1.boolean = true;
>
> visit_type_UserDefAlternate(data->ov, NULL, &tmp, &error_abort);
> - arg = qmp_output_get_qobject(data->qov);
> + arg = visitor_get(data);
>
> g_assert_cmpint(qobject_type(arg), ==, QTYPE_QDICT);
> qdict = qobject_to_qdict(arg);
> @@ -487,7 +466,6 @@ static void test_visitor_out_alternate(TestOutputVisitorData *data,
> g_assert_cmpint(qdict_get_bool(qdict, "boolean"), ==, true);
>
> qapi_free_UserDefAlternate(tmp);
> - qobject_decref(arg);
> }
>
> static void test_visitor_out_null(TestOutputVisitorData *data,
> @@ -501,14 +479,13 @@ static void test_visitor_out_null(TestOutputVisitorData *data,
> visit_type_null(data->ov, "a", &error_abort);
> visit_check_struct(data->ov, &error_abort);
> visit_end_struct(data->ov, NULL);
> - arg = qmp_output_get_qobject(data->qov);
> + arg = visitor_get(data);
> g_assert(qobject_type(arg) == QTYPE_QDICT);
> qdict = qobject_to_qdict(arg);
> g_assert_cmpint(qdict_size(qdict), ==, 1);
> nil = qdict_get(qdict, "a");
> g_assert(nil);
> g_assert(qobject_type(nil) == QTYPE_QNULL);
> - qobject_decref(arg);
> }
>
> static void init_native_list(UserDefNativeListUnion *cvalue)
> @@ -739,10 +716,9 @@ static void test_native_list(TestOutputVisitorData *data,
>
> visit_type_UserDefNativeListUnion(data->ov, NULL, &cvalue, &error_abort);
>
> - obj = qmp_output_get_qobject(data->qov);
> + obj = visitor_get(data);
> check_native_list(obj, cvalue->type);
> qapi_free_UserDefNativeListUnion(cvalue);
> - qobject_decref(obj);
> }
>
> static void test_visitor_out_native_list_int(TestOutputVisitorData *data,
> diff --git a/tests/test-string-output-visitor.c b/tests/test-string-output-visitor.c
> index 2a62a2f..d5dd8c8 100644
> --- a/tests/test-string-output-visitor.c
> +++ b/tests/test-string-output-visitor.c
> @@ -23,29 +23,30 @@
> typedef struct TestOutputVisitorData {
> StringOutputVisitor *sov;
> Visitor *ov;
> + char *str;
> bool human;
> } TestOutputVisitorData;
>
> +static void visitor_output_setup_internal(TestOutputVisitorData *data,
> + bool human)
> +{
> + data->human = human;
> + data->sov = string_output_visitor_new(human);
> + g_assert(data->sov);
> + data->ov = string_output_get_visitor(data->sov);
> + g_assert(data->ov);
> +}
> +
> static void visitor_output_setup(TestOutputVisitorData *data,
> const void *unused)
> {
> - data->human = false;
> - data->sov = string_output_visitor_new(data->human);
> - g_assert(data->sov != NULL);
> -
> - data->ov = string_output_get_visitor(data->sov);
> - g_assert(data->ov != NULL);
> + return visitor_output_setup_internal(data, false);
> }
>
> static void visitor_output_setup_human(TestOutputVisitorData *data,
> const void *unused)
> {
> - data->human = true;
> - data->sov = string_output_visitor_new(data->human);
> - g_assert(data->sov != NULL);
> -
> - data->ov = string_output_get_visitor(data->sov);
> - g_assert(data->ov != NULL);
> + return visitor_output_setup_internal(data, true);
> }
>
> static void visitor_output_teardown(TestOutputVisitorData *data,
> @@ -54,6 +55,23 @@ static void visitor_output_teardown(TestOutputVisitorData *data,
> visit_free(data->ov);
> data->sov = NULL;
> data->ov = NULL;
> + g_free(data->str);
> + data->str = NULL;
> +}
> +
> +static char *visitor_get(TestOutputVisitorData *data)
> +{
> + data->str = string_output_get_string(data->sov);
> + g_assert(data->str);
> + return data->str;
> +}
> +
> +static void visitor_reset(TestOutputVisitorData *data)
> +{
> + bool human = data->human;
> +
> + visitor_output_teardown(data, NULL);
> + visitor_output_setup_internal(data, human);
> }
>
> static void test_visitor_out_int(TestOutputVisitorData *data,
> @@ -66,14 +84,12 @@ static void test_visitor_out_int(TestOutputVisitorData *data,
> visit_type_int(data->ov, NULL, &value, &err);
> g_assert(!err);
>
> - str = string_output_get_string(data->sov);
> - g_assert(str != NULL);
> + str = visitor_get(data);
> if (data->human) {
> g_assert_cmpstr(str, ==, "42 (0x2a)");
> } else {
> g_assert_cmpstr(str, ==, "42");
> }
> - g_free(str);
> }
>
> static void test_visitor_out_intList(TestOutputVisitorData *data,
> @@ -95,8 +111,7 @@ static void test_visitor_out_intList(TestOutputVisitorData *data,
> visit_type_intList(data->ov, NULL, &list, &err);
> g_assert(err == NULL);
>
> - str = string_output_get_string(data->sov);
> - g_assert(str != NULL);
> + str = visitor_get(data);
> if (data->human) {
> g_assert_cmpstr(str, ==,
> "0-1,3-6,9-16,21-22,9223372036854775806-9223372036854775807 "
> @@ -106,13 +121,7 @@ static void test_visitor_out_intList(TestOutputVisitorData *data,
> g_assert_cmpstr(str, ==,
> "0-1,3-6,9-16,21-22,9223372036854775806-9223372036854775807");
> }
> - g_free(str);
> - while (list) {
> - intList *tmp2;
> - tmp2 = list->next;
> - g_free(list);
> - list = tmp2;
> - }
> + qapi_free_intList(list);
> }
>
> static void test_visitor_out_bool(TestOutputVisitorData *data,
> @@ -125,10 +134,8 @@ static void test_visitor_out_bool(TestOutputVisitorData *data,
> visit_type_bool(data->ov, NULL, &value, &err);
> g_assert(!err);
>
> - str = string_output_get_string(data->sov);
> - g_assert(str != NULL);
> + str = visitor_get(data);
> g_assert_cmpstr(str, ==, "true");
> - g_free(str);
> }
>
> static void test_visitor_out_number(TestOutputVisitorData *data,
> @@ -141,10 +148,8 @@ static void test_visitor_out_number(TestOutputVisitorData *data,
> visit_type_number(data->ov, NULL, &value, &err);
> g_assert(!err);
>
> - str = string_output_get_string(data->sov);
> - g_assert(str != NULL);
> + str = visitor_get(data);
> g_assert_cmpstr(str, ==, "3.140000");
> - g_free(str);
> }
>
> static void test_visitor_out_string(TestOutputVisitorData *data,
> @@ -158,61 +163,50 @@ static void test_visitor_out_string(TestOutputVisitorData *data,
> visit_type_str(data->ov, NULL, &string, &err);
> g_assert(!err);
>
> - str = string_output_get_string(data->sov);
> - g_assert(str != NULL);
> + str = visitor_get(data);
> if (data->human) {
> g_assert_cmpstr(str, ==, string_human);
> } else {
> g_assert_cmpstr(str, ==, string);
> }
> - g_free(str);
> }
>
> static void test_visitor_out_no_string(TestOutputVisitorData *data,
> const void *unused)
> {
> char *string = NULL;
> - Error *err = NULL;
> char *str;
>
> /* A null string should return "" */
> - visit_type_str(data->ov, NULL, &string, &err);
> - g_assert(!err);
> + visit_type_str(data->ov, NULL, &string, &error_abort);
>
> - str = string_output_get_string(data->sov);
> - g_assert(str != NULL);
> + str = visitor_get(data);
> if (data->human) {
> g_assert_cmpstr(str, ==, "<null>");
> } else {
> g_assert_cmpstr(str, ==, "");
> }
> - g_free(str);
> }
>
> static void test_visitor_out_enum(TestOutputVisitorData *data,
> const void *unused)
> {
> - Error *err = NULL;
> char *str;
> EnumOne i;
>
> for (i = 0; i < ENUM_ONE__MAX; i++) {
> - char *str_human;
> + visit_type_EnumOne(data->ov, "unused", &i, &error_abort);
>
> - visit_type_EnumOne(data->ov, "unused", &i, &err);
> - g_assert(!err);
> -
> - str_human = g_strdup_printf("\"%s\"", EnumOne_lookup[i]);
> -
> - str = string_output_get_string(data->sov);
> - g_assert(str != NULL);
> + str = visitor_get(data);
> if (data->human) {
> + char *str_human = g_strdup_printf("\"%s\"", EnumOne_lookup[i]);
> +
> g_assert_cmpstr(str, ==, str_human);
> + g_free(str_human);
> } else {
> g_assert_cmpstr(str, ==, EnumOne_lookup[i]);
> }
> - g_free(str_human);
> - g_free(str);
> + visitor_reset(data);
> }
> }
>
> @@ -225,8 +219,7 @@ static void test_visitor_out_enum_errors(TestOutputVisitorData *data,
> for (i = 0; i < ARRAY_SIZE(bad_values) ; i++) {
> err = NULL;
> visit_type_EnumOne(data->ov, "unused", &bad_values[i], &err);
> - g_assert(err);
> - error_free(err);
> + error_free_or_abort(&err);
> }
> }
All right, this wasn't too bad. I'd still split it up, but I'm a neat
freak in that regard. Your choice.
next prev parent reply other threads:[~2016-06-01 16:33 UTC|newest]
Thread overview: 73+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-05-19 4:40 [Qemu-devel] [PATCH v4 00/28] Add qapi-to-JSON and clone visitors Eric Blake
2016-05-19 4:40 ` [PATCH v4 01/28] qapi: Rename (one) qjson.h to qobject-json.h Eric Blake
2016-05-19 4:40 ` [Qemu-devel] " Eric Blake
2016-06-01 15:09 ` Markus Armbruster
2016-06-01 15:09 ` Markus Armbruster
2016-05-19 4:40 ` [Qemu-devel] [PATCH v4 02/28] qapi: Improve use of qmp/types.h Eric Blake
2016-05-19 4:40 ` [Qemu-devel] [PATCH v4 03/28] qemu-img: Don't leak errors when outputting JSON Eric Blake
2016-06-01 15:25 ` Markus Armbruster
2016-05-19 4:40 ` [Qemu-devel] [PATCH v4 04/28] qapi: Add parameter to visit_end_* Eric Blake
2016-06-01 15:36 ` Markus Armbruster
2016-06-07 23:20 ` Eric Blake
2016-05-19 4:40 ` [Qemu-devel] [PATCH v4 05/28] qapi: Add new visit_free() function Eric Blake
2016-06-01 16:03 ` Markus Armbruster
2016-06-03 11:46 ` Markus Armbruster
2016-05-19 4:40 ` [Qemu-devel] [PATCH v4 06/28] opts-visitor: Favor " Eric Blake
2016-06-01 16:06 ` Markus Armbruster
2016-05-19 4:40 ` [Qemu-devel] [PATCH v4 07/28] string-input-visitor: " Eric Blake
2016-06-01 16:13 ` Markus Armbruster
2016-05-19 4:40 ` [Qemu-devel] [PATCH v4 08/28] qmp-input-visitor: " Eric Blake
2016-06-01 16:19 ` Markus Armbruster
2016-05-19 4:40 ` [Qemu-devel] [PATCH v4 09/28] string-output-visitor: " Eric Blake
2016-05-19 4:40 ` [Qemu-devel] [PATCH v4 10/28] qmp-output-visitor: " Eric Blake
2016-05-19 4:40 ` [Qemu-devel] [PATCH v4 11/28] tests: Factor out common code in qapi output tests Eric Blake
2016-06-01 16:33 ` Markus Armbruster [this message]
2016-05-19 4:40 ` [Qemu-devel] [PATCH v4 12/28] qapi: Add new visit_complete() function Eric Blake
2016-06-01 17:02 ` Markus Armbruster
2016-05-19 4:40 ` [Qemu-devel] [PATCH v4 13/28] qapi: Add new clone visitor Eric Blake
2016-06-02 13:43 ` Markus Armbruster
2016-06-03 14:04 ` Markus Armbruster
2016-06-09 4:15 ` Eric Blake
2016-05-19 4:41 ` [Qemu-devel] [PATCH v4 14/28] sockets: Use new QAPI cloning Eric Blake
2016-05-19 4:41 ` [Qemu-devel] [PATCH v4 15/28] replay: " Eric Blake
2016-05-19 4:41 ` [Qemu-devel] [PATCH v4 16/28] qapi: Factor out JSON string escaping Eric Blake
2016-06-02 14:53 ` Markus Armbruster
2016-05-19 4:41 ` [Qemu-devel] [PATCH v4 17/28] qapi: Factor out JSON number formatting Eric Blake
2016-06-02 15:02 ` Markus Armbruster
2016-06-02 15:06 ` Eric Blake
2016-06-03 9:02 ` Markus Armbruster
2016-06-09 16:07 ` Eric Blake
2016-06-13 8:22 ` Markus Armbruster
2016-06-13 12:34 ` Eric Blake
2016-06-13 14:41 ` Markus Armbruster
2016-05-19 4:41 ` [Qemu-devel] [PATCH v4 18/28] qapi: Add qstring_append_printf() Eric Blake
2016-05-19 4:41 ` [Qemu-devel] [PATCH v4 19/28] qapi: Use qstring_append_chr() where appropriate Eric Blake
2016-05-19 4:41 ` [Qemu-devel] [PATCH v4 20/28] qstring: Add qstring_consume_str() Eric Blake
2016-05-19 4:41 ` [Qemu-devel] [PATCH v4 21/28] qstring: Add qstring_wrap_str() Eric Blake
2016-06-02 15:21 ` Markus Armbruster
2016-06-09 16:31 ` Eric Blake
2016-05-19 4:41 ` [Qemu-devel] [PATCH v4 22/28] qobject: Consolidate qobject_to_json() calls Eric Blake
2016-06-02 15:32 ` Markus Armbruster
2016-05-19 4:41 ` [Qemu-devel] [PATCH v4 23/28] tests: Test qobject_to_json() pretty formatting Eric Blake
2016-05-19 4:41 ` [Qemu-devel] [PATCH v4 24/28] qapi: Add JSON output visitor Eric Blake
2016-06-03 7:39 ` Markus Armbruster
2016-06-03 12:53 ` Eric Blake
2016-06-03 14:09 ` Markus Armbruster
2016-05-19 4:41 ` [Qemu-devel] [PATCH v4 25/28] qapi: Support pretty printing in " Eric Blake
2016-06-03 7:56 ` Markus Armbruster
2016-06-03 12:55 ` Eric Blake
2016-06-03 14:08 ` Markus Armbruster
2016-05-19 4:41 ` [Qemu-devel] [PATCH v4 26/28] qobject: Implement qobject_to_json() atop JSON visitor Eric Blake
2016-06-03 8:25 ` Markus Armbruster
2016-05-19 4:41 ` [Qemu-devel] [PATCH v4 27/28] qapi: Add 'any' support to JSON output Eric Blake
2016-06-03 8:29 ` Markus Armbruster
2016-05-19 4:41 ` [Qemu-devel] [PATCH v4 28/28] qemu-img: Use new JSON output formatter Eric Blake
2016-05-19 14:58 ` [Qemu-devel] [PATCH v4 00/28] Add qapi-to-JSON and clone visitors Eric Blake
2016-05-19 16:52 ` [Qemu-devel] [PATCH v4 29/28] qapi: Add strict mode to JSON output visitor Eric Blake
2016-05-19 20:18 ` Eric Blake
2016-06-03 8:36 ` Markus Armbruster
2016-06-03 9:21 ` Markus Armbruster
2016-05-19 17:05 ` [Qemu-devel] [PATCH v4 00/28] Add qapi-to-JSON and clone visitors Markus Armbruster
2016-06-03 12:09 ` Markus Armbruster
2016-06-09 16:16 ` Eric Blake
2016-06-13 8:26 ` Markus Armbruster
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=8760tsq36a.fsf@dusky.pond.sub.org \
--to=armbru@redhat.com \
--cc=eblake@redhat.com \
--cc=mdroth@linux.vnet.ibm.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.