Add --xml to gdbus-tool to print raw introspected XML
authorChristian Persch <chpe@gnome.org>
Sun, 13 Jun 2010 13:16:33 +0000 (15:16 +0200)
committerChristian Persch <chpe@gnome.org>
Sun, 13 Jun 2010 22:02:57 +0000 (00:02 +0200)
Bug #621442.

docs/reference/gio/gdbus.xml
gio/gdbus-tool.c

index e2f3354..280b478 100644 (file)
@@ -22,6 +22,7 @@
     </group>
     <arg choice="plain">--dest <replaceable>bus_name</replaceable></arg>
     <arg choice="plain">--object-path <replaceable>/path/to/object</replaceable></arg>
+    <arg choice="plain">--xml</arg>
   </cmdsynopsis>
   <cmdsynopsis>
     <command>gdbus</command>
index 11ffb6c..9cd504a 100644 (file)
@@ -1155,11 +1155,13 @@ dump_node (GDBusConnection      *c,
 
 static gchar *opt_introspect_dest = NULL;
 static gchar *opt_introspect_object_path = NULL;
+static gboolean opt_introspect_xml = FALSE;
 
 static const GOptionEntry introspect_entries[] =
 {
   { "dest", 'd', 0, G_OPTION_ARG_STRING, &opt_introspect_dest, N_("Destination name to introspect"), NULL},
   { "object-path", 'o', 0, G_OPTION_ARG_STRING, &opt_introspect_object_path, N_("Object path to introspect"), NULL},
+  { "xml", 'x', 0, G_OPTION_ARG_NONE, &opt_introspect_xml, N_("Print XML"), NULL},
   { NULL }
 };
 
@@ -1325,16 +1327,23 @@ handle_introspect (gint        *argc,
     }
   g_variant_get (result, "(&s)", &xml_data);
 
-  error = NULL;
-  node = g_dbus_node_info_new_for_xml (xml_data, &error);
-  if (node == NULL)
+  if (opt_introspect_xml)
     {
-      g_printerr (_("Error parsing introspection XML: %s\n"), error->message);
-      g_error_free (error);
-      goto out;
+      g_print ("%s", xml_data);
     }
+  else
+    {
+      error = NULL;
+      node = g_dbus_node_info_new_for_xml (xml_data, &error);
+      if (node == NULL)
+        {
+          g_printerr (_("Error parsing introspection XML: %s\n"), error->message);
+          g_error_free (error);
+          goto out;
+        }
 
-  dump_node (c, opt_introspect_dest, node, 0, opt_introspect_object_path);
+      dump_node (c, opt_introspect_dest, node, 0, opt_introspect_object_path);
+    }
 
   ret = TRUE;