qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH 1/1] Add -version-simple argument, printing only


From: Anthony Liguori
Subject: Re: [Qemu-devel] [PATCH 1/1] Add -version-simple argument, printing only version number.
Date: Fri, 14 May 2010 08:48:58 -0500
User-agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.5) Gecko/20091209 Fedora/3.0-4.fc12 Lightning/1.0pre Thunderbird/3.0

On 05/14/2010 05:06 AM, Daniel P. Berrange wrote:
On Fri, May 14, 2010 at 11:42:57AM +0200, Markus Armbruster wrote:
"Daniel P. Berrange"<address@hidden>  writes:

On Thu, May 13, 2010 at 10:32:52AM +0200, address@hidden wrote:
From: Jes Sorensen<address@hidden>

Add -version-simple argument for QEMU, printing just the version
number, without any supporting text.

This makes it simpler for other apps, such as libvirt, to parse the
version string from QEMU independant of how the naming string may
change.

Signed-off-by: Jes Sorensen<address@hidden>
---
  qemu-options.hx |    8 ++++++++
  vl.c            |    9 +++++++++
  2 files changed, 17 insertions(+), 0 deletions(-)

diff --git a/qemu-options.hx b/qemu-options.hx
index 12f6b51..e4f3979 100644
--- a/qemu-options.hx
+++ b/qemu-options.hx
@@ -27,6 +27,14 @@ STEXI
  Display version information and exit
  ETEXI

+DEF("version-simple", 0, QEMU_OPTION_version_simple,
+    "-version-simple display version information and exit\n", QEMU_ARCH_ALL)
+STEXI
address@hidden -version-simple
address@hidden -version-simple
+Display basic version number information and exit
+ETEXI
+
  DEF("M", HAS_ARG, QEMU_OPTION_M,
      "-M machine      select emulated machine (-M ? for list)\n", 
QEMU_ARCH_ALL)
  STEXI
diff --git a/vl.c b/vl.c
index 85bcc84..5adca87 100644
--- a/vl.c
+++ b/vl.c
@@ -2015,6 +2015,11 @@ static void version(void)
      printf("QEMU emulator version " QEMU_VERSION QEMU_PKGVERSION ", Copyright (c) 
2003-2008 Fabrice Bellard\n");
  }

+static void version_simple(void)
+{
+    printf(QEMU_VERSION QEMU_PKGVERSION "\n");
+}
+
  static void help(int exitcode)
  {
      const char *options_help =
@@ -2960,6 +2965,10 @@ int main(int argc, char **argv, char **envp)
                  version();
                  exit(0);
                  break;
+            case QEMU_OPTION_version_simple:
+                version_simple();
+                exit(0);
+                break;
              case QEMU_OPTION_m: {
                  uint64_t value;
                  char *ptr;
This omits the KVM version string which is something we also want to see.
It would also be nice to avoid having to parse the -help output to determine
ARGV supported too. I wonder if it would be a good idea to just produce a
well structured equivalent to -help that provides the same data, but in
JSON format for sane parsing. That would let peple easily determine the
supported ARGV as well as version number(s)
I'm all for machine-readable self-documentation.  And the place for that
is QMP.  Humble beginnings are already there:

{ "execute": "query-version", "arguments": { } }
-->  {"return": {"qemu": "0.12.50", "package": ""}}

{ "execute": "query-commands", "arguments": { } }
-->  {"return": [{"name": "quit"}, {"name": "eject"}, [...]

Any practical problems with use of QMP instead of parsing command line
option output?
It is unneccessarily complex for such a simple task, requiring you to
configure&  connect to the monitor&  do the capabilities negotiaton
and then issue the command.

To just query the version requires this ridiculous interaction:

   $ qemu -chardev stdio,id=monitor -monitor chardev=monitor,mode=control
   {"execute":"qmp_capabilities"}
   {"QMP": {"version": {"qemu": "0.12.1", "package": " (qemu-kvm-0.12.1.2)"}, 
"capabilities": []}}
   {"execute":"query-version"}
   {"return": {"qemu": "0.12.50", "package": ""}}


I'm suggesting we just allow some simple syntactic sugar on the command
line for the handful of QMP commands that are just returning static info
about the binary, that are not affected by VM state.

eg, make this work:

   $ qemu -query-version
   {"qemu": "0.12.50", "package": ""}

No need for package. Vendors can use vendor extensions to add whatever info they want.

But we should avoid an encoded string, it would be better as:

{"major": 0, "minor": 12, "release": 50}

And then it could be:

{"major": 0, "minor": 12, "release": 50, "__org.linux-kvm.release": 1, "__com.redhat.RHEL6.release": 13}

We could also just pretty print it:

major: 0
minor: 12
release: 50
__org.linux-kvm.release: 1
__com.redhat.RHEL6.release: 13

Regards,

Anthony Liguori

Daniel




reply via email to

[Prev in Thread] Current Thread [Next in Thread]