[packages/virt-manager] - numerous upstream fixes from project git, see https://git.fedorahosted.org/cgit/virt-manager.git

hawk hawk at pld-linux.org
Thu Jun 12 14:12:13 CEST 2014


commit 6288b4e1a47f1bb44dbcf330f8401dbfe2e0b02f
Author: Marcin Krol <hawk at tld-linux.org>
Date:   Thu Jun 12 12:08:53 2014 +0000

    - numerous upstream fixes from project git, see
      https://git.fedorahosted.org/cgit/virt-manager.git/log/
      for details

 virt-manager-git.patch | 8683 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 8683 insertions(+)
---
diff --git a/virt-manager-git.patch b/virt-manager-git.patch
new file mode 100644
index 0000000..8f015e1
--- /dev/null
+++ b/virt-manager-git.patch
@@ -0,0 +1,8683 @@
+diff -urN virt-manager-1.0.1/data/virt-manager.appdata.xml virt-manager/data/virt-manager.appdata.xml
+--- virt-manager-1.0.1/data/virt-manager.appdata.xml	2014-02-17 17:37:52.000000000 +0000
++++ virt-manager/data/virt-manager.appdata.xml	2014-06-12 11:22:20.805891891 +0000
+@@ -2,7 +2,8 @@
+ <!-- Copyright 2013 Cole Robinson -->
+ <application>
+  <id type="desktop">virt-manager.desktop</id>
+- <licence>CC0</licence>
++ <metadata_license>CC0-1.0</metadata_license>
++ <project_license>GPL-2.0+</project_license>
+  <name>Virtual Machine Manager</name>
+  <summary>Graphically manage KVM, Xen, or LXC via libvirt</summary>
+  <description>
+diff -urN virt-manager-1.0.1/man/virt-install.pod virt-manager/man/virt-install.pod
+--- virt-manager-1.0.1/man/virt-install.pod	2014-03-22 16:27:02.000000000 +0000
++++ virt-manager/man/virt-install.pod	2014-06-12 11:22:20.806891891 +0000
+@@ -123,6 +123,18 @@
+ 
+ Use --metadata=? to see a list of all available sub options. Complete details at L<http://libvirt.org/formatdomain.html#elementsMetadata>
+ 
++=item --events OPT=VAL,[...]
++
++Specify events values for the guest. Possible options include on_poweroff, on_reboot, and on_crash.
++
++Use --events=? to see a list of all available sub options. Complete details at L<http://libvirt.org/formatdomain.html#elementsEvents>
++
++=item --resource OPT=VAL,[...]
++
++Specify resource partitioning for the guest.
++
++Use --resource=? to see a list of all available sub options. Complete details at L<http://libvirt.org/formatdomain.html#resPartition>
++
+ =item --vcpus=VCPUS[,maxvcpus=MAX][,sockets=#][,cores=#][,threads=#][,cpuset=CPUSET]
+ 
+ Number of virtual cpus to configure for the guest. If 'maxvcpus' is specified,
+@@ -264,7 +276,7 @@
+ 
+ =item --pm=PMOPTS
+ 
+-Configure guest power management features. Example suboptions include suspend_to_ram=on|off and suspend_to_disk=on|off
++Configure guest power management features. Example suboptions include suspend_to_mem=on|off and suspend_to_disk=on|off
+ 
+ Use --pm=? to see a list of all available sub options. Complete details at L<http://libvirt.org/formatdomain.html#elementsPowerManagement>
+ 
+@@ -278,7 +290,7 @@
+ 
+ =item  --cdrom=CDROM
+ 
+-File or device use as a virtual CD-ROM device for fully virtualized guests.
++File or device used as a virtual CD-ROM device for fully virtualized guests.
+ It can be path to an ISO image, or to a CDROM device. It can also be a URL
+ from which to fetch/access a minimal boot ISO image. The URLs take the same
+ format as described for the C<--location> argument. If a cdrom has been
+@@ -399,11 +411,8 @@
+ the install media (currently only supported for URL installs). Autodetection
+ can be disabled with the special value 'none'.
+ 
+-If the special value 'list' is passed, virt-install will print the full
+-list of variant values and exit. The printed format is not a stable
+-interface, DO NOT PARSE IT.
+-
+-Use '--os-variant list' to see the full OS list
++Use the command "osinfo-query os" to get the list of the accepted OS
++variants.
+ 
+ =item --boot=BOOTOPTS
+ 
+@@ -527,7 +536,7 @@
+ 
+ =item B<device>
+ 
+-Disk device type. Value can be 'cdrom', 'disk', or 'floppy'. Default is
++Disk device type. Value can be 'cdrom', 'disk', 'lun' or 'floppy'. Default is
+ 'disk'. If a 'cdrom' is specified, and no install method is chosen, the
+ cdrom is used as the install media.
+ 
+@@ -576,6 +585,13 @@
+ 'writethrough' provides read caching. 'writeback' provides
+ read and write caching.
+ 
++=item B<discard>
++
++Whether discard (also known as "trim" or "unmap") requests are ignored
++or passed to the filesystem. The value can be either "unmap" (allow
++the discard request to be passed) or "ignore" (ignore the discard
++request). Since 1.0.6 (QEMU and KVM only)
++
+ =item B<format>
+ 
+ Disk image format. For file volumes, this can be 'raw', 'qcow2', 'vmdk', etc. See format types in L<http://libvirt.org/storage.html> for possible values. This is often mapped to the B<driver_type> value as well.
+diff -urN virt-manager-1.0.1/man/virt-manager.pod virt-manager/man/virt-manager.pod
+--- virt-manager-1.0.1/man/virt-manager.pod	2014-03-22 16:27:02.000000000 +0000
++++ virt-manager/man/virt-manager.pod	2014-06-12 11:22:20.806891891 +0000
+@@ -93,7 +93,7 @@
+ 
+ =head1 BUGS
+ 
+-Please see L<http://virt-manager.org/page/BugReporting>
++Please see L<http://virt-manager.org/bugs/>
+ 
+ =head1 COPYRIGHT
+ 
+diff -urN virt-manager-1.0.1/setup.py virt-manager/setup.py
+--- virt-manager-1.0.1/setup.py	2014-02-17 17:37:52.000000000 +0000
++++ virt-manager/setup.py	2014-06-12 11:22:20.912891892 +0000
+@@ -1,8 +1,6 @@
+ #!/usr/bin/env python2
+ # Copyright (C) 2013, 2014 Red Hat, Inc.
+ 
+-# pylint: disable=W0201
+-# Attribute defined outside __init__: custom commands require breaking this
+ 
+ import datetime
+ import glob
+@@ -22,6 +20,8 @@
+ from virtcli import cliconfig
+ 
+ 
++# pylint: disable=attribute-defined-outside-init
++
+ def _generate_potfiles_in():
+     def find(dirname, ext):
+         ret = []
+@@ -324,6 +324,8 @@
+          "Hide config bits that are not considered stable (default=no)"),
+         ("default-graphics=", None,
+          "Default graphics type (spice or vnc) (default=spice)"),
++        ("with-bhyve=", None,
++         "whether enable Bhyve connection support (default=no)"),
+ 
+     ]
+     description = "Configure the build, similar to ./configure"
+@@ -341,6 +343,7 @@
+         self.preferred_distros = None
+         self.stable_defaults = None
+         self.default_graphics = None
++        self.with_bhyve = None
+ 
+ 
+     def run(self):
+@@ -364,6 +367,8 @@
+                          self.stable_defaults)
+         if self.default_graphics is not None:
+             template += "default_graphics = %s\n" % self.default_graphics
++        if self.with_bhyve is not None:
++            template += "with_bhyve = %s\n" % self.with_bhyve
+ 
+         file(cliconfig.cfgpath, "w").write(template)
+         print "Generated %s" % cliconfig.cfgpath
+diff -urN virt-manager-1.0.1/tests/capabilities.py virt-manager/tests/capabilities.py
+--- virt-manager-1.0.1/tests/capabilities.py	2014-03-22 16:26:50.000000000 +0000
++++ virt-manager/tests/capabilities.py	2014-06-12 11:22:20.913891892 +0000
+@@ -20,6 +20,7 @@
+ 
+ from tests import utils
+ from virtinst import CapabilitiesParser as capabilities
++from virtinst.capabilities import _CPUMapFileValues
+ 
+ 
+ def build_host_feature_dict(feature_list):
+@@ -221,6 +222,7 @@
+         test_utils(new_caps_no_kvm, False, True, False, False, False)
+ 
+     def testCPUMap(self):
++        _CPUMapFileValues.update_cpu_filename("tests/capabilities-xml/cpu_map.xml")
+         caps = self._buildCaps("libvirt-0.7.6-qemu-caps.xml")
+         cpu_64 = caps.get_cpu_values(None, "x86_64")
+         cpu_32 = caps.get_cpu_values(None, "i486")
+diff -urN virt-manager-1.0.1/tests/clitest.py virt-manager/tests/clitest.py
+--- virt-manager-1.0.1/tests/clitest.py	2014-03-22 16:26:50.000000000 +0000
++++ virt-manager/tests/clitest.py	2014-06-12 11:22:21.018891898 +0000
+@@ -123,12 +123,10 @@
+ }
+ 
+ 
+-
+ ######################
+ # Test class helpers #
+ ######################
+ 
+-
+ class Command(object):
+     """
+     Instance of a single cli command to test
+@@ -378,7 +376,7 @@
+         self.categories = {}
+         self.cmds = []
+ 
+-    def _default_args(self, cli, iscompare):
++    def _default_args(self, cli, iscompare, auto_printarg):
+         args = ""
+         if not iscompare:
+             args = "--debug"
+@@ -392,7 +390,7 @@
+             if "--ram " not in cli:
+                 args += " --ram 64"
+ 
+-        if iscompare:
++        if iscompare and auto_printarg:
+             if self.appname == "virt-install":
+                 if (not cli.count("--print-xml") and
+                     not cli.count("--print-step") and
+@@ -418,11 +416,13 @@
+         return obj
+ 
+     def _add(self, catname, testargs, valid, compfile,
+-             skip_check=None, compare_check=None, input_file=None):
++             skip_check=None, compare_check=None, input_file=None,
++             auto_printarg=True):
+ 
+         category = self.categories[catname]
+         args = category.default_args + " " + testargs
+-        args = self._default_args(args, bool(compfile)) + " " + args
++        args = (self._default_args(args, bool(compfile), auto_printarg) +
++            " " + args)
+         cmdstr = "./%s %s" % (self.appname, args)
+ 
+         cmd = Command(cmdstr)
+@@ -472,6 +472,7 @@
+ c.add_valid("--memtune hard_limit=10,soft_limit=20,swap_hard_limit=30,min_guarantee=40")  # --memtune
+ c.add_valid("--memorybacking hugepages=yes,nosharepages=yes,locked=yes")  # --memorybacking nosharepages,locked
+ c.add_valid("--idmap uid_start=0,uid_target=1000,uid_count=10,gid_start=0,gid_target=1000,gid_count=10")  # --idmap
++c.add_valid("--resource partition=/virtualmachines/production")  # --resource
+ c.add_compare("--connect %(DEFAULTURI)s --cpuset auto --vcpus 2", "cpuset-auto")  # --cpuset=auto actually works
+ c.add_invalid("--vcpus 32 --cpuset=969-1000")  # Bogus cpuset
+ c.add_invalid("--vcpus 32 --cpuset=autofoo")  # Bogus cpuset
+@@ -545,7 +546,7 @@
+ 
+ c = vinst.add_category("misc", "--nographics --noautoconsole")
+ c.add_valid("--panic help --disk=?")  # Make sure introspection doesn't blow up
+-c.add_compare("", "noargs-fail")  # No arguments
++c.add_compare("", "noargs-fail", auto_printarg=False)  # No arguments
+ c.add_compare("--hvm --nodisks --pxe --print-step all", "simple-pxe")  # Diskless PXE install
+ c.add_compare("--hvm --cdrom %(EXISTIMG2)s --file %(EXISTIMG1)s --os-variant win2k3 --wait 0 --vcpus cores=4 --controller usb,model=none", "w2k3-cdrom")  # HVM windows install with disk
+ c.add_compare("""--hvm --pxe \
+@@ -554,12 +555,12 @@
+ --controller usb,model=ich9-uhci2,address=0:0:4.1,index=0,master=2 \
+ --controller usb,model=ich9-uhci3,address=0:0:4.2,index=0,master=4 \
+ --disk %(EXISTUPPER)s,cache=writeback,io=threads,perms=sh,serial=WD-WMAP9A966149,boot_order=2 \
+---disk %(NEWIMG1)s,sparse=false,size=.001,perms=ro,error_policy=enospace \
++--disk %(NEWIMG1)s,sparse=false,size=.001,perms=ro,error_policy=enospace,discard=unmap \
+ --disk device=cdrom,bus=sata,read_bytes_sec=1,read_iops_sec=2,total_bytes_sec=10,total_iops_sec=20,write_bytes_sec=5,write_iops_sec=6 \
+ --disk size=1 \
+ --serial tcp,host=:2222,mode=bind,protocol=telnet \
+ --filesystem /source,/target,mode=squash \
+---network user,mac=12:34:56:78:11:22 \
++--network user,mac=12:34:56:78:11:22,portgroup=foo \
+ --network bridge=foobar,model=virtio,driver_name=qemu,driver_queues=3 \
+ --network type=direct,source=eth5,source_mode=vepa,target=mytap12,virtualport_type=802.1Qbg,virtualport_managerid=12,virtualport_typeid=1193046,virtualport_typeidversion=1,virtualport_instanceid=09b11c53-8b5c-4eeb-8f00-d84eaa0aaa3b,boot_order=1 \
+ --channel spicevmc \
+@@ -581,7 +582,7 @@
+ c.add_valid("--hvm --import --disk path=%(EXISTIMG1)s")  # FV Import install
+ c.add_valid("--hvm --import --disk path=%(EXISTIMG1)s --prompt --force")  # Working scenario w/ prompt shouldn't ask anything
+ c.add_valid("--paravirt --import --disk path=%(EXISTIMG1)s")  # PV Import install
+-c.add_valid("--paravirt --import --disk path=%(EXISTIMG1)s --print-xml")  # PV Import install, print single XML
++c.add_valid("--paravirt --disk path=%(EXISTIMG1)s --print-xml")  # print single XML, implied import install
+ c.add_valid("--hvm --import --disk path=%(EXISTIMG1)s,device=floppy")  # Import a floppy disk
+ c.add_valid("--hvm --nodisks --pxe --autostart")  # --autostart flag
+ c.add_valid("--hvm --nodisks --pxe --description \"foobar & baz\"")  # --description
+@@ -805,6 +806,7 @@
+ c.add_compare("""--metadata name=foo-my-new-name,uuid=12345678-12F4-1234-1234-123456789AFA,description="hey this is my
+ new
+ very,very=new desc\\\'",title="This is my,funky=new title" """, "edit-simple-metadata")
++c.add_compare("--events on_poweroff=destroy,on_reboot=restart,on_crash=preserve", "edit-simple-events")
+ c.add_compare("--memory 500,maxmemory=1000,hugepages=off", "edit-simple-memory")
+ c.add_compare("--vcpus 10,maxvcpus=20,cores=5,sockets=4,threads=1", "edit-simple-vcpus")
+ c.add_compare("--cpu model=pentium2,+x2apic,forbid=pbe", "edit-simple-cpu")
+@@ -923,8 +925,8 @@
+ 
+ 
+ c = vclon.add_category("misc", "")
+-c.add_compare("--connect %(KVMURI)s -o test-for-clone --auto-clone --clone-running", "clone-auto1")
+-c.add_compare("-o test-clone-simple --name newvm --auto-clone --clone-running", "clone-auto2")
++c.add_compare("--connect %(KVMURI)s -o test-for-clone --auto-clone --clone-running", "clone-auto1", compare_check=support.SUPPORT_CONN_BARE_BACKINGSTORE)
++c.add_compare("-o test-clone-simple --name newvm --auto-clone --clone-running", "clone-auto2", compare_check=support.SUPPORT_CONN_BARE_BACKINGSTORE)
+ c.add_valid("-o test --auto-clone")  # Auto flag, no storage
+ c.add_valid("--original-xml %(CLONE_DISK_XML)s --auto-clone")  # Auto flag w/ storage,
+ c.add_valid("--original-xml %(CLONE_STORAGE_XML)s --auto-clone")  # Auto flag w/ managed storage,
+diff -urN virt-manager-1.0.1/tests/cli-test-xml/compare/virt-clone-clone-auto1.xml virt-manager/tests/cli-test-xml/compare/virt-clone-clone-auto1.xml
+--- virt-manager-1.0.1/tests/cli-test-xml/compare/virt-clone-clone-auto1.xml	2014-02-17 17:37:52.000000000 +0000
++++ virt-manager/tests/cli-test-xml/compare/virt-clone-clone-auto1.xml	2014-06-12 11:22:20.914891892 +0000
+@@ -22,16 +22,19 @@
+     <disk type="block" device="floppy">
+       <driver type="vmdk"/>
+       <source dev="/dev/disk-pool/diskvol1-clone"/>
++      <backingStore/>
+       <target dev="fda" bus="fdc"/>
+       <address type="drive" controller="0" bus="0" target="0" unit="0"/>
+     </disk>
+     <disk type="block" device="disk">
+       <source dev="/dev/disk-pool/diskvol2"/>
++      <backingStore/>
+       <target dev="sda" bus="scsi"/>
+       <readonly/>
+       <address type="drive" controller="0" bus="0" target="0" unit="0"/>
+     </disk>
+     <disk type="block" device="cdrom">
++      <backingStore/>
+       <target dev="sdb" bus="scsi"/>
+       <readonly/>
+       <address type="drive" controller="0" bus="0" target="0" unit="1"/>
+@@ -39,6 +42,7 @@
+     <disk type="block" device="disk">
+       <driver type="qcow2"/>
+       <source dev="/dev/default-pool/collidevol1.img"/>
++      <backingStore/>
+       <target dev="sdc" bus="scsi"/>
+       <readonly/>
+       <shareable/>
+@@ -46,11 +50,13 @@
+     </disk>
+     <disk type="file" device="disk">
+       <source file="/dev/default-pool/default-vol-clone"/>
++      <backingStore/>
+       <target dev="hda" bus="ide"/>
+       <address type="drive" controller="0" bus="0" target="0" unit="0"/>
+     </disk>
+     <disk type="file" device="disk">
+       <source file="/dev/default-pool/testvol2-clone.img"/>
++      <backingStore/>
+       <target dev="hdb" bus="ide"/>
+       <address type="drive" controller="0" bus="0" target="0" unit="1"/>
+     </disk>
+diff -urN virt-manager-1.0.1/tests/cli-test-xml/compare/virt-clone-clone-auto2.xml virt-manager/tests/cli-test-xml/compare/virt-clone-clone-auto2.xml
+--- virt-manager-1.0.1/tests/cli-test-xml/compare/virt-clone-clone-auto2.xml	2014-02-17 17:37:52.000000000 +0000
++++ virt-manager/tests/cli-test-xml/compare/virt-clone-clone-auto2.xml	2014-06-12 11:22:20.914891892 +0000
+@@ -22,6 +22,7 @@
+     <disk type="file" device="disk">
+       <driver type="qcow2"/>
+       <source file="/dev/default-pool/newvm.img"/>
++      <backingStore/>
+       <target dev="hda" bus="ide"/>
+       <address type="drive" controller="0" bus="0" target="0" unit="0"/>
+     </disk>
+diff -urN virt-manager-1.0.1/tests/cli-test-xml/compare/virt-convert-ovf-compare.xml virt-manager/tests/cli-test-xml/compare/virt-convert-ovf-compare.xml
+--- virt-manager-1.0.1/tests/cli-test-xml/compare/virt-convert-ovf-compare.xml	2014-02-18 22:43:49.000000000 +0000
++++ virt-manager/tests/cli-test-xml/compare/virt-convert-ovf-compare.xml	2014-06-12 11:22:20.914891892 +0000
+@@ -1,5 +1,3 @@
+-Copying test.ovf-disk1.vmdk to /tmp/test.ovf-disk1
+-Copying testfile to /tmp/testfile
+ <domain type="kvm">
+   <name>test.ovf</name>
+   <uuid>00000000-1111-2222-3333-444444444444</uuid>
+diff -urN virt-manager-1.0.1/tests/cli-test-xml/compare/virt-convert-vmx-compare.xml virt-manager/tests/cli-test-xml/compare/virt-convert-vmx-compare.xml
+--- virt-manager-1.0.1/tests/cli-test-xml/compare/virt-convert-vmx-compare.xml	2014-02-18 22:43:49.000000000 +0000
++++ virt-manager/tests/cli-test-xml/compare/virt-convert-vmx-compare.xml	2014-06-12 11:22:20.914891892 +0000
+@@ -1,4 +1,3 @@
+-Running /usr/bin/qemu-img convert -O qcow2 fedora.vmdk /var/lib/libvirt/images/fedora.qcow2
+ <domain type="kvm">
+   <name>fedora</name>
+   <uuid>00000000-1111-2222-3333-444444444444</uuid>
+diff -urN virt-manager-1.0.1/tests/cli-test-xml/compare/virt-install-many-devices.xml virt-manager/tests/cli-test-xml/compare/virt-install-many-devices.xml
+--- virt-manager-1.0.1/tests/cli-test-xml/compare/virt-install-many-devices.xml	2014-02-17 17:37:52.000000000 +0000
++++ virt-manager/tests/cli-test-xml/compare/virt-install-many-devices.xml	2014-06-12 11:22:20.914891892 +0000
+@@ -3,10 +3,6 @@
+   <uuid>00000000-1111-2222-3333-444444444444</uuid>
+   <memory>65536</memory>
+   <currentMemory>65536</currentMemory>
+-  <vcpu>1</vcpu>
+-  <numatune>
+-    <memory mode="preferred" nodeset="1-3,5"/>
+-  </numatune>
+   <blkiotune>
+     <weight>200</weight>
+     <device>
+@@ -14,6 +10,10 @@
+       <weight>300</weight>
+     </device>
+   </blkiotune>
++  <vcpu>1</vcpu>
++  <numatune>
++    <memory mode="preferred" nodeset="1-3,5"/>
++  </numatune>
+   <os>
+     <type arch="i686">hvm</type>
+     <loader>/foo/bar</loader>
+@@ -52,7 +52,7 @@
+       <boot order="2"/>
+     </disk>
+     <disk type="file" device="disk">
+-      <driver error_policy="enospace"/>
++      <driver discard="unmap" error_policy="enospace"/>
+       <source file="/dev/default-pool/new1.img"/>
+       <target dev="hdb" bus="ide"/>
+       <readonly/>
+@@ -93,6 +93,7 @@
+       <target dir="/target"/>
+     </filesystem>
+     <interface type="user">
++      <source portgroup="foo"/>
+       <mac address="12:34:56:78:11:22"/>
+     </interface>
+     <interface type="bridge">
+@@ -147,10 +148,6 @@
+   <uuid>00000000-1111-2222-3333-444444444444</uuid>
+   <memory>65536</memory>
+   <currentMemory>65536</currentMemory>
+-  <vcpu>1</vcpu>
+-  <numatune>
+-    <memory mode="preferred" nodeset="1-3,5"/>
+-  </numatune>
+   <blkiotune>
+     <weight>200</weight>
+     <device>
+@@ -158,6 +155,10 @@
+       <weight>300</weight>
+     </device>
+   </blkiotune>
++  <vcpu>1</vcpu>
++  <numatune>
++    <memory mode="preferred" nodeset="1-3,5"/>
++  </numatune>
+   <os>
+     <type arch="i686">hvm</type>
+     <loader>/foo/bar</loader>
+@@ -196,7 +197,7 @@
+       <boot order="2"/>
+     </disk>
+     <disk type="file" device="disk">
+-      <driver error_policy="enospace"/>
++      <driver discard="unmap" error_policy="enospace"/>
+       <source file="/dev/default-pool/new1.img"/>
+       <target dev="hdb" bus="ide"/>
+       <readonly/>
+@@ -237,6 +238,7 @@
+       <target dir="/target"/>
+     </filesystem>
+     <interface type="user">
++      <source portgroup="foo"/>
+       <mac address="12:34:56:78:11:22"/>
+     </interface>
+     <interface type="bridge">
+diff -urN virt-manager-1.0.1/tests/cli-test-xml/compare/virt-xml-edit-clear-disk.xml virt-manager/tests/cli-test-xml/compare/virt-xml-edit-clear-disk.xml
+--- virt-manager-1.0.1/tests/cli-test-xml/compare/virt-xml-edit-clear-disk.xml	2014-02-17 17:37:52.000000000 +0000
++++ virt-manager/tests/cli-test-xml/compare/virt-xml-edit-clear-disk.xml	2014-06-12 11:22:20.916891892 +0000
+@@ -4,10 +4,10 @@
+ -    <disk type="block" device="floppy">
+ -      <source dev="/dev/null"/>
+ +    <disk device="floppy">
+-+      <source file="/foo/bar"/>
+        <target dev="fda" bus="fdc"/>
+ -      <boot order="5"/>
+ -      <address type="drive" controller="0" bus="0" target="0" unit="0"/>
+++      <source file="/foo/bar"/>
+      </disk>
+      <disk type="dir" device="floppy">
+        <source dir="/tmp"/>
+diff -urN virt-manager-1.0.1/tests/cli-test-xml/compare/virt-xml-edit-simple-events.xml virt-manager/tests/cli-test-xml/compare/virt-xml-edit-simple-events.xml
+--- virt-manager-1.0.1/tests/cli-test-xml/compare/virt-xml-edit-simple-events.xml	1970-01-01 00:00:00.000000000 +0000
++++ virt-manager/tests/cli-test-xml/compare/virt-xml-edit-simple-events.xml	2014-06-12 11:22:20.916891892 +0000
+@@ -0,0 +1,11 @@
++   </clock>
++   <on_poweroff>destroy</on_poweroff>
++   <on_reboot>restart</on_reboot>
++-  <on_crash>restart</on_crash>
+++  <on_crash>preserve</on_crash>
++   <pm>
++     <suspend-to-mem enabled="no"/>
++   </pm>
++
++Domain 'test-many-devices' defined successfully.
++Changes will take effect after the next domain shutdown.
+\ No newline at end of file
+diff -urN virt-manager-1.0.1/tests/image.py virt-manager/tests/image.py
+--- virt-manager-1.0.1/tests/image.py	2014-03-22 16:26:50.000000000 +0000
++++ virt-manager/tests/image.py	2014-06-12 11:22:21.065891894 +0000
+@@ -25,7 +25,7 @@
+ qemuuri = "__virtinst_test__test:///default,caps=%s/tests/capabilities-xml/capabilities-kvm.xml,qemu,predictable" % os.getcwd()
+ 
+ 
+-# pylint: disable=W0212
++# pylint: disable=protected-access
+ # Access to protected member, needed to unittest stuff
+ 
+ class TestImageParser(unittest.TestCase):
+diff -urN virt-manager-1.0.1/tests/__init__.py virt-manager/tests/__init__.py
+--- virt-manager-1.0.1/tests/__init__.py	2014-03-22 16:26:50.000000000 +0000
++++ virt-manager/tests/__init__.py	2014-06-12 11:22:20.912891892 +0000
+@@ -33,7 +33,7 @@
+ 
+ from tests import utils
+ 
+-# pylint: disable=W0212
++# pylint: disable=protected-access
+ # Access to protected member, needed to unittest stuff
+ 
+ # Force certain helpers to return consistent values
+diff -urN virt-manager-1.0.1/tests/misc.py virt-manager/tests/misc.py
+--- virt-manager-1.0.1/tests/misc.py	2014-03-22 16:26:50.000000000 +0000
++++ virt-manager/tests/misc.py	2014-06-12 11:22:21.088891894 +0000
+@@ -22,8 +22,7 @@
+ import sys
+ import unittest
+ 
+-_badmodules = ["gi.repository.Gtk", "gi.repository.GObject",
+-              "gi.repository.Gdk", "gi.repository.GLib"]
++_badmodules = ["gi.repository.Gtk", "gi.repository.Gdk"]
+ 
+ 
+ def _restore_modules(fn):
+diff -urN virt-manager-1.0.1/tests/pep8.cfg virt-manager/tests/pep8.cfg
+--- virt-manager-1.0.1/tests/pep8.cfg	2014-01-18 20:55:50.000000000 +0000
++++ virt-manager/tests/pep8.cfg	2014-06-12 11:22:21.115891895 +0000
+@@ -2,7 +2,7 @@
+ 
+ format = pylint
+ 
+-# E12*:            # Continuation line indents
++# E1* :            # Continuation line indents
+ # E203:            # Space before : in dictionary defs
+ # E221:            # Multiple spaces before operator
+ #                    (warngs about column aligning assigments)
+@@ -11,4 +11,4 @@
+ # E303:            # Too many blank lines
+ # E501:            # Line too long
+ 
+-ignore=E121,E122,E123,E124,E125,E126,E127,E128,E203,E221,E241,E301,E303,E501
++ignore=E121,E122,E123,E124,E125,E126,E127,E128,E129,E131,E203,E221,E241,E301,E303,E501
+diff -urN virt-manager-1.0.1/tests/pylint.cfg virt-manager/tests/pylint.cfg
+--- virt-manager-1.0.1/tests/pylint.cfg	2014-03-22 15:53:22.000000000 +0000
++++ virt-manager/tests/pylint.cfg	2014-06-12 11:22:21.115891895 +0000
+@@ -34,29 +34,7 @@
+ # multiple time (only on the command line, not in the configuration file where
+ # it should appear only once).
+ 
+-# Design: Things like 'too many arguments'
+-# C0103: Name doesn't match some style regex
+-# C0111: No docstring
+-# C0301: Line too long
+-# C0302: Too many lines in module
+-# C0325: Superfluous parens
+-# C0326: Bad whitespace
+-# I0011: Warn about locally disabled pylint msgs
+-# R0201: Method could be a function
+-#
+-# W0108: Lambda may not be necessary
+-# W0142: Used * or ** magic*
+-# W0603: Using the global statement
+-# W0702: No exception type specified for 'catch'
+-# W0703: Catch 'Exception'
+-# W1401: Anomalous backslash in string
+-#
+-# May be useful to enable someday
+-# Similarities: Code duplication
+-# W1001: Use of 'property' on old style class,
+-#        pylint can't detect our Gtk subclasses are new style
+-# W0511: FIXME and XXX: messages
+-disable=Design,Similarities,C0103,C0111,C0301,C0302,C0325,C0326,I0011,R0201,W0108,W0142,W0603,W0702,W0703,W1401,W1001,W0511
++disable=Design,Similarities,invalid-name,missing-docstring,line-too-long,too-many-lines,superfluous-parens,bad-whitespace,locally-disabled,no-self-use,unnecessary-lambda,star-args,fixme,global-statement,bare-except,anomalous-backslash-in-string,broad-except
+ 
+ 
+ [REPORTS]
+diff -urN virt-manager-1.0.1/tests/storage.py virt-manager/tests/storage.py
+--- virt-manager-1.0.1/tests/storage.py	2014-03-22 16:26:50.000000000 +0000
++++ virt-manager/tests/storage.py	2014-06-12 11:22:21.116891895 +0000
+@@ -23,7 +23,7 @@
+ 
+ from tests import utils
+ 
+-# pylint: disable=W0212
++# pylint: disable=protected-access
+ # Access to protected member, needed to unittest stuff
+ 
+ basepath = os.path.join(os.getcwd(), "tests", "storage-xml")
+@@ -188,10 +188,10 @@
+ 
+         # Test creating with many devices
+         # XXX: Need to wire this up
+-        #createPool(self.conn,
+-        #           StoragePool.TYPE_LOGICAL, "pool-logical-manydev",
+-        #           source_path=["/tmp/path1", "/tmp/path2", "/tmp/path3"],
+-        #           target_path=None)
++        # createPool(self.conn,
++        #            StoragePool.TYPE_LOGICAL, "pool-logical-manydev",
++        #            source_path=["/tmp/path1", "/tmp/path2", "/tmp/path3"],
++        #            target_path=None)
+ 
+     def testDiskPool(self):
+         poolobj = createPool(self.conn,
+diff -urN virt-manager-1.0.1/tests/testdriver.xml virt-manager/tests/testdriver.xml
+--- virt-manager-1.0.1/tests/testdriver.xml	2014-03-06 17:34:47.000000000 +0000
++++ virt-manager/tests/testdriver.xml	2014-06-12 11:22:21.117891895 +0000
+@@ -1115,10 +1115,28 @@
+ 
+ 
+ <network>
+-  <name>plainbridge</name>
++  <name>plainbridge-portgroups</name>
+   <uuid>b1b9d7c6-f620-048f-71ee-ca3ba1ac3e98</uuid>
+   <forward mode='bridge'/>
+   <bridge name='br2' />
++  <portgroup name='engineering' default='yes'>
++    <virtualport type='802.1Qbh'>
++      <parameters profileid='test'/>
++    </virtualport>
++    <bandwidth>
++      <inbound average='1000' peak='5000' burst='5120'/>
++      <outbound average='1000' peak='5000' burst='5120'/>
++    </bandwidth>
++  </portgroup>
++  <portgroup name='sales'>
++    <virtualport type='802.1Qbh'>
++      <parameters profileid='salestest'/>
++    </virtualport>
++    <bandwidth>
++      <inbound average='500' peak='2000' burst='2560'/>
++      <outbound average='128' peak='256' burst='256'/>
++    </bandwidth>
++  </portgroup>
+ </network>
+ 
+ 
+diff -urN virt-manager-1.0.1/tests/test_urls.py virt-manager/tests/test_urls.py
+--- virt-manager-1.0.1/tests/test_urls.py	2014-03-22 16:26:50.000000000 +0000
++++ virt-manager/tests/test_urls.py	2014-06-12 11:22:21.117891895 +0000
+@@ -37,7 +37,7 @@
+ from virtinst.urlfetcher import MandrivaDistro
+ 
+ 
+-# pylint: disable=W0212
++# pylint: disable=protected-access
+ # Access to protected member, needed to unittest stuff
+ 
+ OLD_FEDORA_URL = "https://archives.fedoraproject.org/pub/archive/fedora/linux/releases/%s/Fedora/%s/os/"
+diff -urN virt-manager-1.0.1/tests/utils.py virt-manager/tests/utils.py
+--- virt-manager-1.0.1/tests/utils.py	2014-03-22 16:26:50.000000000 +0000
++++ virt-manager/tests/utils.py	2014-06-12 11:22:21.117891895 +0000
+@@ -31,7 +31,7 @@
+ # DON'T EDIT THIS. Use 'setup.py test --regenerate-output'
+ REGENERATE_OUTPUT = False
+ 
+-# pylint: disable=W0212
++# pylint: disable=protected-access
+ # Access to protected member, needed to unittest stuff
+ 
+ _capsprefix  = ",caps=%s/tests/capabilities-xml/" % os.getcwd()
+diff -urN virt-manager-1.0.1/tests/xmlconfig.py virt-manager/tests/xmlconfig.py
+--- virt-manager-1.0.1/tests/xmlconfig.py	2014-03-22 16:26:50.000000000 +0000
++++ virt-manager/tests/xmlconfig.py	2014-06-12 11:22:21.121891895 +0000
+@@ -34,7 +34,7 @@
+ 
+ from tests import utils
+ 
+-# pylint: disable=W0212
++# pylint: disable=protected-access
+ # Access to protected member, needed to unittest stuff
+ 
+ _testconn = utils.open_testdriver()
+@@ -870,7 +870,7 @@
+         g.add_device(redir1)
+         g.add_device(redir2)
+ 
+-        #Panic Notifier device
++        # Panic Notifier device
+         pdev = VirtualPanicDevice(g.conn)
+         g.add_device(pdev)
+ 
+diff -urN virt-manager-1.0.1/tests/xmlparse.py virt-manager/tests/xmlparse.py
+--- virt-manager-1.0.1/tests/xmlparse.py	2014-03-22 16:26:50.000000000 +0000
++++ virt-manager/tests/xmlparse.py	2014-06-12 11:22:21.124891895 +0000
+@@ -90,7 +90,7 @@
+         return guest, outfile
+ 
+     def test000ClearProps(self):
+-        # pylint: disable=W0212
++        # pylint: disable=protected-access
+         # Access to protected member, needed to unittest stuff
+         virtinst.xmlbuilder._seenprops = []
+ 
+@@ -155,6 +155,10 @@
+         check("initrd", None)
+         check("kernel_args", None)
+ 
++        guest.os.set_initargs_string("foo 'bar baz' frib")
++        self.assertEqual([i.val for i in guest.os.initargs],
++            ["foo", "bar baz", "frib"])
++
+         check = self._make_checker(guest.features)
+         check("acpi", True, False)
+         check("apic", True, True)
+@@ -209,6 +213,9 @@
+         check("gid_target", None, 1000)
+         check("gid_count", None, 10)
+ 
++        check = self._make_checker(guest.resource)
++        check("partition", None, "/virtualmachines/production")
++
+         check = self._make_checker(guest.get_devices("memballoon")[0])
+         check("model", "virtio", "none")
+ 
+@@ -331,6 +338,7 @@
+         check("driver_cache", None, "writeback")
+         check("driver_io", None, "threads")
+         check("driver_io", "threads", "native")
++        check("driver_discard", None, "unmap")
+         check("iotune_ris", 1, 0)
+         check("iotune_rbs", 2, 0)
+         check("iotune_wis", 3, 0)
+@@ -361,6 +369,7 @@
+         console2    = guest.get_devices("console")[1]
+         channel1    = guest.get_devices("channel")[0]
+         channel2    = guest.get_devices("channel")[1]
++        channel3    = guest.get_devices("channel")[2]
+ 
+         check = self._make_checker(serial1)
+         check("type", "null", "udp")
+@@ -408,6 +417,12 @@
+         check("target_address", "1.2.3.4", "5.6.7.8")
+         check("target_port", 4567, 1199)
+ 
++        check = self._make_checker(channel3)
++        check("type", "spiceport")
++        check("source_channel", "org.spice-space.webdav.0", "test.1")
++        check("target_type", "virtio")
++        check("target_name", "org.spice-space.webdav.0", "test.2")
++
+         self._alter_compare(guest.get_xml_config(), outfile)
+ 
+     def testAlterControllers(self):
+@@ -478,6 +493,7 @@
+         check("type", "direct")
+         check("source", "eth0.1")
+         check("source_mode", "vepa", "bridge")
++        check("portgroup", None, "sales")
+         check("driver_name", None, "vhost")
+         check("driver_queues", None, 5)
+ 
+@@ -958,7 +974,7 @@
+         check("autoconf", True, False)
+ 
+         check = self._make_checker(iface.protocols[1].ips[1])
+-        check("address", "fe80::215:58ff:fe6e:5", "foobar")
++        check("address", "fe80::215:58ff:fe6e:5", "2002::")
+         check("prefix", 64, 38)
+ 
+         # Remove a child interface, verify it's data remains intact
+@@ -1127,6 +1143,11 @@
+         check("mode", "nat", "route")
+         check("dev", None, "eth22")
+ 
++        self.assertEquals(len(net.portgroups), 2)
++        check = self._make_checker(net.portgroups[0])
++        check("name", "engineering", "foo")
++        check("default", True, False)
++
+         self.assertEqual(len(net.ips), 4)
+         check = self._make_checker(net.ips[0])
+         check("address", "192.168.7.1", "192.168.8.1")
+@@ -1175,7 +1196,7 @@
+         utils.diff_compare(guest.get_xml_config(), outfile)
+ 
+     def testzzzzCheckProps(self):
+-        # pylint: disable=W0212
++        # pylint: disable=protected-access
+         # Access to protected member, needed to unittest stuff
+ 
+         # If a certain environment variable is set, XMLBuilder tracks
+diff -urN virt-manager-1.0.1/tests/xmlparse-xml/change-chars-in.xml virt-manager/tests/xmlparse-xml/change-chars-in.xml
+--- virt-manager-1.0.1/tests/xmlparse-xml/change-chars-in.xml	2014-02-17 17:37:52.000000000 +0000
++++ virt-manager/tests/xmlparse-xml/change-chars-in.xml	2014-06-12 11:22:21.122891895 +0000
+@@ -44,5 +44,9 @@
+       <source mode="bind" path="/tmp/foobar"/>
+       <target type="guestfwd" address="1.2.3.4" port="4567"/>
+     </channel>
++    <channel type="spiceport">
++      <source channel="org.spice-space.webdav.0"/>
++      <target type="virtio" name="org.spice-space.webdav.0"/>
++    </channel>
+   </devices>
+ </domain>
+diff -urN virt-manager-1.0.1/tests/xmlparse-xml/change-chars-out.xml virt-manager/tests/xmlparse-xml/change-chars-out.xml
+--- virt-manager-1.0.1/tests/xmlparse-xml/change-chars-out.xml	2014-02-27 22:10:39.000000000 +0000
++++ virt-manager/tests/xmlparse-xml/change-chars-out.xml	2014-06-12 11:22:21.122891895 +0000
+@@ -47,5 +47,9 @@
+       <source mode="bind" path="/tmp/foobar"/>
+       <target type="guestfwd" address="5.6.7.8" port="1199"/>
+     </channel>
++    <channel type="spiceport">
++      <source channel="test.1"/>
++      <target type="virtio" name="test.2"/>
++    </channel>
+   </devices>
+ </domain>
+diff -urN virt-manager-1.0.1/tests/xmlparse-xml/change-disk-out.xml virt-manager/tests/xmlparse-xml/change-disk-out.xml
+--- virt-manager-1.0.1/tests/xmlparse-xml/change-disk-out.xml	2014-02-27 22:10:39.000000000 +0000
++++ virt-manager/tests/xmlparse-xml/change-disk-out.xml	2014-06-12 11:22:21.122891895 +0000
+@@ -50,7 +50,7 @@
+         <total_iops_sec>5</total_iops_sec>
+         <total_bytes_sec>6</total_bytes_sec>
+       </iotune>
+-      <driver cache="writeback" io="native"/>
++      <driver cache="writeback" discard="unmap" io="native"/>
+       <source file="/dev/default-pool/default-vol" startupPolicy="optional"/>
+       <shareable/>
+     </disk>
+diff -urN virt-manager-1.0.1/tests/xmlparse-xml/change-guest-out.xml virt-manager/tests/xmlparse-xml/change-guest-out.xml
+--- virt-manager-1.0.1/tests/xmlparse-xml/change-guest-out.xml	2014-03-22 16:16:24.000000000 +0000
++++ virt-manager/tests/xmlparse-xml/change-guest-out.xml	2014-06-12 11:22:21.122891895 +0000
+@@ -10,6 +10,9 @@
+     <init>/sbin/init</init>
+     <bootmenu enable="no"/>
+     <bios useserial="yes"/>
++    <initarg>foo</initarg>
++    <initarg>bar baz</initarg>
++    <initarg>frib</initarg>
+   </os>
+   <features><apic eoi="on"/>
+     <hyperv>
+@@ -78,17 +81,6 @@
+   </seclabel>
+   <title>Hey title changed!</title>
+   <description>Hey desc changed&</description>
+-  <memoryBacking>
+-    <hugepages/>
+-    <nosharepages/>
+-    <locked/>
+-  </memoryBacking>
+-  <memtune>
+-    <hard_limit>2048</hard_limit>
+-    <soft_limit>200</soft_limit>
+-    <swap_hard_limit>400</swap_hard_limit>
+-    <min_guarantee>500</min_guarantee>
+-  </memtune>
+   <blkiotune>
+     <weight>200</weight>
+     <device>
+@@ -96,9 +88,23 @@
+       <weight>300</weight>
+     </device>
+   </blkiotune>
++  <memtune>
++    <hard_limit>2048</hard_limit>
++    <soft_limit>200</soft_limit>
++    <swap_hard_limit>400</swap_hard_limit>
++    <min_guarantee>500</min_guarantee>
++  </memtune>
++  <memoryBacking>
++    <hugepages/>
++    <nosharepages/>
++    <locked/>
++  </memoryBacking>
+   <bootloader>pygrub</bootloader>
+   <idmap>
+     <uid start="0" target="1000" count="10"/>
+     <gid start="0" target="1000" count="10"/>
+   </idmap>
++  <resource>
++    <partition>/virtualmachines/production</partition>
++  </resource>
+ </domain>
+diff -urN virt-manager-1.0.1/tests/xmlparse-xml/change-nics-out.xml virt-manager/tests/xmlparse-xml/change-nics-out.xml
+--- virt-manager-1.0.1/tests/xmlparse-xml/change-nics-out.xml	2014-02-27 22:10:40.000000000 +0000
++++ virt-manager/tests/xmlparse-xml/change-nics-out.xml	2014-06-12 11:22:21.123891895 +0000
+@@ -40,7 +40,7 @@
+     </interface>
+     <interface type="direct">
+       <mac address="00:11:22:33:44:55"/>
+-      <source dev="eth0.1" mode="bridge"/>
++      <source dev="eth0.1" mode="bridge" portgroup="sales"/>
+       <virtualport type="802.1Qbg">
+         <parameters managerid="11" typeid="1193047" typeidversion="2" instanceid="09b11c53-8b5c-4eeb-8f00-d84eaa0aaa4f"/>
+       </virtualport>
+diff -urN virt-manager-1.0.1/tests/xmlparse-xml/interface-test-bridge-ip-out.xml virt-manager/tests/xmlparse-xml/interface-test-bridge-ip-out.xml
+--- virt-manager-1.0.1/tests/xmlparse-xml/interface-test-bridge-ip-out.xml	2014-02-27 22:10:40.000000000 +0000
++++ virt-manager/tests/xmlparse-xml/interface-test-bridge-ip-out.xml	2014-06-12 11:22:21.123891895 +0000
+@@ -15,7 +15,7 @@
+   </protocol>
+   <protocol family="ipv6">
+     <ip address="fe99::215:58ff:fe6e:5" prefix="32"/>
+-    <ip address="foobar" prefix="38"/>
++    <ip address="2002::" prefix="38"/>
+     <route gateway="1.2.3.4"/>
+   </protocol>
+ </interface>
+diff -urN virt-manager-1.0.1/tests/xmlparse-xml/network-multi-in.xml virt-manager/tests/xmlparse-xml/network-multi-in.xml
+--- virt-manager-1.0.1/tests/xmlparse-xml/network-multi-in.xml	2014-02-17 17:37:52.000000000 +0000
++++ virt-manager/tests/xmlparse-xml/network-multi-in.xml	2014-06-12 11:22:21.124891895 +0000
+@@ -22,4 +22,22 @@
+   </ip>
+   <ip family="ipv4" address="192.168.19.0" netmask="255.255.255.0">
+   </ip>
++  <portgroup name='engineering' default='yes'>
++    <virtualport type='802.1Qbh'>
++      <parameters profileid='test'/>
++    </virtualport>
++    <bandwidth>
++      <inbound average='1000' peak='5000' burst='5120'/>
++      <outbound average='1000' peak='5000' burst='5120'/>
++    </bandwidth>
++  </portgroup>
++  <portgroup name='sales'>
++    <virtualport type='802.1Qbh'>
++      <parameters profileid='salestest'/>
++    </virtualport>
++    <bandwidth>
++      <inbound average='500' peak='2000' burst='2560'/>
++      <outbound average='128' peak='256' burst='256'/>
++    </bandwidth>
++  </portgroup>
+ </network>
+diff -urN virt-manager-1.0.1/tests/xmlparse-xml/network-multi-out.xml virt-manager/tests/xmlparse-xml/network-multi-out.xml
+--- virt-manager-1.0.1/tests/xmlparse-xml/network-multi-out.xml	2014-02-27 22:10:40.000000000 +0000
++++ virt-manager/tests/xmlparse-xml/network-multi-out.xml	2014-06-12 11:22:21.124891895 +0000
+@@ -24,6 +24,24 @@
+   </ip>
+   <ip family="ipv4" address="192.168.19.0" netmask="255.255.255.0">
+   </ip>
++  <portgroup name="foo" default="no">
++    <virtualport type="802.1Qbh">
++      <parameters profileid="test"/>
++    </virtualport>
++    <bandwidth>
++      <inbound average="1000" peak="5000" burst="5120"/>
++      <outbound average="1000" peak="5000" burst="5120"/>
++    </bandwidth>
++  </portgroup>
++  <portgroup name="sales">
++    <virtualport type="802.1Qbh">
++      <parameters profileid="salestest"/>
++    </virtualport>
++    <bandwidth>
++      <inbound average="500" peak="2000" burst="2560"/>
++      <outbound average="128" peak="256" burst="256"/>
++    </bandwidth>
++  </portgroup>
+   <mac address="52:54:00:69:eb:FF"/>
+   <route family="ipv4" address="192.168.8.0" prefix="24" gateway="192.168.8.10"/>
+ </network>
+diff -urN virt-manager-1.0.1/ui/about.ui virt-manager/ui/about.ui
+--- virt-manager-1.0.1/ui/about.ui	2014-02-17 17:37:52.000000000 +0000
++++ virt-manager/ui/about.ui	2014-06-12 11:22:21.124891895 +0000
+@@ -6,7 +6,7 @@
+     <property name="destroy_with_parent">True</property>
+     <property name="type_hint">dialog</property>
+     <property name="program_name">Virtual Machine Manager</property>
+-    <property name="copyright" translatable="yes">Copyright (C) 2006-2011 Red Hat Inc.</property>
++    <property name="copyright" translatable="yes">Copyright (C) 2006-2014 Red Hat Inc.</property>
+     <property name="comments" translatable="yes">Powered by libvirt</property>
+     <property name="website">http://virt-manager.org/</property>
+     <property name="website_label">http://virt-manager.org/</property>
+diff -urN virt-manager-1.0.1/ui/addhardware.ui virt-manager/ui/addhardware.ui
+--- virt-manager-1.0.1/ui/addhardware.ui	2014-03-12 21:17:20.000000000 +0000
++++ virt-manager/ui/addhardware.ui	2014-06-12 11:22:21.135891895 +0000
+@@ -327,6 +327,83 @@
+                           </packing>
+                         </child>
+                         <child>
++                          <object class="GtkGrid" id="grid5">
++                            <property name="visible">True</property>
++                            <property name="can_focus">False</property>
++                            <property name="row_spacing">6</property>
++                            <property name="column_spacing">6</property>
++                            <child>
++                              <object class="GtkLabel" id="label29">
++                                <property name="visible">True</property>
++                                <property name="can_focus">False</property>
++                                <property name="xalign">0</property>
++                                <property name="label" translatable="yes">_Type:</property>
++                                <property name="use_underline">True</property>
++                              </object>
++                              <packing>
++                                <property name="left_attach">0</property>
++                                <property name="top_attach">0</property>
++                                <property name="width">1</property>
++                                <property name="height">1</property>
++                              </packing>
++                            </child>
++                            <child>
++                              <object class="GtkLabel" id="controller-model-label">
++                                <property name="visible">True</property>
++                                <property name="can_focus">False</property>
++                                <property name="xalign">0</property>
++                                <property name="label" translatable="yes">_Model:</property>
++                                <property name="use_underline">True</property>
++                              </object>
++                              <packing>
++                                <property name="left_attach">0</property>
++                                <property name="top_attach">1</property>
++                                <property name="width">1</property>
++                                <property name="height">1</property>
++                              </packing>
++                            </child>
++                            <child>
++                              <object class="GtkComboBox" id="controller-type">
++                                <property name="visible">True</property>
++                                <property name="can_focus">False</property>
++                                <signal name="changed" handler="on_controller_type_changed" swapped="no"/>
++                              </object>
++                              <packing>
++                                <property name="left_attach">1</property>
++                                <property name="top_attach">0</property>
++                                <property name="width">1</property>
++                                <property name="height">1</property>
++                              </packing>
++                            </child>
++                            <child>
++                              <object class="GtkComboBox" id="controller-model">
++                                <property name="visible">True</property>
++                                <property name="can_focus">False</property>
++                              </object>
++                              <packing>
++                                <property name="left_attach">1</property>
++                                <property name="top_attach">1</property>
++                                <property name="width">1</property>
++                                <property name="height">1</property>
++                              </packing>
++                            </child>
++                          </object>
++                          <packing>
++                            <property name="position">2</property>
++                          </packing>
++                        </child>
++                        <child type="tab">
++                          <object class="GtkLabel" id="label24">
++                            <property name="visible">True</property>
++                            <property name="can_focus">False</property>
++                            <property name="label" translatable="yes">Controller</property>
++                          </object>
++                          <packing>
++                            <property name="position">2</property>
++                            <property name="tab_fill">False</property>
++                          </packing>
++                        </child>
++                        <child>
+                           <object class="GtkBox" id="box2">
+                             <property name="visible">True</property>
+                             <property name="can_focus">False</property>
+@@ -491,7 +568,7 @@
+                             </child>
+                           </object>
+                           <packing>
+-                            <property name="position">2</property>
++                            <property name="position">3</property>
+                           </packing>
+                         </child>
+                         <child type="tab">
+@@ -501,7 +578,7 @@
+                             <property name="label">net</property>
+                           </object>
+                           <packing>
+-                            <property name="position">2</property>
++                            <property name="position">3</property>
+                             <property name="tab_fill">False</property>
+                           </packing>
+                         </child>
+@@ -539,7 +616,7 @@
+                             </child>
+                           </object>
+                           <packing>
+-                            <property name="position">3</property>
++                            <property name="position">4</property>
+                           </packing>
+                         </child>
+                         <child type="tab">
+@@ -549,7 +626,7 @@
+                             <property name="label">input</property>
+                           </object>
+                           <packing>
+-                            <property name="position">3</property>
++                            <property name="position">4</property>
+                             <property name="tab_fill">False</property>
+                           </packing>
+                         </child>
+@@ -562,7 +639,7 @@
+                             </child>
+                           </object>
+                           <packing>
+-                            <property name="position">4</property>
++                            <property name="position">5</property>
+                           </packing>
+                         </child>
+                         <child type="tab">
+@@ -572,7 +649,7 @@
+                             <property name="label">gfx</property>
+                           </object>
+                           <packing>
+-                            <property name="position">4</property>
++                            <property name="position">5</property>
+                             <property name="tab_fill">False</property>
+                           </packing>
+                         </child>
+@@ -611,7 +688,7 @@
+                             </child>
+                           </object>
+                           <packing>
+-                            <property name="position">5</property>
++                            <property name="position">6</property>
+                           </packing>
+                         </child>
+                         <child type="tab">
+@@ -621,7 +698,7 @@
+                             <property name="label">sound</property>
+                           </object>
+                           <packing>
+-                            <property name="position">5</property>
++                            <property name="position">6</property>
+                             <property name="tab_fill">False</property>
+                           </packing>
+                         </child>
+@@ -671,7 +748,7 @@
+                             </child>
+                           </object>
+                           <packing>
+-                            <property name="position">6</property>
++                            <property name="position">7</property>
+                           </packing>
+                         </child>
+                         <child type="tab">
+@@ -681,7 +758,7 @@
+                             <property name="label">host</property>
+                           </object>
+                           <packing>
+-                            <property name="position">6</property>
++                            <property name="position">7</property>
+                             <property name="tab_fill">False</property>
+                           </packing>
+                         </child>
+@@ -713,7 +790,7 @@
+                               </object>
+                               <packing>
+                                 <property name="left_attach">1</property>
+-                                <property name="top_attach">8</property>
++                                <property name="top_attach">9</property>
+                                 <property name="width">1</property>
+                                 <property name="height">1</property>
+                               </packing>
+@@ -726,7 +803,7 @@
+                               </object>
+                               <packing>
+                                 <property name="left_attach">1</property>
+-                                <property name="top_attach">5</property>
++                                <property name="top_attach">7</property>
+                                 <property name="width">1</property>
+                                 <property name="height">1</property>
+                               </packing>
+@@ -828,7 +905,7 @@
+                               </object>
+                               <packing>
+                                 <property name="left_attach">1</property>
+-                                <property name="top_attach">7</property>
++                                <property name="top_attach">8</property>
+                                 <property name="width">1</property>
+                                 <property name="height">1</property>
+                               </packing>
+@@ -860,7 +937,7 @@
+                               </object>
+                               <packing>
+                                 <property name="left_attach">0</property>
+-                                <property name="top_attach">5</property>
++                                <property name="top_attach">8</property>
+                                 <property name="width">1</property>
+                                 <property name="height">1</property>
+                               </packing>
+@@ -908,7 +985,7 @@
+                               </object>
+                               <packing>
+                                 <property name="left_attach">0</property>
+-                                <property name="top_attach">8</property>
++                                <property name="top_attach">9</property>
+                                 <property name="width">1</property>
+                                 <property name="height">1</property>
+                               </packing>
+@@ -1039,9 +1116,36 @@
+                                 <property name="height">1</property>
+                               </packing>
+                             </child>
++                            <child>
++                              <object class="GtkLabel" id="char-channel-label">
++                                <property name="visible">True</property>
++                                <property name="can_focus">False</property>
++                                <property name="xalign">0</property>
++                                <property name="label" translatable="yes">_Channel:</property>
++                                <property name="use_underline">True</property>
++                              </object>
++                              <packing>
++                                <property name="left_attach">0</property>
++                                <property name="top_attach">5</property>
++                                <property name="width">1</property>
++                                <property name="height">1</property>
++                              </packing>
++                            </child>
++                            <child>
++                              <object class="GtkEntry" id="char-channel">
++                                <property name="visible">True</property>
++                                <property name="can_focus">True</property>
++                              </object>
++                              <packing>
++                                <property name="left_attach">1</property>
++                                <property name="top_attach">5</property>
++                                <property name="width">1</property>
++                                <property name="height">1</property>
++                              </packing>
++                            </child>
+                           </object>
+                           <packing>
+-                            <property name="position">7</property>
++                            <property name="position">8</property>
+                           </packing>
+                         </child>
+                         <child type="tab">
+@@ -1051,7 +1155,7 @@
+                             <property name="label">char</property>
+                           </object>
+                           <packing>
+-                            <property name="position">7</property>
++                            <property name="position">8</property>
+                             <property name="tab_fill">False</property>
+                           </packing>
+                         </child>
+@@ -1090,7 +1194,7 @@
+                             </child>
+                           </object>
+                           <packing>
+-                            <property name="position">8</property>
++                            <property name="position">9</property>
+                           </packing>
+                         </child>
+                         <child type="tab">
+@@ -1100,7 +1204,7 @@
+                             <property name="label">vid</property>
+                           </object>
+                           <packing>
+-                            <property name="position">8</property>
++                            <property name="position">9</property>
+                             <property name="tab_fill">False</property>
+                           </packing>
+                         </child>
+@@ -1169,7 +1273,7 @@
+                             </child>
+                           </object>
+                           <packing>
+-                            <property name="position">9</property>
++                            <property name="position">10</property>
+                           </packing>
+                         </child>
+                         <child type="tab">
+@@ -1179,7 +1283,7 @@
+                             <property name="label">wdog</property>
+                           </object>
+                           <packing>
+-                            <property name="position">9</property>
++                            <property name="position">10</property>
+                             <property name="tab_fill">False</property>
+                           </packing>
+                         </child>
+@@ -1193,7 +1297,7 @@
+                             </child>
+                           </object>
+                           <packing>
+-                            <property name="position">10</property>
++                            <property name="position">11</property>
+                           </packing>
+                         </child>
+                         <child type="tab">
+@@ -1203,7 +1307,7 @@
+                             <property name="label">fs</property>
+                           </object>
+                           <packing>
+-                            <property name="position">10</property>
++                            <property name="position">11</property>
+                             <property name="tab_fill">False</property>
+                           </packing>
+                         </child>
+@@ -1242,7 +1346,7 @@
+                             </child>
+                           </object>
+                           <packing>
+-                            <property name="position">11</property>
++                            <property name="position">12</property>
+                           </packing>
+                         </child>
+                         <child type="tab">
+@@ -1252,7 +1356,7 @@
+                             <property name="label">sc</property>
+                           </object>
+                           <packing>
+-                            <property name="position">11</property>
++                            <property name="position">12</property>
+                             <property name="tab_fill">False</property>
+                           </packing>
+                         </child>
+@@ -1362,7 +1466,7 @@
+                             </child>
+                           </object>
+                           <packing>
+-                            <property name="position">12</property>
++                            <property name="position">13</property>
+                           </packing>
+                         </child>
+                         <child type="tab">
+@@ -1372,7 +1476,7 @@
+                             <property name="label">usbr</property>
+                           </object>
+                           <packing>
+-                            <property name="position">12</property>
++                            <property name="position">13</property>
+                             <property name="tab_fill">False</property>
+                           </packing>
+                         </child>
+@@ -1441,7 +1545,7 @@
+                             </child>
+                           </object>
+                           <packing>
+-                            <property name="position">13</property>
++                            <property name="position">14</property>
+                           </packing>
+                         </child>
+                         <child type="tab">
+@@ -1451,7 +1555,7 @@
+                             <property name="label">tpm</property>
+                           </object>
+                           <packing>
+-                            <property name="position">13</property>
++                            <property name="position">14</property>
+                             <property name="tab_fill">False</property>
+                           </packing>
+                         </child>
+@@ -1709,7 +1813,7 @@
+                             </child>
+                           </object>
+                           <packing>
+-                            <property name="position">14</property>
++                            <property name="position">15</property>
+                           </packing>
+                         </child>
+                         <child type="tab">
+@@ -1719,7 +1823,7 @@
+                             <property name="label" translatable="yes">rng</property>
+                           </object>
+                           <packing>
+-                            <property name="position">14</property>
++                            <property name="position">15</property>
+                             <property name="tab_fill">False</property>
+                           </packing>
+                         </child>
+@@ -1786,7 +1890,7 @@
+                             </child>
+                           </object>
+                           <packing>
+-                            <property name="position">15</property>
++                            <property name="position">16</property>
+                           </packing>
+                         </child>
+                         <child type="tab">
+@@ -1796,7 +1900,7 @@
+                             <property name="label" translatable="yes">panic</property>
+                           </object>
+                           <packing>
+-                            <property name="position">15</property>
++                            <property name="position">16</property>
+                             <property name="tab_fill">False</property>
+                           </packing>
+                         </child>
+diff -urN virt-manager-1.0.1/ui/connect.ui virt-manager/ui/connect.ui
+--- virt-manager-1.0.1/ui/connect.ui	2014-02-17 17:37:52.000000000 +0000
++++ virt-manager/ui/connect.ui	2014-06-12 11:22:21.136891895 +0000
+@@ -259,6 +259,7 @@
+                 <property name="xalign">0</property>
+                 <property name="label" translatable="yes">H_ostname:</property>
+                 <property name="use_underline">True</property>
++                <property name="mnemonic_widget">hostname</property>
+               </object>
+               <packing>
+                 <property name="left_attach">0</property>
+@@ -295,6 +296,7 @@
+                 <property name="xalign">0</property>
+                 <property name="label" translatable="yes">Me_thod:</property>
+                 <property name="use_underline">True</property>
++                <property name="mnemonic_widget">transport</property>
+               </object>
+               <packing>
+                 <property name="left_attach">0</property>
+diff -urN virt-manager-1.0.1/ui/createinterface.ui virt-manager/ui/createinterface.ui
+--- virt-manager-1.0.1/ui/createinterface.ui	2014-02-17 17:37:52.000000000 +0000
++++ virt-manager/ui/createinterface.ui	2014-06-12 11:22:21.137891895 +0000
+@@ -697,7 +697,9 @@
+                         <property name="visible">True</property>
+                         <property name="can_focus">False</property>
+                         <property name="xalign">0</property>
+-                        <property name="label" translatable="yes">Forward delay:</property>
++                        <property name="label" translatable="yes">Forward _delay:</property>
++                        <property name="use_underline">True</property>
++                        <property name="mnemonic_widget">bridge-delay</property>
+                       </object>
+                       <packing>
+                         <property name="x_options">GTK_FILL</property>
+@@ -709,7 +711,9 @@
+                         <property name="visible">True</property>
+                         <property name="can_focus">False</property>
+                         <property name="xalign">0</property>
+-                        <property name="label" translatable="yes">Enable STP:</property>
++                        <property name="label" translatable="yes">Enable _STP:</property>
++                        <property name="use_underline">True</property>
++                        <property name="mnemonic_widget">bridge-stp</property>
+                       </object>
+                       <packing>
+                         <property name="top_attach">1</property>
+@@ -1961,7 +1965,7 @@
+                             </child>
+                             <child>
+                               <object class="GtkButton" id="ip-config-button">
+-                                <property name="label" translatable="yes">_Configure</property>
++                                <property name="label" translatable="yes">Config_ure</property>
+                                 <property name="visible">True</property>
+                                 <property name="can_focus">True</property>
+                                 <property name="receives_default">True</property>
+diff -urN virt-manager-1.0.1/ui/createnet.ui virt-manager/ui/createnet.ui
+--- virt-manager-1.0.1/ui/createnet.ui	2014-02-17 17:37:52.000000000 +0000
++++ virt-manager/ui/createnet.ui	2014-06-12 11:22:21.138891895 +0000
+@@ -1,7 +1,7 @@
+ <?xml version="1.0" encoding="UTF-8"?>
+-<!-- Generated with glade 3.15.4 on Fri Sep 27 13:35:57 2013 -->
++<!-- Generated with glade 3.16.1 -->
+ <interface>
+-  <!-- interface-requires gtk+ 3.0 -->
++  <requires lib="gtk+" version="3.0"/>
+   <object class="GtkImage" id="image2">
+     <property name="visible">True</property>
+     <property name="can_focus">False</property>
+@@ -152,12 +152,12 @@
+                                 <property name="width_chars">25</property>
+                                 <property name="primary_icon_activatable">False</property>
+                                 <property name="secondary_icon_activatable">False</property>
++                                <signal name="activate" handler="on_net_name_activate" swapped="no"/>
+                                 <child internal-child="accessible">
+                                   <object class="AtkObject" id="net-name-atkobject">
+                                     <property name="AtkObject::accessible-name" translatable="yes">Net Name Field</property>
+                                   </object>
+                                 </child>
+-                                <signal name="activate" handler="on_net_name_activate" swapped="no"/>
+                               </object>
+                               <packing>
+                                 <property name="left_attach">1</property>
+@@ -1251,7 +1251,7 @@
+                                             <property name="xalign">1</property>
+                                             <property name="label" translatable="yes">_Destination:</property>
+                                             <property name="use_underline">True</property>
+-                                            <property name="mnemonic_widget">net-forward-dev</property>
++                                            <property name="mnemonic_widget">net-forward</property>
+                                           </object>
+                                           <packing>
+                                             <property name="left_attach">0</property>
+@@ -1268,6 +1268,7 @@
+                                             <property name="xalign">1</property>
+                                             <property name="label" translatable="yes">_Mode:</property>
+                                             <property name="use_underline">True</property>
++                                            <property name="mnemonic_widget">net-forward-mode</property>
+                                           </object>
+                                           <packing>
+                                             <property name="left_attach">0</property>
+diff -urN virt-manager-1.0.1/ui/createpool.ui virt-manager/ui/createpool.ui
+--- virt-manager-1.0.1/ui/createpool.ui	2014-02-17 17:37:52.000000000 +0000
++++ virt-manager/ui/createpool.ui	2014-06-12 11:22:21.138891895 +0000
+@@ -216,6 +216,7 @@
+                             <property name="xalign">1</property>
+                             <property name="label" translatable="yes">B_uild Pool:</property>
+                             <property name="use_underline">True</property>
++                            <property name="mnemonic_widget">pool-build</property>
+                           </object>
+                           <packing>
+                             <property name="left_attach">0</property>
+@@ -272,6 +273,7 @@
+                             <property name="xalign">1</property>
+                             <property name="label" translatable="yes">_Target Path:</property>
+                             <property name="use_underline">True</property>
++                            <property name="mnemonic_widget">pool-target-path</property>
+                           </object>
+                           <packing>
+                             <property name="left_attach">0</property>
+@@ -287,6 +289,7 @@
+                             <property name="xalign">1</property>
+                             <property name="label" translatable="yes">F_ormat:</property>
+                             <property name="use_underline">True</property>
++                            <property name="mnemonic_widget">pool-format</property>
+                           </object>
+                           <packing>
+                             <property name="left_attach">0</property>
+@@ -302,6 +305,7 @@
+                             <property name="xalign">1</property>
+                             <property name="label" translatable="yes">Host Na_me:</property>
+                             <property name="use_underline">True</property>
++                            <property name="mnemonic_widget">pool-hostname</property>
+                           </object>
+                           <packing>
+                             <property name="left_attach">0</property>
+@@ -315,8 +319,9 @@
+                             <property name="visible">True</property>
+                             <property name="can_focus">False</property>
+                             <property name="xalign">1</property>
+-                            <property name="label" translatable="yes">_Source Path:</property>
++                            <property name="label" translatable="yes">sourcep:</property>
+                             <property name="use_underline">True</property>
++                            <property name="mnemonic_widget">pool-source-path</property>
+                           </object>
+                           <packing>
+                             <property name="left_attach">0</property>
+@@ -330,7 +335,7 @@
+                             <property name="visible">True</property>
+                             <property name="can_focus">False</property>
+                             <property name="xalign">1</property>
+-                            <property name="label" translatable="yes">_IQN:</property>
++                            <property name="label" translatable="yes">Initiator _IQN:</property>
+                             <property name="use_underline">True</property>
+                             <property name="mnemonic_widget">pool-iqn-chk</property>
+                           </object>
+@@ -463,8 +468,9 @@
+                             <property name="visible">True</property>
+                             <property name="can_focus">False</property>
+                             <property name="xalign">1</property>
+-                            <property name="label" translatable="yes">_Source Name:</property>
++                            <property name="label" translatable="yes">Source _Name:</property>
+                             <property name="use_underline">True</property>
++                            <property name="mnemonic_widget">pool-source-name</property>
+                           </object>
+                           <packing>
+                             <property name="left_attach">0</property>
+diff -urN virt-manager-1.0.1/ui/create.ui virt-manager/ui/create.ui
+--- virt-manager-1.0.1/ui/create.ui	2014-02-17 17:37:52.000000000 +0000
++++ virt-manager/ui/create.ui	2014-06-12 11:22:21.137891895 +0000
+@@ -1676,21 +1676,6 @@
+                                       </packing>
+                                     </child>
+                                     <child>
+-                                      <object class="GtkComboBox" id="install-os-version">
+-                                        <property name="visible">True</property>
+-                                        <property name="can_focus">False</property>
+-                                        <signal name="changed" handler="on_install_os_version_changed" swapped="no"/>
+-                                      </object>
+-                                      <packing>
+-                                        <property name="left_attach">1</property>
+-                                        <property name="right_attach">2</property>
+-                                        <property name="top_attach">1</property>
+-                                        <property name="bottom_attach">2</property>
+-                                        <property name="x_options">GTK_FILL</property>
+-                                        <property name="y_options"/>
+-                                      </packing>
+-                                    </child>
+-                                    <child>
+                                       <object class="GtkComboBox" id="install-os-type">
+                                         <property name="visible">True</property>
+                                         <property name="can_focus">False</property>
+@@ -1732,6 +1717,27 @@
+                                         <property name="x_options">GTK_FILL</property>
+                                         <property name="y_options"/>
+                                       </packing>
++                                    </child>
++                                    <child>
++                                      <object class="GtkComboBox" id="install-os-version">
++                                        <property name="visible">True</property>
++                                        <property name="can_focus">False</property>
++                                        <property name="has_entry">True</property>
++                                        <signal name="changed" handler="on_install_os_version_changed" swapped="no"/>
++                                        <child internal-child="entry">
++                                          <object class="GtkEntry" id="install-os-version-entry">
++                                            <property name="can_focus">True</property>
++                                          </object>
++                                        </child>
++                                      </object>
++                                      <packing>
++                                        <property name="left_attach">1</property>
++                                        <property name="right_attach">2</property>
++                                        <property name="top_attach">1</property>
++                                        <property name="bottom_attach">2</property>
++                                        <property name="x_options">GTK_FILL</property>
++                                        <property name="y_options"/>
++                                      </packing>
+                                     </child>
+                                   </object>
+                                 </child>
+diff -urN virt-manager-1.0.1/ui/createvol.ui virt-manager/ui/createvol.ui
+--- virt-manager-1.0.1/ui/createvol.ui	2014-02-17 17:37:52.000000000 +0000
++++ virt-manager/ui/createvol.ui	2014-06-12 11:22:21.138891895 +0000
+@@ -1,7 +1,7 @@
+ <?xml version="1.0" encoding="UTF-8"?>
+-<!-- Generated with glade 3.16.0 on Tue Oct  1 14:33:00 2013 -->
++<!-- Generated with glade 3.16.1 -->
+ <interface>
+-  <!-- interface-requires gtk+ 3.0 -->
++  <requires lib="gtk+" version="3.0"/>
+   <object class="GtkAdjustment" id="adjustment1">
+     <property name="upper">100000</property>
+     <property name="value">1</property>
+@@ -209,7 +209,7 @@
+                                 <property name="visible">True</property>
+                                 <property name="can_focus">False</property>
+                                 <property name="xalign">0</property>
+-                                <property name="label" translatable="yes">_Format:</property>
++                                <property name="label" translatable="yes">F_ormat:</property>
+                                 <property name="use_underline">True</property>
+                                 <property name="mnemonic_widget">vol-format</property>
+                               </object>
+diff -urN virt-manager-1.0.1/ui/details.ui virt-manager/ui/details.ui
+--- virt-manager-1.0.1/ui/details.ui	2014-03-19 11:57:24.000000000 +0000
++++ virt-manager/ui/details.ui	2014-06-12 11:22:21.146891895 +0000
+@@ -1,7 +1,7 @@
+ <?xml version="1.0" encoding="UTF-8"?>
+-<!-- Generated with glade 3.16.0 on Mon Feb 24 22:09:46 2014 -->
++<!-- Generated with glade 3.16.1 -->
+ <interface>
+-  <!-- interface-requires gtk+ 3.0 -->
++  <requires lib="gtk+" version="3.0"/>
+   <object class="GtkAccelGroup" id="accelgroup1"/>
+   <object class="GtkAdjustment" id="adjustment1">
+     <property name="lower">1</property>
+@@ -1018,6 +1018,118 @@
+                                             <property name="height">1</property>
+                                           </packing>
+                                         </child>
++                                        <child>
++                                          <object class="GtkLabel" id="overview-chipset-title">
++                                            <property name="visible">True</property>
++                                            <property name="can_focus">False</property>
++                                            <property name="margin_top">2</property>
++                                            <property name="xalign">1</property>
++                                            <property name="yalign">0</property>
++                                            <property name="label" translatable="yes">Chipse_t:</property>
++                                            <property name="use_underline">True</property>
++                                            <property name="ellipsize">middle</property>
++                                          </object>
++                                          <packing>
++                                            <property name="left_attach">0</property>
++                                            <property name="top_attach">4</property>
++                                            <property name="width">1</property>
++                                            <property name="height">1</property>
++                                          </packing>
++                                        </child>
++                                        <child>
++                                          <object class="GtkGrid" id="grid4">
++                                            <property name="visible">True</property>
++                                            <property name="can_focus">False</property>
++                                            <property name="row_spacing">3</property>
++                                            <child>
++                                              <object class="GtkBox" id="overview-chipset-warn-box">
++                                                <property name="can_focus">False</property>
++                                                <property name="spacing">6</property>
++                                                <child>
++                                                  <object class="GtkImage" id="image3">
++                                                    <property name="visible">True</property>
++                                                    <property name="can_focus">False</property>
++                                                    <property name="halign">start</property>
++                                                    <property name="hexpand">False</property>
++                                                    <property name="yalign">0</property>
++                                                    <property name="stock">gtk-dialog-warning</property>
++                                                  </object>
++                                                  <packing>
++                                                    <property name="expand">False</property>
++                                                    <property name="fill">True</property>
++                                                    <property name="position">0</property>
++                                                  </packing>
++                                                </child>
++                                                <child>
++                                                  <object class="GtkLabel" id="overview-chipset-warn">
++                                                    <property name="visible">True</property>
++                                                    <property name="can_focus">False</property>
++                                                    <property name="label" translatable="yes"><small>Q35 is not the default chipset and has received far less testing.
++Once this change is made it is difficult to go back. Only use this
++if you know what you are doing.</small></property>
++                                                    <property name="use_markup">True</property>
++                                                  </object>
++                                                  <packing>
++                                                    <property name="expand">False</property>
++                                                    <property name="fill">True</property>
++                                                    <property name="position">1</property>
++                                                  </packing>
++                                                </child>
++                                              </object>
++                                              <packing>
++                                                <property name="left_attach">0</property>
++                                                <property name="top_attach">1</property>
++                                                <property name="width">1</property>
++                                                <property name="height">1</property>
++                                              </packing>
++                                            </child>
++                                            <child>
++                                              <object class="GtkBox" id="overview-chipset-box">
++                                                <property name="visible">True</property>
++                                                <property name="can_focus">False</property>
++                                                <child>
++                                                  <object class="GtkComboBoxText" id="overview-chipset">
++                                                    <property name="visible">True</property>
++                                                    <property name="can_focus">False</property>
++                                                    <property name="halign">start</property>
++                                                    <property name="hexpand">False</property>
++                                                    <signal name="changed" handler="on_overview_chipset_changed" swapped="no"/>
++                                                  </object>
++                                                  <packing>
++                                                    <property name="expand">False</property>
++                                                    <property name="fill">True</property>
++                                                    <property name="position">0</property>
++                                                  </packing>
++                                                </child>
++                                                <child>
++                                                  <object class="GtkLabel" id="overview-chipset-label">
++                                                    <property name="visible">True</property>
++                                                    <property name="can_focus">False</property>
++                                                    <property name="xalign">0</property>
++                                                    <property name="label">label</property>
++                                                  </object>
++                                                  <packing>
++                                                    <property name="expand">False</property>
++                                                    <property name="fill">True</property>
++                                                    <property name="position">1</property>
++                                                  </packing>
++                                                </child>
++                                              </object>
++                                              <packing>
++                                                <property name="left_attach">0</property>
++                                                <property name="top_attach">0</property>
++                                                <property name="width">1</property>
++                                                <property name="height">1</property>
++                                              </packing>
++                                            </child>
++                                          </object>
++                                          <packing>
++                                            <property name="left_attach">1</property>
++                                            <property name="top_attach">4</property>
++                                            <property name="width">1</property>
++                                            <property name="height">1</property>
++                                          </packing>
++                                        </child>
+                                       </object>
+                                     </child>
+                                   </object>
+@@ -1919,12 +2031,12 @@
+                                                 <property name="climb_rate">1</property>
+                                                 <property name="numeric">True</property>
+                                                 <property name="update_policy">if-valid</property>
++                                                <signal name="changed" handler="on_config_vcpus_changed" swapped="no"/>
+                                                 <child internal-child="accessible">
+                                                   <object class="AtkObject" id="config-vcpus-atkobject">
+                                                     <property name="AtkObject::accessible-name" translatable="yes">Virtual CPU Select</property>
+                                                   </object>
+                                                 </child>
+-                                                <signal name="changed" handler="on_config_vcpus_changed" swapped="no"/>
+                                               </object>
+                                               <packing>
+                                                 <property name="left_attach">1</property>
+@@ -2319,12 +2431,12 @@
+                                                     <property name="visible">True</property>
+                                                     <property name="can_focus">True</property>
+                                                     <property name="invisible_char">●</property>
++                                                    <signal name="changed" handler="on_config_vcpupin_changed" swapped="no"/>
+                                                     <child internal-child="accessible">
+                                                       <object class="AtkObject" id="config-vcpupin-atkobject">
+                                                         <property name="AtkObject::accessible-name" translatable="yes">Virtual CPU Affinity Select</property>
+                                                       </object>
+                                                     </child>
+-                                                    <signal name="changed" handler="on_config_vcpupin_changed" swapped="no"/>
+                                                   </object>
+                                                   <packing>
+                                                     <property name="expand">False</property>
+@@ -2553,12 +2665,12 @@
+                                                 <property name="climb_rate">2</property>
+                                                 <property name="numeric">True</property>
+                                                 <property name="update_policy">if-valid</property>
++                                                <signal name="changed" handler="on_config_memory_changed" swapped="no"/>
+                                                 <child internal-child="accessible">
+                                                   <object class="AtkObject" id="config-memory-atkobject">
+                                                     <property name="AtkObject::accessible-name" translatable="yes">Memory Select</property>
+                                                   </object>
+                                                 </child>
+-                                                <signal name="changed" handler="on_config_memory_changed" swapped="no"/>
+                                               </object>
+                                               <packing>
+                                                 <property name="expand">False</property>
+@@ -2602,12 +2714,12 @@
+                                                 <property name="climb_rate">2</property>
+                                                 <property name="numeric">True</property>
+                                                 <property name="update_policy">if-valid</property>
++                                                <signal name="changed" handler="on_config_maxmem_changed" swapped="no"/>
+                                                 <child internal-child="accessible">
+                                                   <object class="AtkObject" id="config-maxmem-atkobject">
+                                                     <property name="AtkObject::accessible-name" translatable="yes">Max Memory Select</property>
+                                                   </object>
+                                                 </child>
+-                                                <signal name="changed" handler="on_config_maxmem_changed" swapped="no"/>
+                                               </object>
+                                               <packing>
+                                                 <property name="expand">False</property>
+@@ -2733,34 +2845,68 @@
+                                     <property name="top_padding">3</property>
+                                     <property name="left_padding">12</property>
+                                     <child>
+-                                      <object class="GtkHBox" id="boot-init-path-box">
++                                      <object class="GtkGrid" id="grid3">
+                                         <property name="visible">True</property>
+                                         <property name="can_focus">False</property>
+-                                        <property name="spacing">12</property>
++                                        <property name="row_spacing">6</property>
++                                        <property name="column_spacing">6</property>
++                                        <child>
++                                          <object class="GtkEntry" id="boot-init-path">
++                                            <property name="visible">True</property>
++                                            <property name="can_focus">True</property>
++                                            <property name="invisible_char">●</property>
++                                            <property name="width_chars">25</property>
++                                            <signal name="changed" handler="on_boot_init_path_changed" swapped="no"/>
++                                          </object>
++                                          <packing>
++                                            <property name="left_attach">1</property>
++                                            <property name="top_attach">0</property>
++                                            <property name="width">1</property>
++                                            <property name="height">1</property>
++                                          </packing>
++                                        </child>
+                                         <child>
+                                           <object class="GtkLabel" id="label69">
+                                             <property name="visible">True</property>
+                                             <property name="can_focus">False</property>
+-                                            <property name="label" translatable="yes">Init path:</property>
++                                            <property name="label" translatable="yes">Init _path:</property>
++                                            <property name="use_underline">True</property>
++                                            <property name="mnemonic_widget">boot-init-path</property>
+                                           </object>
+                                           <packing>
+-                                            <property name="expand">False</property>
+-                                            <property name="fill">True</property>
+-                                            <property name="position">0</property>
++                                            <property name="left_attach">0</property>
++                                            <property name="top_attach">0</property>
++                                            <property name="width">1</property>
++                                            <property name="height">1</property>
+                                           </packing>
+                                         </child>
+                                         <child>
+-                                          <object class="GtkEntry" id="boot-init-path">
++                                          <object class="GtkLabel" id="label64">
++                                            <property name="visible">True</property>
++                                            <property name="can_focus">False</property>
++                                            <property name="label" translatable="yes">Init ar_gs:</property>
++                                            <property name="use_underline">True</property>
++                                            <property name="mnemonic_widget">boot-init-args</property>
++                                          </object>
++                                          <packing>
++                                            <property name="left_attach">0</property>
++                                            <property name="top_attach">1</property>
++                                            <property name="width">1</property>
++                                            <property name="height">1</property>
++                                          </packing>
++                                        </child>
++                                        <child>
++                                          <object class="GtkEntry" id="boot-init-args">
+                                             <property name="visible">True</property>
+                                             <property name="can_focus">True</property>
+-                                            <property name="invisible_char">●</property>
+                                             <property name="width_chars">25</property>
+-                                            <signal name="changed" handler="on_boot_init_path_changed" swapped="no"/>
++                                            <signal name="changed" handler="on_boot_init_args_changed" swapped="no"/>
+                                           </object>
+                                           <packing>
+-                                            <property name="expand">False</property>
+-                                            <property name="fill">True</property>
+-                                            <property name="position">1</property>
++                                            <property name="left_attach">1</property>
++                                            <property name="top_attach">1</property>
++                                            <property name="width">1</property>
++                                            <property name="height">1</property>
+                                           </packing>
+                                         </child>
+                                       </object>
+@@ -3517,6 +3663,8 @@
+                                                         <property name="visible">True</property>
+                                                         <property name="can_focus">False</property>
+                                                         <property name="xalign">1</property>
++                                                        <property name="yalign">0</property>
++                                                        <property name="ypad">4</property>
+                                                         <property name="label" translatable="yes">Storage forma_t:</property>
+                                                         <property name="use_underline">True</property>
+                                                       </object>
+@@ -3558,25 +3706,6 @@
+                                                       </packing>
+                                                     </child>
+                                                     <child>
+-                                                      <object class="GtkComboBox" id="disk-format">
+-                                                        <property name="visible">True</property>
+-                                                        <property name="can_focus">False</property>
+-                                                        <property name="has_entry">True</property>
+-                                                        <signal name="changed" handler="on_disk_format_changed" swapped="no"/>
+-                                                        <child internal-child="entry">
+-                                                          <object class="GtkEntry" id="combobox-entry9">
+-                                                            <property name="can_focus">True</property>
+-                                                          </object>
+-                                                        </child>
+-                                                      </object>
+-                                                      <packing>
+-                                                        <property name="left_attach">1</property>
+-                                                        <property name="top_attach">2</property>
+-                                                        <property name="width">1</property>
+-                                                        <property name="height">1</property>
+-                                                      </packing>
+-                                                    </child>
+-                                                    <child>
+                                                       <object class="GtkComboBox" id="disk-bus">
+                                                         <property name="visible">True</property>
+                                                         <property name="can_focus">False</property>
+@@ -3610,6 +3739,77 @@
+                                                         <property name="height">1</property>
+                                                       </packing>
+                                                     </child>
++                                                    <child>
++                                                      <object class="GtkBox" id="box15">
++                                                        <property name="visible">True</property>
++                                                        <property name="can_focus">False</property>
++                                                        <property name="orientation">vertical</property>
++                                                        <property name="spacing">6</property>
++                                                        <child>
++                                                          <object class="GtkComboBox" id="disk-format">
++                                                            <property name="visible">True</property>
++                                                            <property name="can_focus">False</property>
++                                                            <property name="has_entry">True</property>
++                                                            <signal name="changed" handler="on_disk_format_changed" swapped="no"/>
++                                                            <child internal-child="entry">
++                                                            <object class="GtkEntry" id="combobox-entry9">
++                                                            <property name="can_focus">True</property>
++                                                            </object>
++                                                            </child>
++                                                          </object>
++                                                          <packing>
++                                                            <property name="expand">False</property>
++                                                            <property name="fill">True</property>
++                                                            <property name="position">0</property>
++                                                          </packing>
++                                                        </child>
++                                                        <child>
++                                                          <object class="GtkBox" id="disk-format-warn">
++                                                            <property name="visible">True</property>
++                                                            <property name="can_focus">False</property>
++                                                            <property name="spacing">3</property>
++                                                            <child>
++                                                            <object class="GtkImage" id="image2">
++                                                            <property name="visible">True</property>
++                                                            <property name="can_focus">False</property>
++                                                            <property name="stock">gtk-dialog-warning</property>
++                                                            </object>
++                                                            <packing>
++                                                            <property name="expand">False</property>
++                                                            <property name="fill">True</property>
++                                                            <property name="position">0</property>
++                                                            </packing>
++                                                            </child>
++                                                            <child>
++                                                            <object class="GtkLabel" id="label34">
++                                                            <property name="visible">True</property>
++                                                            <property name="can_focus">False</property>
++                                                            <property name="label" translatable="yes"><small>Changing this will not change the disk image format, it only tells libvirt about the existing image format. </small></property>
++                                                            <property name="use_markup">True</property>
++                                                            <property name="wrap">True</property>
++                                                            <property name="max_width_chars">30</property>
++                                                            </object>
++                                                            <packing>
++                                                            <property name="expand">False</property>
++                                                            <property name="fill">False</property>
++                                                            <property name="position">1</property>
++                                                            </packing>
++                                                            </child>
++                                                          </object>
++                                                          <packing>
++                                                            <property name="expand">False</property>
++                                                            <property name="fill">True</property>
++                                                            <property name="position">1</property>
++                                                          </packing>
++                                                        </child>
++                                                      </object>
++                                                      <packing>
++                                                        <property name="left_attach">1</property>
++                                                        <property name="top_attach">2</property>
++                                                        <property name="width">1</property>
++                                                        <property name="height">1</property>
++                                                      </packing>
++                                                    </child>
+                                                   </object>
+                                                   <packing>
+                                                     <property name="expand">False</property>
+@@ -4208,14 +4408,12 @@
+                                     <property name="top_padding">3</property>
+                                     <property name="left_padding">12</property>
+                                     <child>
+-                                      <object class="GtkTable" id="table33">
++                                      <object class="GtkGrid" id="table33">
+                                         <property name="visible">True</property>
+                                         <property name="can_focus">False</property>
+                                         <property name="border_width">3</property>
+-                                        <property name="n_rows">2</property>
+-                                        <property name="n_columns">2</property>
+-                                        <property name="column_spacing">8</property>
+                                         <property name="row_spacing">4</property>
++                                        <property name="column_spacing">8</property>
+                                         <child>
+                                           <object class="GtkLabel" id="label402">
+                                             <property name="visible">True</property>
+@@ -4225,8 +4423,10 @@
+                                             <property name="use_underline">True</property>
+                                           </object>
+                                           <packing>
+-                                            <property name="x_options">GTK_FILL</property>
+-                                            <property name="y_options"/>
++                                            <property name="left_attach">0</property>
++                                            <property name="top_attach">0</property>
++                                            <property name="width">1</property>
++                                            <property name="height">1</property>
+                                           </packing>
+                                         </child>
+                                         <child>
+@@ -4237,10 +4437,10 @@
+                                             <property name="label" translatable="yes">Mode:</property>
+                                           </object>
+                                           <packing>
++                                            <property name="left_attach">0</property>
+                                             <property name="top_attach">1</property>
+-                                            <property name="bottom_attach">2</property>
+-                                            <property name="x_options">GTK_FILL</property>
+-                                            <property name="y_options"/>
++                                            <property name="width">1</property>
++                                            <property name="height">1</property>
+                                           </packing>
+                                         </child>
+                                         <child>
+@@ -4253,11 +4453,9 @@
+                                           </object>
+                                           <packing>
+                                             <property name="left_attach">1</property>
+-                                            <property name="right_attach">2</property>
+                                             <property name="top_attach">1</property>
+-                                            <property name="bottom_attach">2</property>
+-                                            <property name="x_options">GTK_FILL</property>
+-                                            <property name="y_options"/>
++                                            <property name="width">1</property>
++                                            <property name="height">1</property>
+                                           </packing>
+                                         </child>
+                                         <child>
+@@ -4270,8 +4468,9 @@
+                                           </object>
+                                           <packing>
+                                             <property name="left_attach">1</property>
+-                                            <property name="right_attach">2</property>
+-                                            <property name="y_options"/>
++                                            <property name="top_attach">0</property>
++                                            <property name="width">1</property>
++                                            <property name="height">1</property>
+                                           </packing>
+                                         </child>
+                                       </object>
+diff -urN virt-manager-1.0.1/ui/netlist.ui virt-manager/ui/netlist.ui
+--- virt-manager-1.0.1/ui/netlist.ui	2014-03-10 15:17:58.000000000 +0000
++++ virt-manager/ui/netlist.ui	2014-06-12 11:22:21.149891895 +0000
+@@ -96,7 +96,7 @@
+       </object>
+       <packing>
+         <property name="left_attach">0</property>
+-        <property name="top_attach">3</property>
++        <property name="top_attach">4</property>
+         <property name="width">2</property>
+         <property name="height">1</property>
+       </packing>
+@@ -111,7 +111,7 @@
+         <signal name="changed" handler="on_net_source_mode_changed" swapped="no"/>
+         <child internal-child="entry">
+           <object class="GtkEntry" id="combobox-entry">
+-            <property name="can_focus">False</property>
++            <property name="can_focus">True</property>
+           </object>
+         </child>
+       </object>
+@@ -161,6 +161,45 @@
+         <property name="height">1</property>
+       </packing>
+     </child>
++    <child>
++      <object class="GtkLabel" id="label3">
++        <property name="visible">True</property>
++        <property name="can_focus">False</property>
++        <property name="halign">start</property>
++        <property name="hexpand">False</property>
++        <property name="xalign">0</property>
++        <property name="label" translatable="yes">_Portgroup:</property>
++        <property name="use_underline">True</property>
++        <property name="mnemonic_widget">net-portgroup</property>
++      </object>
++      <packing>
++        <property name="left_attach">0</property>
++        <property name="top_attach">3</property>
++        <property name="width">1</property>
++        <property name="height">1</property>
++      </packing>
++    </child>
++    <child>
++      <object class="GtkComboBox" id="net-portgroup">
++        <property name="visible">True</property>
++        <property name="can_focus">False</property>
++        <property name="halign">start</property>
++        <property name="hexpand">True</property>
++        <property name="has_entry">True</property>
++        <signal name="changed" handler="on_net_portgroup_changed" swapped="no"/>
++        <child internal-child="entry">
++          <object class="GtkEntry" id="combobox-entry2">
++            <property name="can_focus">True</property>
++          </object>
++        </child>
++      </object>
++      <packing>
++        <property name="left_attach">1</property>
++        <property name="top_attach">3</property>
++        <property name="width">1</property>
++        <property name="height">1</property>
++      </packing>
++    </child>
+   </object>
+   <object class="GtkLabel" id="net-source-label">
+     <property name="visible">True</property>
+diff -urN virt-manager-1.0.1/ui/preferences.ui virt-manager/ui/preferences.ui
+--- virt-manager-1.0.1/ui/preferences.ui	2014-02-17 17:37:52.000000000 +0000
++++ virt-manager/ui/preferences.ui	2014-06-12 11:22:21.149891895 +0000
+@@ -880,6 +880,7 @@
+                             <property name="xalign">0</property>
+                             <property name="label" translatable="yes">_Interface start/stop:</property>
+                             <property name="use_underline">True</property>
++                            <property name="mnemonic_widget">prefs-confirm-interface</property>
+                           </object>
+                           <packing>
+                             <property name="left_attach">0</property>
+diff -urN virt-manager-1.0.1/virtcli/cliconfig.py virt-manager/virtcli/cliconfig.py
+--- virt-manager-1.0.1/virtcli/cliconfig.py	2014-03-22 22:37:44.000000000 +0000
++++ virt-manager/virtcli/cliconfig.py	2014-06-12 11:22:21.168891895 +0000
+@@ -53,9 +53,15 @@
+     schema and use it directly
+     """
+     import subprocess
++    from distutils.spawn import find_executable
++
++    exe = find_executable("glib-compile-schemas")
++    if not exe:
++        raise RuntimeError("You must install glib-compile-schemas to run "
++            "virt-manager from git.")
+ 
+     os.environ["GSETTINGS_SCHEMA_DIR"] = schemadir
+-    ret = subprocess.call(["glib-compile-schemas", "--strict", schemadir])
++    ret = subprocess.call([exe, "--strict", schemadir])
+     if ret != 0:
+         raise RuntimeError("Failed to compile local gsettings schemas")
+ 
+@@ -88,3 +94,4 @@
+ askpass_package = _split_list(_get_param("askpass_packages", ""))
+ libvirt_packages = _split_list(_get_param("libvirt_packages", ""))
+ default_graphics = _get_param("default_graphics", "spice")
++with_bhyve = bool(int(_get_param("with_bhyve", "0")))
+diff -urN virt-manager-1.0.1/virt-clone virt-manager/virt-clone
+--- virt-manager-1.0.1/virt-clone	2014-03-22 16:27:02.000000000 +0000
++++ virt-manager/virt-clone	2014-06-12 11:22:21.150891895 +0000
+@@ -31,7 +31,7 @@
+ from virtinst.cli import fail, print_stdout, print_stderr
+ 
+ 
+-### General input gathering functions
++# General input gathering functions
+ def get_clone_name(new_name, auto_clone, design):
+     if not new_name and auto_clone:
+         # Generate a name to use
+diff -urN virt-manager-1.0.1/virtconv/formats.py virt-manager/virtconv/formats.py
+--- virt-manager-1.0.1/virtconv/formats.py	2014-03-06 17:51:59.000000000 +0000
++++ virt-manager/virtconv/formats.py	2014-06-12 11:22:21.168891895 +0000
+@@ -174,16 +174,18 @@
+     """
+     Public interface for actually performing the conversion
+     """
+-    def __init__(self, conn, input_file, print_cb=None, input_name=None):
++    def __init__(self, conn, input_file, print_cb=-1, input_name=None):
+         self.conn = conn
+         self._err_clean = []
+         self._force_clean = []
+ 
+-        if print_cb is None:
++        if print_cb == -1 or print_cb is None:
+             def cb(msg):
+-                print msg
+-            print_cb = cb
+-        self.print_cb = print_cb
++                if print_cb == -1:
++                    print msg
++            self.print_cb = cb
++        else:
++            self.print_cb = print_cb
+ 
+         parser = None
+         if input_name:
+@@ -195,7 +197,7 @@
+         (self._input_file,
+          self.parser,
+          self._force_clean) = _find_input(input_file, parser, self.print_cb)
+-        self._top_dir = os.path.dirname(self._input_file)
++        self._top_dir = os.path.dirname(os.path.abspath(self._input_file))
+ 
+         logging.debug("converter not input_file=%s parser=%s",
+             self._input_file, self.parser)
+@@ -270,7 +272,7 @@
+             disk_format = None
+ 
+         if destdir is None:
+-            destdir = StoragePool.get_default_path(self.conn)
++            destdir = StoragePool.get_default_path(self.conn, build=not dry)
+ 
+         guest = self.get_guest()
+         for disk in guest.get_devices("disk"):
+diff -urN virt-manager-1.0.1/virtconv/ovf.py virt-manager/virtconv/ovf.py
+--- virt-manager-1.0.1/virtconv/ovf.py	2014-02-17 17:37:52.000000000 +0000
++++ virt-manager/virtconv/ovf.py	2014-06-12 11:22:21.168891895 +0000
+@@ -285,7 +285,7 @@
+     ifaces = []
+     for node in ctx.xpathEval(vhbase % DEVICE_ETHERNET):
+         iface = virtinst.VirtualNetworkInterface(conn)
+-            # XXX: Just ignore 'source' info and choose the default
++        # XXX: Just ignore 'source' info and choose the default
+         net_model = _get_child_content(node, "ResourceSubType")
+         if net_model and not net_model.isdigit():
+             iface.model = net_model.lower()
+diff -urN virt-manager-1.0.1/virt-convert virt-manager/virt-convert
+--- virt-manager-1.0.1/virt-convert	2014-03-22 16:27:02.000000000 +0000
++++ virt-manager/virt-convert	2014-06-12 11:22:21.150891895 +0000
+@@ -97,9 +97,12 @@
+         options.quiet = True
+ 
+     conscb = options.autoconsole and cli.show_console_for_guest or None
++    print_cb = print_stdout
++    if options.quiet:
++        print_cb = None
+ 
+     converter = VirtConverter(conn, options.input,
+-        input_name=options.input_format, print_cb=print_stdout)
++        input_name=options.input_format, print_cb=print_cb)
+     try:
+         converter.convert_disks(options.disk_format or "none",
+             destdir=options.destination, dry=options.dry)
+diff -urN virt-manager-1.0.1/virt-image virt-manager/virt-image
+--- virt-manager-1.0.1/virt-image	2014-03-22 16:27:02.000000000 +0000
++++ virt-manager/virt-image	2014-06-12 11:22:21.150891895 +0000
+@@ -33,7 +33,7 @@
+ from virtinst import virtimage
+ 
+ 
+-### Option parsing
++# Option parsing
+ def parse_args():
+     parser = cli.setupParser(
+         "%(prog)s image.xml [OPTIONS]",
+diff -urN virt-manager-1.0.1/virtinst/capabilities.py virt-manager/virtinst/capabilities.py
+--- virt-manager-1.0.1/virtinst/capabilities.py	2014-03-20 18:04:29.000000000 +0000
++++ virt-manager/virtinst/capabilities.py	2014-06-12 11:22:21.169891895 +0000
+@@ -102,16 +102,21 @@
+     Fallback method to lists cpu models, parsed directly from libvirt's local
+     cpu_map.xml
+     """
++    _cpu_filename = "/usr/share/libvirt/cpu_map.xml"
++
+     def __init__(self):
+         _CPUAPIValues.__init__(self)
+         self.archmap = {}
+-        cpu_filename = "/usr/share/libvirt/cpu_map.xml"
+-        xml = file(cpu_filename).read()
++        xml = file(self._cpu_filename).read()
+ 
+         util.parse_node_helper(xml, "cpus",
+                                 self._parseXML,
+                                 RuntimeError)
+ 
++    @staticmethod
++    def update_cpu_filename(name):
++        _CPUMapFileValues._cpu_filename = name
++
+     def _parseXML(self, node):
+         child = node.children
+         while child:
+@@ -221,7 +226,7 @@
+         self.threads = 1
+         self.features = CapabilityFeatures()
+ 
+-        if not node is None:
++        if node is not None:
+             self.parseXML(node)
+ 
+     def parseXML(self, node):
+@@ -263,7 +268,7 @@
+         self.topology = None
+         self.secmodels = []
+ 
+-        if not node is None:
++        if node is not None:
+             self.parseXML(node)
+ 
+     def get_secmodel(self):
+@@ -296,7 +301,7 @@
+ 
+         self.features = CapabilityFeatures()
+ 
+-        if not node is None:
++        if node is not None:
+             self.parseXML(node)
+ 
+     def parseXML(self, node):
+@@ -403,7 +408,7 @@
+     def __init__(self, node=None):
+         self.cells = []
+ 
+-        if not node is None:
++        if node is not None:
+             self.parseXML(node)
+ 
+     def parseXML(self, node):
+@@ -419,7 +424,7 @@
+         self.id = None
+         self.cpus = []
+ 
+-        if not node is None:
++        if node is not None:
+             self.parseXML(node)
+ 
+     def parseXML(self, node):
+@@ -435,7 +440,7 @@
+     def __init__(self, node=None):
+         self.id = None
+ 
+-        if not node is None:
++        if node is not None:
+             self.parseXML(node)
+ 
+     def parseXML(self, node):
+@@ -448,7 +453,7 @@
+         self.doi = None
+         self.baselabels = {}
+ 
+-        if not node is None:
++        if node is not None:
+             self.parseXML(node)
+ 
+     def parseXML(self, node):
+diff -urN virt-manager-1.0.1/virtinst/cli.py virt-manager/virtinst/cli.py
+--- virt-manager-1.0.1/virtinst/cli.py	2014-03-22 16:27:02.000000000 +0000
++++ virt-manager/virtinst/cli.py	2014-06-12 11:22:21.169891895 +0000
+@@ -117,7 +117,7 @@
+     quiet = do_quiet
+ 
+     vi_dir = None
+-    if not "VIRTINST_TEST_SUITE" in os.environ:
++    if "VIRTINST_TEST_SUITE" not in os.environ:
+         vi_dir = util.get_cache_dir()
+ 
+     if vi_dir and not os.access(vi_dir, os.W_OK):
+@@ -347,7 +347,7 @@
+         return child
+ 
+     os.execvp(args[0], args)
+-    os._exit(1)  # pylint: disable=W0212
++    os._exit(1)  # pylint: disable=protected-access
+ 
+ 
+ def _gfx_console(guest):
+@@ -787,8 +787,9 @@
+     geng.add_argument("--blkiotune", action="append",
+                     help=_("Tune blkio policy for the domain process."))
+     geng.add_argument("--memorybacking", action="append",
+-        help=_("Set memory backing policy for the domain process. Ex:\n"
+-               "--memorybacking hugepages=on"))
++                    help=_("Set memory backing policy for "
++                        "the domain process. Ex:\n"
++                        "--memorybacking hugepages=on"))
+     geng.add_argument("--features",
+                     help=_("Set domain <features> XML. Ex:\n"
+                            "--features acpi=off\n"
+@@ -797,6 +798,10 @@
+                     help=_("Set domain <clock> XML. Ex:\n"
+                            "--clock offset=localtime,rtc_tickpolicy=catchup"))
+     geng.add_argument("--pm", help=_("Config power management features"))
++    geng.add_argument("--events",
++                    help=_("Config OS lifecycle operation management features"))
++    geng.add_argument("--resource", action="append",
++                    help=_("Config OS resource management features"))
+ 
+ 
+ def add_boot_options(insg):
+@@ -926,7 +931,8 @@
+         elif self.setter_cb:
+             self.setter_cb(opts, inst, self.cliname, val)
+         else:
+-            exec("inst." + self.attrname + " = val")  # pylint: disable=W0122
++            exec(  # pylint: disable=exec-used
++                "inst." + self.attrname + " = val")
+ 
+ 
+ class VirtOptionString(object):
+@@ -1135,7 +1141,7 @@
+         for optstr in optlist:
+             optinst = inst
+             if self.devclass and not inst:
+-                optinst = self.devclass(guest.conn)  # pylint: disable=E1102
++                optinst = self.devclass(guest.conn)  # pylint: disable=not-callable
+ 
+             try:
+                 devs = self._parse_single_optstr(guest, optstr, optinst)
+@@ -1224,6 +1230,29 @@
+         self.set_param("description", "description", can_comma=True)
+ 
+ 
++####################
++# --events parsing #
++####################
++
++class ParserEvents(VirtCLIParser):
++    def _init_params(self):
++        self.set_param("on_poweroff", "on_poweroff")
++        self.set_param("on_reboot", "on_reboot")
++        self.set_param("on_crash", "on_crash")
++
++
++######################
++# --resource parsing #
++######################
++
++class ParserResource(VirtCLIParser):
++    def _init_params(self):
++        self.remove_first = "partition"
++        self.clear_attr = "resource"
++
++        self.set_param("resource.partition", "partition")
++
++
+ ######################
+ # --numatune parsing #
+ ######################
+@@ -1410,6 +1439,12 @@
+         self.set_param("os.os_type", "os_type")
+         self.set_param("emulator", "emulator")
+ 
++        def set_initargs_cb(opts, inst, cliname, val):
++            ignore = opts
++            ignore = cliname
++            inst.os.set_initargs_string(val)
++        self.set_param("os.initargs", "initargs", setter_cb=set_initargs_cb)
++
+         # Order matters for boot devices, we handle it specially in parse
+         def noset_cb(val):
+             ignore = val
+@@ -1420,7 +1455,7 @@
+         # Build boot order
+         boot_order = []
+         for cliname, ignore in opts.orderedopts:
+-            if not cliname in inst.os.BOOT_DEVICES:
++            if cliname not in inst.os.BOOT_DEVICES:
+                 continue
+ 
+             del(opts.opts[cliname])
+@@ -1637,6 +1672,7 @@
+         self.set_param("bus", "bus")
+         self.set_param("removable", "removable", is_onoff=True)
+         self.set_param("driver_cache", "cache")
++        self.set_param("driver_discard", "discard")
+         self.set_param("driver_name", "driver_name")
+         self.set_param("driver_type", "driver_type")
+         self.set_param("driver_io", "io")
+@@ -1742,6 +1778,7 @@
+         self.set_param("type", "type", setter_cb=set_type_cb)
+         self.set_param("source", "source")
+         self.set_param("source_mode", "source_mode")
++        self.set_param("portgroup", "portgroup")
+         self.set_param("target_dev", "target")
+         self.set_param("model", "model")
+         self.set_param("macaddr", "mac", setter_cb=set_mac_cb)
+@@ -1966,11 +2003,11 @@
+     def _parse(self, optsobj, inst):
+         opts = optsobj.opts
+ 
+-        # pylint: disable=W0201
++        # pylint: disable=attribute-defined-outside-init
+         # Defined outside init, but its easier this way
+         self._cli_backend_mode = "connect"
+         self._cli_backend_type = "udp"
+-        # pylint: enable=W0201
++        # pylint: enable=attribute-defined-outside-init
+ 
+         if opts.get("type", "").startswith("/"):
+             # Allow --rng /dev/random
+@@ -2210,6 +2247,8 @@
+         parsermap[parserobj.option_variable_name] = parserobj
+ 
+     register_parser("metadata", ParserMetadata)
++    register_parser("events", ParserEvents)
++    register_parser("resource", ParserResource)
+     register_parser("memory", ParserMemory)
+     register_parser("memtune", ParserMemorytune)
+     register_parser("vcpus", ParserVCPU)
+diff -urN virt-manager-1.0.1/virtinst/connection.py virt-manager/virtinst/connection.py
+--- virt-manager-1.0.1/virtinst/connection.py	2014-03-20 18:04:29.000000000 +0000
++++ virt-manager/virtinst/connection.py	2014-06-12 11:22:21.170891895 +0000
+@@ -185,7 +185,7 @@
+         Returns a list of Guest() objects
+         """
+         if self.cb_fetch_all_guests:
+-            return self.cb_fetch_all_guests()  # pylint: disable=E1102
++            return self.cb_fetch_all_guests()  # pylint: disable=not-callable
+         return self._fetch_all_guests_cached()
+ 
+     def _fetch_all_pools_cached(self):
+@@ -206,7 +206,7 @@
+         Returns a list of StoragePool objects
+         """
+         if self.cb_fetch_all_pools:
+-            return self.cb_fetch_all_pools()  # pylint: disable=E1102
++            return self.cb_fetch_all_pools()  # pylint: disable=not-callable
+         return self._fetch_all_pools_cached()
+ 
+     def _fetch_all_vols_cached(self):
+@@ -236,12 +236,12 @@
+         Returns a list of StorageVolume objects
+         """
+         if self.cb_fetch_all_vols:
+-            return self.cb_fetch_all_vols()  # pylint: disable=E1102
++            return self.cb_fetch_all_vols()  # pylint: disable=not-callable
+         return self._fetch_all_vols_cached()
+ 
+     def clear_cache(self, pools=False):
+         if self.cb_clear_cache:
+-            self.cb_clear_cache(pools=pools)  # pylint: disable=E1102
++            self.cb_clear_cache(pools=pools)  # pylint: disable=not-callable
+             return
+ 
+         if pools:
+diff -urN virt-manager-1.0.1/virtinst/devicechar.py virt-manager/virtinst/devicechar.py
+--- virt-manager-1.0.1/virtinst/devicechar.py	2014-02-17 17:37:52.000000000 +0000
++++ virt-manager/virtinst/devicechar.py	2014-06-12 11:22:21.170891895 +0000
+@@ -38,10 +38,12 @@
+     TYPE_UDP      = "udp"
+     TYPE_UNIX     = "unix"
+     TYPE_SPICEVMC = "spicevmc"
++    TYPE_SPICEPORT = "spiceport"
++
+     # We don't list the non-UI friendly types here
+     _TYPES_FOR_ALL = [TYPE_PTY, TYPE_DEV, TYPE_FILE,
+                       TYPE_TCP, TYPE_UDP, TYPE_UNIX]
+-    _TYPES_FOR_CHANNEL = [TYPE_SPICEVMC]
++    _TYPES_FOR_CHANNEL = [TYPE_SPICEVMC, TYPE_SPICEPORT]
+     TYPES = _TYPES_FOR_ALL
+ 
+     MODE_CONNECT = "connect"
+@@ -67,9 +69,11 @@
+     CHANNEL_NAME_SPICE = "com.redhat.spice.0"
+     CHANNEL_NAME_QEMUGA = "org.qemu.guest_agent.0"
+     CHANNEL_NAME_LIBGUESTFS = "org.libguestfs.channel.0"
++    CHANNEL_NAME_SPICE_WEBDAV = "org.spice-space.webdav.0"
+     CHANNEL_NAMES = [CHANNEL_NAME_SPICE,
+                      CHANNEL_NAME_QEMUGA,
+-                     CHANNEL_NAME_LIBGUESTFS]
++                     CHANNEL_NAME_LIBGUESTFS,
++                     CHANNEL_NAME_SPICE_WEBDAV]
+ 
+     @staticmethod
+     def pretty_channel_name(val):
+@@ -79,6 +83,8 @@
+             return "qemu-ga"
+         if val == _VirtualCharDevice.CHANNEL_NAME_LIBGUESTFS:
+             return "libguestfs"
++        if val == _VirtualCharDevice.CHANNEL_NAME_SPICE_WEBDAV:
++            return "spice-webdav"
+         return None
+ 
+     @staticmethod
+@@ -110,6 +116,8 @@
+             desc = _("Unix socket")
+         elif ctype == _VirtualCharDevice.TYPE_SPICEVMC:
+             desc = _("Spice agent")
++        elif ctype == _VirtualCharDevice.TYPE_SPICEPORT:
++            desc = _("Spice port")
+ 
+         return desc
+ 
+@@ -137,6 +145,7 @@
+             "source_mode"   : [self.TYPE_UNIX, self.TYPE_TCP],
+             "source_host"   : [self.TYPE_TCP, self.TYPE_UDP],
+             "source_port"   : [self.TYPE_TCP, self.TYPE_UDP],
++            "source_channel": [self.TYPE_SPICEPORT],
+             "protocol"      : [self.TYPE_TCP],
+             "bind_host"     : [self.TYPE_UDP],
+             "bind_port"     : [self.TYPE_UDP],
+@@ -170,7 +179,7 @@
+ 
+     _XML_PROP_ORDER = ["type", "_has_mode_bind", "_has_mode_connect",
+                        "bind_host", "bind_port",
+-                       "source_mode", "_source_path",
++                       "source_mode", "_source_path", "source_channel",
+                        "source_host", "source_port",
+                        "target_type", "target_name"]
+ 
+@@ -191,6 +200,9 @@
+         self._source_path = val
+     source_path = property(_get_source_path, _set_source_path)
+ 
++    source_channel = XMLProperty(xpath="./source/@channel",
++                                 doc=_("Source channel name."))
++
+     def _get_default_source_mode(self):
+         if self.type == self.TYPE_UDP:
+             return self.MODE_CONNECT
+diff -urN virt-manager-1.0.1/virtinst/devicedisk.py virt-manager/virtinst/devicedisk.py
+--- virt-manager-1.0.1/virtinst/devicedisk.py	2014-03-10 15:17:52.000000000 +0000
++++ virt-manager/virtinst/devicedisk.py	2014-06-12 11:22:21.170891895 +0000
+@@ -169,6 +169,10 @@
+     cache_types = [CACHE_MODE_NONE, CACHE_MODE_WRITETHROUGH,
+         CACHE_MODE_WRITEBACK, CACHE_MODE_DIRECTSYNC, CACHE_MODE_UNSAFE]
+ 
++    DISCARD_MODE_IGNORE = "ignore"
++    DISCARD_MODE_UNMAP = "unmap"
++    discard_types = [DISCARD_MODE_IGNORE, DISCARD_MODE_UNMAP]
++
+     DEVICE_DISK = "disk"
+     DEVICE_LUN = "lun"
+     DEVICE_CDROM = "cdrom"
+@@ -494,7 +498,7 @@
+     _XML_PROP_ORDER = [
+         "type", "device",
+         "driver_name", "driver_type",
+-        "driver_cache", "driver_io", "error_policy",
++        "driver_cache", "driver_discard", "driver_io", "error_policy",
+         "_xmlpath", "target", "bus",
+     ]
+ 
+@@ -607,6 +611,7 @@
+     read_only = XMLProperty("./readonly", is_bool=True)
+     shareable = XMLProperty("./shareable", is_bool=True)
+     driver_cache = XMLProperty("./driver/@cache")
++    driver_discard = XMLProperty("./driver/@discard")
+     driver_io = XMLProperty("./driver/@io")
+ 
+     error_policy = XMLProperty("./driver/@error_policy")
+diff -urN virt-manager-1.0.1/virtinst/devicefilesystem.py virt-manager/virtinst/devicefilesystem.py
+--- virt-manager-1.0.1/virtinst/devicefilesystem.py	2014-02-17 17:37:52.000000000 +0000
++++ virt-manager/virtinst/devicefilesystem.py	2014-06-12 11:22:21.170891895 +0000
+@@ -100,7 +100,8 @@
+         # actually a directory, it is merely a arbitrary string tag
+         # that is exported to the guest as a hint for where to mount
+         if (self.conn.is_qemu() and
+-            (self.type == self.TYPE_DEFAULT or
++            (self.type is None or
++             self.type == self.TYPE_DEFAULT or
+              self.type == self.TYPE_MOUNT)):
+             pass
+         elif not os.path.isabs(val):
+diff -urN virt-manager-1.0.1/virtinst/deviceinterface.py virt-manager/virtinst/deviceinterface.py
+--- virt-manager-1.0.1/virtinst/deviceinterface.py	2014-02-17 17:37:52.000000000 +0000
++++ virt-manager/virtinst/deviceinterface.py	2014-06-12 11:22:21.171891895 +0000
+@@ -208,7 +208,7 @@
+     ##################
+ 
+     _XML_PROP_ORDER = [
+-        "_bridge", "_network", "_source_dev", "source_mode",
++        "_bridge", "_network", "_source_dev", "source_mode", "portgroup",
+         "macaddr", "target_dev", "model", "virtualport",
+         "filterref"]
+ 
+@@ -226,6 +226,7 @@
+ 
+     source_mode = XMLProperty("./source/@mode",
+                               default_cb=_default_source_mode)
++    portgroup = XMLProperty("./source/@portgroup")
+     model = XMLProperty("./model/@type")
+     target_dev = XMLProperty("./target/@dev")
+     filterref = XMLProperty("./filterref/@filter")
+diff -urN virt-manager-1.0.1/virtinst/diskbackend.py virt-manager/virtinst/diskbackend.py
+--- virt-manager-1.0.1/virtinst/diskbackend.py	2014-02-17 17:37:52.000000000 +0000
++++ virt-manager/virtinst/diskbackend.py	2014-06-12 11:22:21.171891895 +0000
+@@ -86,9 +86,9 @@
+     if not vol:
+         pool = StoragePool.lookup_pool_by_path(conn, os.path.dirname(path))
+ 
+-        # Is pool running?
++        # Ensure pool is running
+         if pool and pool.info()[0] != libvirt.VIR_STORAGE_POOL_RUNNING:
+-            pool = None
++            pool.create(0)
+ 
+     # Attempt to lookup path as a storage volume
+     if pool and not vol:
+@@ -137,13 +137,14 @@
+         return vol, pool, path_is_pool
+ 
+     dirname = os.path.dirname(path)
+-    poolname = StoragePool.find_free_name(
+-        conn, os.path.basename(dirname) or "pool")
++    poolname = os.path.basename(dirname).replace(" ", "_")
++    if not poolname:
++        poolname = "dirpool"
++    poolname = StoragePool.find_free_name(conn, poolname)
+     logging.debug("Attempting to build pool=%s target=%s", poolname, dirname)
+ 
+     poolxml = StoragePool(conn)
+-    poolxml.name = poolxml.find_free_name(
+-        conn, os.path.basename(dirname) or "dirpool")
++    poolxml.name = poolname
+     poolxml.type = poolxml.TYPE_DIR
+     poolxml.target_path = dirname
+     pool = poolxml.install(build=False, create=True, autostart=True)
+diff -urN virt-manager-1.0.1/virtinst/distroinstaller.py virt-manager/virtinst/distroinstaller.py
+--- virt-manager-1.0.1/virtinst/distroinstaller.py	2014-03-06 17:52:00.000000000 +0000
++++ virt-manager/virtinst/distroinstaller.py	2014-06-12 11:22:21.172891895 +0000
+@@ -1,5 +1,5 @@
+ #
+-# Copyright 2006-2009, 2013 Red Hat, Inc.
++# Copyright 2006-2009, 2013, 2014 Red Hat, Inc.
+ # Daniel P. Berrange <berrange at redhat.com>
+ #
+ # This program is free software; you can redistribute it and/or modify
+@@ -30,6 +30,7 @@
+ from virtinst import Installer
+ from virtinst import VirtualDisk
+ from virtinst import urlfetcher
++from virtinst import osdict
+ 
+ 
+ def _is_url(conn, url):
+@@ -166,7 +167,7 @@
+         file_proc = subprocess.Popen(["file", "-z", initrd],
+                                      stdout=subprocess.PIPE,
+                                      stderr=subprocess.PIPE)
+-        if not "ext2 filesystem" in file_proc.communicate()[0]:
++        if "ext2 filesystem" not in file_proc.communicate()[0]:
+             return False
+     except:
+         logging.exception("Failed to file command for rhel4 initrd detection")
+@@ -473,6 +474,15 @@
+ 
+     def detect_distro(self, guest):
+         try:
++            if not _is_url(self.conn, self.location):
++                name = osdict.lookup_os_by_media(self.location)
++                if name:
++                    logging.debug("installer.detect_distro returned=%s", name)
++                    return name
++        except:
++            logging.debug("libosinfo detect failed", exc_info=True)
++
++        try:
+             ret = urlfetcher.detectMediaDistro(guest, self.location)
+             logging.debug("installer.detect_distro returned=%s", ret)
+             return ret
+diff -urN virt-manager-1.0.1/virtinst/domainresource.py virt-manager/virtinst/domainresource.py
+--- virt-manager-1.0.1/virtinst/domainresource.py	1970-01-01 00:00:00.000000000 +0000
++++ virt-manager/virtinst/domainresource.py	2014-06-12 11:22:21.172891895 +0000
+@@ -0,0 +1,31 @@
++#
++# Copyright 2014 Fujitsu Limited.
++# Chen Hanxiao <chenhanxiao at cn.fujitsu.com>
++#
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2 of the License, or
++# (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
++# MA 02110-1301 USA.
++
++from virtinst.xmlbuilder import XMLBuilder, XMLProperty
++
++
++class DomainResource(XMLBuilder):
++    """
++    Class for generating <resource> XML
++    """
++
++    _XML_ROOT_NAME = "resource"
++    _XML_PROP_ORDER = ["partition"]
++
++    partition = XMLProperty("./partition")
+diff -urN virt-manager-1.0.1/virtinst/guest.py virt-manager/virtinst/guest.py
+--- virt-manager-1.0.1/virtinst/guest.py	2014-03-22 16:25:24.000000000 +0000
++++ virt-manager/virtinst/guest.py	2014-06-12 11:22:21.173891895 +0000
+@@ -39,6 +39,7 @@
+ from virtinst import DomainMemorybacking
+ from virtinst import DomainBlkiotune
+ from virtinst import DomainFeatures
++from virtinst import DomainResource
+ from virtinst import PM
+ from virtinst import IdMap
+ from virtinst.xmlbuilder import XMLBuilder, XMLProperty, XMLChildProperty
+@@ -93,9 +94,9 @@
+ 
+     _XML_ROOT_NAME = "domain"
+     _XML_PROP_ORDER = ["type", "name", "uuid", "title", "description",
+-        "maxmemory", "memory", "memoryBacking", "vcpus", "curvcpus", "memtune",
+-        "numatune", "blkiotune", "bootloader", "os", "idmap", "features",
+-        "cpu", "clock", "on_poweroff", "on_reboot", "on_crash", "pm",
++        "maxmemory", "memory", "blkiotune", "memtune", "memoryBacking",
++        "vcpus", "curvcpus", "numatune", "bootloader", "os", "idmap", "features",
++        "cpu", "clock", "on_poweroff", "on_reboot", "on_crash", "resource", "pm",
+         "emulator", "_devices", "seclabel"]
+ 
+     def __init__(self, *args, **kwargs):
+@@ -196,6 +197,7 @@
+     memtune = XMLChildProperty(DomainMemorytune, is_single=True)
+     memoryBacking = XMLChildProperty(DomainMemorybacking, is_single=True)
+     idmap = XMLChildProperty(IdMap, is_single=True)
++    resource = XMLChildProperty(DomainResource, is_single=True)
+ 
+ 
+     ###############################
+diff -urN virt-manager-1.0.1/virtinst/__init__.py virt-manager/virtinst/__init__.py
+--- virt-manager-1.0.1/virtinst/__init__.py	2014-03-22 16:16:24.000000000 +0000
++++ virt-manager/virtinst/__init__.py	2014-06-12 11:22:21.168891895 +0000
+@@ -29,6 +29,7 @@
+ from virtinst.domainblkiotune import DomainBlkiotune
+ from virtinst.domainmemorytune import DomainMemorytune
+ from virtinst.domainmemorybacking import DomainMemorybacking
++from virtinst.domainresource import DomainResource
+ from virtinst.clock import Clock
+ from virtinst.cpu import CPU, CPUFeature
+ from virtinst.seclabel import Seclabel
+diff -urN virt-manager-1.0.1/virtinst/interface.py virt-manager/virtinst/interface.py
+--- virt-manager-1.0.1/virtinst/interface.py	2014-02-17 17:37:52.000000000 +0000
++++ virt-manager/virtinst/interface.py	2014-06-12 11:22:21.173891895 +0000
+@@ -23,6 +23,7 @@
+ import logging
+ 
+ import libvirt
++import ipaddr
+ 
+ from virtinst import util
+ from virtinst.xmlbuilder import XMLBuilder, XMLChildProperty, XMLProperty
+@@ -32,7 +33,15 @@
+     _XML_PROP_ORDER = ["address", "prefix"]
+     _XML_ROOT_NAME = "ip"
+ 
+-    address = XMLProperty("./@address")
++    ######################
++    # Validation helpers #
++    ######################
++
++    def _validate_ipaddr(self, addr):
++        ipaddr.IPAddress(addr)
++        return addr
++
++    address = XMLProperty("./@address", validate_cb=_validate_ipaddr)
+     prefix = XMLProperty("./@prefix", is_int=True)
+ 
+ 
+diff -urN virt-manager-1.0.1/virtinst/network.py virt-manager/virtinst/network.py
+--- virt-manager-1.0.1/virtinst/network.py	2014-02-17 17:37:52.000000000 +0000
++++ virt-manager/virtinst/network.py	2014-06-12 11:22:21.173891895 +0000
+@@ -82,6 +82,13 @@
+         return Network.pretty_forward_desc(self.mode, self.dev)
+ 
+ 
++class _NetworkPortgroup(XMLBuilder):
++    _XML_ROOT_NAME = "portgroup"
++
++    name = XMLProperty("./@name")
++    default = XMLProperty("./@default", is_yesno=True)
++
++
+ class Network(XMLBuilder):
+     """
+     Top level class for <network> object XML
+@@ -172,6 +179,7 @@
+     delay = XMLProperty("./bridge/@delay", is_int=True)
+     macaddr = XMLProperty("./mac/@address")
+ 
++    portgroups = XMLChildProperty(_NetworkPortgroup)
+     ips = XMLChildProperty(_NetworkIP)
+     routes = XMLChildProperty(_NetworkRoute)
+ 
+@@ -184,6 +192,7 @@
+         self._add_child(route)
+         return route
+ 
++
+     ##################
+     # build routines #
+     ##################
+diff -urN virt-manager-1.0.1/virtinst/nodedev.py virt-manager/virtinst/nodedev.py
+--- virt-manager-1.0.1/virtinst/nodedev.py	2014-03-22 14:17:11.000000000 +0000
++++ virt-manager/virtinst/nodedev.py	2014-06-12 11:22:21.173891895 +0000
+@@ -169,9 +169,10 @@
+     iommu_group = XMLProperty("./capability/iommuGroup/@number", is_int=True)
+ 
+     def pretty_name(self):
+-        devstr = "%.2X:%.2X:%X" % (int(self.bus),
+-                                   int(self.slot),
+-                                   int(self.function))
++        devstr = "%.4X:%.2X:%.2X:%X" % (int(self.domain),
++                                        int(self.bus),
++                                        int(self.slot),
++                                        int(self.function))
+ 
+         return "%s %s %s" % (devstr, self.vendor_name, self.product_name)
+ 
+diff -urN virt-manager-1.0.1/virtinst/osdict.py virt-manager/virtinst/osdict.py
+--- virt-manager-1.0.1/virtinst/osdict.py	2014-02-17 17:37:52.000000000 +0000
++++ virt-manager/virtinst/osdict.py	2014-06-12 11:22:21.173891895 +0000
+@@ -21,13 +21,48 @@
+ 
+ _SENTINEL = -1234
+ _allvariants = {}
+-
+-
+-def lookup_os(key):
+-    ret = _allvariants.get(key)
+-    if ret is None:
+-        return ret
+-    return ret
++from datetime import datetime
++from gi.repository import Libosinfo as libosinfo
++from inspect import isfunction
++
++_aliases = {
++    "altlinux" : "altlinux1.0",
++    "debianetch" : "debian4",
++    "debianlenny" : "debian5",
++    "debiansqueeze" : "debian6",
++    "debianwheezy" : "debian7",
++    "freebsd10" : "freebsd10.0",
++    "freebsd6" : "freebsd6.0",
++    "freebsd7" : "freebsd7.0",
++    "freebsd8" : "freebsd8.0",
++    "freebsd9" : "freebsd9.0",
++    "mandriva2009" : "mandriva2009.0",
++    "mandriva2010" : "mandriva2010.0",
++    "mbs1" : "mbs1.0",
++    "msdos" : "msdos6.22",
++    "openbsd4" : "openbsd4.2",
++    "opensolaris" : "opensolaris2009.06",
++    "opensuse11" : "opensuse11.4",
++    "opensuse12" : "opensuse12.3",
++    "rhel4" : "rhel4.0",
++    "rhel5" : "rhel5.0",
++    "rhel6" : "rhel6.0",
++    "rhel7" : "rhel7.0",
++    "ubuntuhardy" : "ubuntu8.04",
++    "ubuntuintrepid" : "ubuntu8.10",
++    "ubuntujaunty" : "ubuntu9.04",
++    "ubuntukarmic" : "ubuntu9.10",
++    "ubuntulucid" : "ubuntu10.04",
++    "ubuntumaverick" : "ubuntu10.10",
++    "ubuntunatty" : "ubuntu11.04",
++    "ubuntuoneiric" : "ubuntu11.10",
++    "ubuntuprecise" : "ubuntu12.04",
++    "ubuntuquantal" : "ubuntu12.10",
++    "ubunturaring" : "ubuntu13.04",
++    "ubuntusaucy" : "ubuntu13.10",
++    "vista" : "winvista",
++    "winxp64" : "winxp",
++}
+ 
+ 
+ def _sort(tosort, sortpref=None):
+@@ -40,6 +75,10 @@
+     # by their 'distro' tag first and foremost
+     for key, osinfo in tosort.items():
+         sortby = osinfo.sortby or key
++        # Hack to allow "sortby" duplicates.  Remove when this never happens
++        # with libosinfo
++        while sortby_mappings.get(sortby):
++            sortby = sortby + ".1"
+         sortby_mappings[sortby] = key
+ 
+         distro = osinfo.urldistro or "zzzzzzz"
+@@ -59,7 +98,7 @@
+     sorted_distro_list.sort()
+     sortpref.reverse()
+     for prefer in sortpref:
+-        if not prefer in sorted_distro_list:
++        if prefer not in sorted_distro_list:
+             continue
+         sorted_distro_list.remove(prefer)
+         sorted_distro_list.insert(0, prefer)
+@@ -73,38 +112,6 @@
+     return retlist
+ 
+ 
+-def list_os(list_types=False, typename=None,
+-            filtervars=None, only_supported=False,
+-            **kwargs):
+-    sortmap = {}
+-    filtervars = filtervars or []
+-
+-    for key, osinfo in _allvariants.items():
+-        if list_types and not osinfo.is_type:
+-            continue
+-        if not list_types and osinfo.is_type:
+-            continue
+-        if typename and typename != osinfo.typename:
+-            continue
+-        if filtervars and osinfo.name not in filtervars:
+-            continue
+-        if only_supported and not osinfo.supported:
+-            continue
+-        sortmap[key] = osinfo
+-    return _sort(sortmap, **kwargs)
+-
+-
+-def lookup_osdict_key(variant, key, default):
+-    val = _SENTINEL
+-    if variant is not None:
+-        if not hasattr(_allvariants[variant], key):
+-            raise ValueError("Unknown osdict property '%s'" % key)
+-        val = getattr(_allvariants[variant], key)
+-    if val == _SENTINEL:
+-        val = default
+-    return val
+-
+-
+ class _OSVariant(object):
+     """
+     Object tracking guest OS specific configuration bits.
+@@ -123,8 +130,9 @@
+         it is still pretty useful, so we fake it here. New types should
+         not be added often.
+     @parent: Name of a pre-created variant that we want to extend. So
+-        fedoraFOO would have parent fedoraFOO-1. It's used for inheiriting
++        fedoraFOO would have parent fedoraFOO-1. It's used for inheriting
+         values.
++    @typename: The family of the OS, e.g. "linux", "windows", "unix".
+     @sortby: A different key to use for sorting the distro list. By default
+         it's 'name', so this doesn't need to be specified.
+     @urldistro: This is a distro class. It's wired up in urlfetcher to give
+@@ -149,7 +157,7 @@
+     their usage.
+     """
+     def __init__(self, name, label, is_type=False,
+-                 sortby=None, parent=_SENTINEL,
++                 sortby=None, parent=_SENTINEL, typename=_SENTINEL,
+                  urldistro=_SENTINEL, supported=_SENTINEL,
+                  three_stage_install=_SENTINEL,
+                  acpi=_SENTINEL, apic=_SENTINEL, clock=_SENTINEL,
+@@ -184,7 +192,10 @@
+         self.sortby = sortby
+ 
+         self.is_type = bool(is_type)
+-        self.typename = _get_default("typename",
++
++        self.typename = typename
++        if typename == _SENTINEL:
++            self.typename = _get_default("typename",
+                                      self.is_type and self.name or _SENTINEL)
+ 
+         # 'types' should rarely be altered, this check will make
+@@ -219,6 +230,10 @@
+         self.virtioconsole = _get_default("virtioconsole", virtioconsole)
+         self.qemu_ga = _get_default("qemu_ga", qemu_ga)
+ 
++    def get_recommended_resources(self, arch):
++        ignore1 = arch
++        return None
++
+ 
+ def _add_type(*args, **kwargs):
+     kwargs["is_type"] = True
+@@ -231,107 +246,357 @@
+     _allvariants[v.name] = v
+ 
+ 
+-_add_type("linux", "Linux")
+-_add_var("rhel2.1", "Red Hat Enterprise Linux 2.1", urldistro="rhel", parent="linux")
+-_add_var("rhel3", "Red Hat Enterprise Linux 3", parent="rhel2.1")
+-_add_var("rhel4", "Red Hat Enterprise Linux 4", supported=True, parent="rhel3")
+-_add_var("rhel5", "Red Hat Enterprise Linux 5", supported=False, parent="rhel4")
+-_add_var("rhel5.4", "Red Hat Enterprise Linux 5.4 or later", supported=True, virtiodisk=True, virtionet=True, parent="rhel5")
+-_add_var("rhel6", "Red Hat Enterprise Linux 6", inputtype="tablet", inputbus="usb", parent="rhel5.4")
+-_add_var("rhel7", "Red Hat Enterprise Linux 7 (or later)", parent="rhel6", qemu_ga=True, virtioconsole=True, virtiommio=True)
+-
+-_add_var("fedora5", "Fedora Core 5", sortby="fedora05", urldistro="fedora", parent="linux")
+-_add_var("fedora6", "Fedora Core 6", sortby="fedora06", parent="fedora5")
+-_add_var("fedora7", "Fedora 7", sortby="fedora07", parent="fedora6")
+-_add_var("fedora8", "Fedora 8", sortby="fedora08", parent="fedora7")
+-# Apparently F9 has selinux errors when installing with virtio:
+-# https://bugzilla.redhat.com/show_bug.cgi?id=470386
+-_add_var("fedora9", "Fedora 9", sortby="fedora09", virtionet=True, parent="fedora8")
+-_add_var("fedora10", "Fedora 10", virtiodisk=True, parent="fedora9")
+-_add_var("fedora11", "Fedora 11", inputtype="tablet", inputbus="usb", parent="fedora10")
+-_add_var("fedora12", "Fedora 12", parent="fedora11")
+-_add_var("fedora13", "Fedora 13", parent="fedora12")
+-_add_var("fedora14", "Fedora 14", parent="fedora13")
+-_add_var("fedora15", "Fedora 15", parent="fedora14")
+-_add_var("fedora16", "Fedora 16", parent="fedora15")
+-_add_var("fedora17", "Fedora 17", parent="fedora16")
+-_add_var("fedora18", "Fedora 18", supported=True, virtioconsole=True, qemu_ga=True, parent="fedora17")
+-_add_var("fedora19", "Fedora 19", virtiommio=True, parent="fedora18")
+-_add_var("fedora20", "Fedora 20 (or later)", parent="fedora19")
+-
+-_add_var("opensuse11", "openSuse 11", urldistro="suse", supported=True, virtiodisk=True, virtionet=True, parent="linux")
+-_add_var("opensuse12", "openSuse 12 (or later)", parent="opensuse11")
+-
+-_add_var("sles10", "Suse Linux Enterprise Server", urldistro="suse", supported=True, parent="linux")
+-_add_var("sles11", "Suse Linux Enterprise Server 11 (or later)", supported=True, virtiodisk=True, virtionet=True, parent="sles10")
+-
+-_add_var("mandriva2009", "Mandriva Linux 2009 and earlier", urldistro="mandriva", parent="linux")
+-_add_var("mandriva2010", "Mandriva Linux 2010 (or later)", virtiodisk=True, virtionet=True, parent="mandriva2009")
+-
+-_add_var("mes5", "Mandriva Enterprise Server 5.0", urldistro="mandriva", parent="linux")
+-_add_var("mes5.1", "Mandriva Enterprise Server 5.1 (or later)", supported=True, virtiodisk=True, virtionet=True, parent="mes5")
+-_add_var("mbs1", "Mandriva Business Server 1 (or later)", supported=True, virtiodisk=True, virtionet=True, parent="linux")
+-
+-_add_var("mageia1", "Mageia 1 (or later)", urldistro="mandriva", supported=True, virtiodisk=True, virtionet=True, inputtype="tablet", inputbus="usb", parent="linux")
+-
+-_add_var("altlinux", "ALT Linux (or later)", urldistro="altlinux", supported=True, virtiodisk=True, virtionet=True, inputtype="tablet", inputbus="usb", parent="linux")
+-
+-_add_var("debianetch", "Debian Etch", urldistro="debian", sortby="debian4", parent="linux")
+-_add_var("debianlenny", "Debian Lenny", sortby="debian5", supported=True, virtiodisk=True, virtionet=True, parent="debianetch")
+-_add_var("debiansqueeze", "Debian Squeeze", sortby="debian6", virtiodisk=True, virtionet=True, inputtype="tablet", inputbus="usb", parent="debianlenny")
+-_add_var("debianwheezy", "Debian Wheezy (or later)", sortby="debian7", parent="debiansqueeze")
+-
+-_add_var("ubuntuhardy", "Ubuntu 8.04 LTS (Hardy Heron)", urldistro="ubuntu", virtionet=True, parent="linux")
+-_add_var("ubuntuintrepid", "Ubuntu 8.10 (Intrepid Ibex)", parent="ubuntuhardy")
+-_add_var("ubuntujaunty", "Ubuntu 9.04 (Jaunty Jackalope)", virtiodisk=True, parent="ubuntuintrepid")
+-_add_var("ubuntukarmic", "Ubuntu 9.10 (Karmic Koala)", parent="ubuntujaunty")
+-_add_var("ubuntulucid", "Ubuntu 10.04 LTS (Lucid Lynx)", supported=True, parent="ubuntukarmic")
+-_add_var("ubuntumaverick", "Ubuntu 10.10 (Maverick Meerkat)", supported=False, parent="ubuntulucid")
+-_add_var("ubuntunatty", "Ubuntu 11.04 (Natty Narwhal)", parent="ubuntumaverick")
+-_add_var("ubuntuoneiric", "Ubuntu 11.10 (Oneiric Ocelot)", parent="ubuntunatty")
+-_add_var("ubuntuprecise", "Ubuntu 12.04 LTS (Precise Pangolin)", supported=True, parent="ubuntuoneiric")
+-_add_var("ubuntuquantal", "Ubuntu 12.10 (Quantal Quetzal)", parent="ubuntuprecise")
+-_add_var("ubunturaring", "Ubuntu 13.04 (Raring Ringtail)", videomodel="vmvga", parent="ubuntuquantal")
+-_add_var("ubuntusaucy", "Ubuntu 13.10 (Saucy Salamander) (or later)", parent="ubunturaring")
+-
+-_add_var("generic24", "Generic 2.4.x kernel", parent="linux")
+-_add_var("generic26", "Generic 2.6.x kernel", parent="generic24")
+-_add_var("virtio26", "Generic 2.6.25 or later kernel with virtio", sortby="genericvirtio26", virtiodisk=True, virtionet=True, parent="generic26")
++class _OsVariantOsInfo(_OSVariant):
+ 
++    @staticmethod
++    def is_windows(o):
++        return o.get_family() in ['win9x', 'winnt', 'win16']
++
++    def _is_three_stage_install(self):
++        if _OsVariantOsInfo.is_windows(self._os):
++            return True
++        return _SENTINEL
++
++    def _get_clock(self):
++        if _OsVariantOsInfo.is_windows(self._os) or \
++           self._os.get_family() in ['solaris']:
++            return "localtime"
++        return _SENTINEL
++
++    def _is_acpi(self):
++        if self._os.get_family() in ['msdos']:
++            return False
++        return _SENTINEL
++
++    def _is_apic(self):
++        if self._os.get_family() in ['msdos']:
++            return False
++        return _SENTINEL
++
++    def _get_netmodel(self):
++        if self._os.get_distro() == "fedora":
++            return _SENTINEL
++
++        fltr = libosinfo.Filter()
++        fltr.add_constraint("class", "net")
++        devs = self._os.get_all_devices(fltr)
++        if devs.get_length():
++            return devs.get_nth(0).get_name()
++        return _SENTINEL
++
++    def _get_videomodel(self):
++        if self._os.get_short_id() in {"ubuntu13.10", "ubuntu13.04"}:
++            return "vmvga"
++
++        if _OsVariantOsInfo.is_windows(self._os):
++            return "vga"
++
++        if self._os.get_distro() == "fedora":
++            return _SENTINEL
++
++        fltr = libosinfo.Filter()
++        fltr.add_constraint("class", "video")
++        devs = self._os.get_all_devices(fltr)
++        if devs.get_length():
++            return devs.get_nth(0).get_name()
++        return _SENTINEL
++
++    def _get_inputtype(self):
++        fltr = libosinfo.Filter()
++        fltr.add_constraint("class", "input")
++        devs = self._os.get_all_devices(fltr)
++        if devs.get_length():
++            return devs.get_nth(0).get_name()
++        return _SENTINEL
++
++    def get_inputbus(self):
++        fltr = libosinfo.Filter()
++        fltr.add_constraint("class", "input")
++        devs = self._os.get_all_devices(fltr)
++        if devs.get_length():
++            return devs.get_nth(0).get_bus_type()
++        return _SENTINEL
++
++    def _get_diskbus(self):
++        return _SENTINEL
++
++    @staticmethod
++    def is_os_related_to(o, related_os_list):
++        if o.get_short_id() in related_os_list:
++            return True
++        related = o.get_related(libosinfo.ProductRelationship.DERIVES_FROM)
++        clones = o.get_related(libosinfo.ProductRelationship.CLONES)
++        for r in related.get_elements() + clones.get_elements():
++            if r.get_short_id() in related_os_list or \
++               _OsVariantOsInfo.is_os_related_to(r, related_os_list):
++                return True
++
++        return False
++
++    def _get_xen_disable_acpi(self):
++        if _OsVariantOsInfo.is_os_related_to(self._os, ["winxp", "win2k"]):
++            return True
++        return _SENTINEL
++
++    def _is_virtiodisk(self):
++        if self._os.get_distro() == "fedora":
++            if self._os.get_version() == "unknown":
++                return _SENTINEL
++            return int(self._os.get_version() >= 10) or _SENTINEL
++
++        fltr = libosinfo.Filter()
++        fltr.add_constraint("class", "block")
++        devs = self._os.get_all_devices(fltr)
++        for dev in range(devs.get_length()):
++            d = devs.get_nth(dev)
++            if d.get_name() == "virtio-block":
++                return True
++
++        return _SENTINEL
++
++    def _is_virtionet(self):
++        if self._os.get_distro() == "fedora":
++            if self._os.get_version() == "unknown":
++                return _SENTINEL
++            return int(self._os.get_version() >= 9) or _SENTINEL
++
++        fltr = libosinfo.Filter()
++        fltr.add_constraint("class", "net")
++        devs = self._os.get_all_devices(fltr)
++        for dev in range(devs.get_length()):
++            d = devs.get_nth(dev)
++            if d.get_name() == "virtio-net":
++                return True
++        return _SENTINEL
++
++    def _is_virtioconsole(self):
++        if self._os.get_distro() == "fedora":
++            if self._os.get_version() == "unknown":
++                return _SENTINEL
++            return int(self._os.get_version()) >= 18 or _SENTINEL
++
++        fltr = libosinfo.Filter()
++        fltr.add_constraint("class", "console")
++        devs = self._os.get_all_devices(fltr)
++        for dev in range(devs.get_length()):
++            d = devs.get_nth(dev)
++            if d.get_name() == "virtio-console":
++                return True
++        return _SENTINEL
++
++    def _is_virtiommio(self):
++        if _OsVariantOsInfo.is_os_related_to(self._os, ["fedora19"]):
++            return True
++        return _SENTINEL
++
++    def _is_qemu_ga(self):
++        if self._os.get_distro() == "fedora":
++            if self._os.get_version() == "unknown":
++                return _SENTINEL
++            return int(self._os.get_version()) >= 18 or _SENTINEL
++        return _SENTINEL
++
++    def _get_typename(self):
++        if self._os.get_family() in ['linux']:
++            return "linux"
++
++        if self._os.get_family() in ['win9x', 'winnt', 'win16']:
++            return "windows"
++
++        if self._os.get_family() in ['solaris']:
++            return "solaris"
++
++        if self._os.get_family() in ['openbsd', 'freebsd', 'netbsd']:
++            return "unix"
++
++        return "other"
++
++    def _get_sortby(self):
++        version = self._os.get_version()
++        try:
++            t = version.split(".")
++            t = t[:min(4, len(t))] + [0] * (4 - min(4, len(t)))
++            new_version = ""
++            for n in t:
++                new_version = new_version + ("%.4i" % int(n))
++            version = new_version
++        except:
++            pass
++
++        distro = self._os.get_distro()
++        return "%s-%s" % (distro, version)
++
++    def _get_supported(self):
++        d = self._os.get_eol_date_string()
++        if self._os.get_distro() == "msdos":
++            return False
++        return d is None or datetime.strptime(d, "%Y-%m-%d") > datetime.now()
++
++    def _get_urldistro(self):
++        urldistro = self._os.get_distro()
++        remap = {
++            "opensuse" : "suse",
++            "sles" : "suse",
++            "mes" : "mandriva"
++        }
++
++        if remap.get(urldistro):
++            return remap[urldistro]
++
++        return urldistro
++
++    def _get_name(self):
++        return self._os.get_short_id()
++
++    def get_label(self):
++        return self._os.get_name()
++
++    def __init__(self, o):
++        self._os = o
++        name = self._get_name()
++        label = self.get_label()
++        sortby = self._get_sortby()
++        is_type = False
++        typename = self._get_typename()
++        urldistro = self._get_urldistro()
++        supported = self._get_supported()
++        three_stage_install = self._is_three_stage_install()
++        acpi = self._is_acpi()
++        apic = self._is_apic()
++        clock = self._get_clock()
++        xen_disable_acpi = self._get_xen_disable_acpi()
++        virtiommio = self._is_virtiommio()
++        qemu_ga = self._is_qemu_ga()
++        virtioconsole = lambda: self._is_virtioconsole()
++        netmodel = lambda: self._get_netmodel()
++        videomodel = lambda: self._get_videomodel()
++        diskbus = lambda: self._get_diskbus()
++        inputtype = lambda: self._get_inputtype()
++        inputbus = lambda: self.get_inputbus()
++        virtiodisk = lambda: self._is_virtiodisk()
++        virtionet = lambda: self._is_virtionet()
++        _OSVariant.__init__(self, name=name, label=label, is_type=is_type,
++                typename=typename, sortby=sortby, parent="generic",
++                urldistro=urldistro, supported=supported,
++                three_stage_install=three_stage_install, acpi=acpi, apic=apic,
++                clock=clock, netmodel=netmodel, diskbus=diskbus,
++                inputtype=inputtype, inputbus=inputbus, videomodel=videomodel,
++                virtionet=virtionet, virtiodisk=virtiodisk,
++                virtiommio=virtiommio, virtioconsole=virtioconsole,
++                xen_disable_acpi=xen_disable_acpi, qemu_ga=qemu_ga)
++
++    def get_recommended_resources(self, arch):
++        ret = {}
++        def read_resource(resources, arch):
++            for i in range(resources.get_length()):
++                r = resources.get_nth(i)
++                if r.get_architecture() == arch:
++                    ret["ram"] = r.get_ram()
++                    ret["cpu"] = r.get_cpu()
++                    ret["n-cpus"] = r.get_n_cpus()
++                    ret["storage"] = r.get_storage()
++                    break
+ 
+-_add_type("windows", "Windows", clock="localtime", three_stage_install=True, inputtype="tablet", inputbus="usb", videomodel="vga")
+-_add_var("win2k", "Microsoft Windows 2000", sortby="mswin4", xen_disable_acpi=True, parent="windows")
+-_add_var("winxp", "Microsoft Windows XP", sortby="mswin5", supported=True, xen_disable_acpi=True, parent="windows")
+-_add_var("winxp64", "Microsoft Windows XP (x86_64)", supported=True, sortby="mswin564", parent="windows")
+-_add_var("win2k3", "Microsoft Windows Server 2003", supported=True, sortby="mswinserv2003", parent="windows")
+-_add_var("win2k8", "Microsoft Windows Server 2008 (or later)", supported=True, sortby="mswinserv2008", parent="windows")
+-_add_var("vista", "Microsoft Windows Vista", supported=True, sortby="mswin6", parent="windows")
+-_add_var("win7", "Microsoft Windows 7 (or later)", supported=True, sortby="mswin7", parent="windows")
++        read_resource(self._os.get_recommended_resources(), "all")
++        read_resource(self._os.get_recommended_resources(), arch)
+ 
++        return ret
+ 
++_add_type("linux", "Linux")
++_add_type("windows", "Windows", clock="localtime", three_stage_install=True, inputtype="tablet", inputbus="usb", videomodel="vga")
+ _add_type("solaris", "Solaris", clock="localtime")
+-_add_var("solaris9", "Sun Solaris 9", parent="solaris")
+-_add_var("solaris10", "Sun Solaris 10", inputtype="tablet", inputbus="usb", parent="solaris")
+-# https://bugzilla.redhat.com/show_bug.cgi?id=894017 claims tablet doesn't work for solaris 11
+-_add_var("solaris11", "Sun Solaris 11 (or later)", inputtype=None, inputbus=None, parent="solaris")
+-_add_var("opensolaris", "Sun OpenSolaris (or later)", inputtype="tablet", inputbus="usb", parent="solaris")
+-
+ _add_type("unix", "UNIX")
+-# http: //www.nabble.com/Re%3A-Qemu%3A-bridging-on-FreeBSD-7.0-STABLE-p15919603.html
+-_add_var("freebsd6", "FreeBSD 6.x", netmodel="ne2k_pci", parent="unix")
+-_add_var("freebsd7", "FreeBSD 7.x", parent="freebsd6")
+-_add_var("freebsd8", "FreeBSD 8.x", supported=True, netmodel="e1000", parent="freebsd7")
+-_add_var("freebsd9", "FreeBSD 9.x", parent="freebsd8")
+-_add_var("freebsd10", "FreeBSD 10.x (or later)", supported=False, virtiodisk=True, virtionet=True, parent="freebsd9")
+-
+-# http: //calamari.reverse-dns.net: 980/cgi-bin/moin.cgi/OpenbsdOnQemu
+-# https: //www.redhat.com/archives/et-mgmt-tools/2008-June/msg00018.html
+-_add_var("openbsd4", "OpenBSD 4.x (or later)", netmodel="pcnet", parent="unix")
+-
+-
+ _add_type("other", "Other")
+-_add_var("msdos", "MS-DOS", acpi=False, apic=False, parent="other")
+-_add_var("netware4", "Novell Netware 4", parent="other")
+-_add_var("netware5", "Novell Netware 5", parent="other")
+-_add_var("netware6", "Novell Netware 6 (or later)", parent="other")
+ _add_var("generic", "Generic", supported=True, parent="other")
++
++
++_os_data_loaded = False
++_os_loader = None
++
++
++def _get_os_loader():
++    global _os_loader
++    if _os_loader:
++        return _os_loader
++    _os_loader = libosinfo.Loader()
++    _os_loader.process_default_path()
++    return _os_loader
++
++
++def _load_os_data():
++    global _os_data_loaded
++    if _os_data_loaded:
++        return
++    loader = _get_os_loader()
++    db = loader.get_db()
++    oslist = db.get_os_list()
++    for os in range(oslist.get_length()):
++        osi = _OsVariantOsInfo(oslist.get_nth(os))
++        _allvariants[osi.name] = osi
++    _os_data_loaded = True
++
++
++def lookup_os(key):
++    _load_os_data()
++    key = _aliases.get(key) or key
++    ret = _allvariants.get(key)
++    if ret is None:
++        return ret
++    return ret
++
++
++def list_os(list_types=False, typename=None,
++            filtervars=None, only_supported=False,
++            **kwargs):
++    _load_os_data()
++    sortmap = {}
++    filtervars = filtervars or []
++
++    for key, osinfo in _allvariants.items():
++        if list_types and not osinfo.is_type:
++            continue
++        if not list_types and osinfo.is_type:
++            continue
++        if typename and typename != osinfo.typename:
++            continue
++        if filtervars:
++            filtervars = [lookup_os(x).name for x in filtervars]
++            if osinfo.name not in filtervars:
++                continue
++        if only_supported and not osinfo.supported:
++            continue
++        sortmap[key] = osinfo
++    return _sort(sortmap, **kwargs)
++
++
++def lookup_osdict_key(variant, key, default):
++    _load_os_data()
++    val = _SENTINEL
++    if variant is not None:
++        os = lookup_os(variant)
++        if not hasattr(os, key):
++            raise ValueError("Unknown osdict property '%s'" % key)
++        val = getattr(os, key)
++        if isfunction(val):
++            val = val()
++    if val == _SENTINEL:
++        val = default
++    return val
++
++
++def get_recommended_resources(variant, arch):
++    _load_os_data()
++    v = _allvariants.get(variant)
++    if v is None:
++        return None
++
++    return v.get_recommended_resources(arch)
++
++
++def lookup_os_by_media(location):
++    loader = _get_os_loader()
++    media = libosinfo.Media.create_from_location(location, None)
++    ret = loader.get_db().guess_os_from_media(media)
++    if ret and len(ret) > 0 and ret[0]:
++        return ret[0].get_short_id()
++    return None
+diff -urN virt-manager-1.0.1/virtinst/osxml.py virt-manager/virtinst/osxml.py
+--- virt-manager-1.0.1/virtinst/osxml.py	2014-02-17 17:37:52.000000000 +0000
++++ virt-manager/virtinst/osxml.py	2014-06-12 11:22:21.173891895 +0000
+@@ -20,6 +20,11 @@
+ from virtinst.xmlbuilder import XMLBuilder, XMLProperty, XMLChildProperty
+ 
+ 
++class _InitArg(XMLBuilder):
++    _XML_ROOT_NAME = "initarg"
++    val = XMLProperty(".")
++
++
+ class _BootDevice(XMLBuilder):
+     _XML_ROOT_NAME = "boot"
+     dev = XMLProperty("./@dev")
+@@ -72,6 +77,18 @@
+     _bootdevs = XMLChildProperty(_BootDevice)
+     bootorder = property(_get_bootorder, _set_bootorder)
+ 
++    initargs = XMLChildProperty(_InitArg)
++    def add_initarg(self, val):
++        obj = _InitArg(self.conn)
++        obj.val = val
++        self._add_child(obj)
++    def set_initargs_string(self, argstring):
++        import shlex
++        for obj in self.initargs:
++            self._remove_child(obj)
++        for val in shlex.split(argstring):
++            self.add_initarg(val)
++
+     enable_bootmenu = XMLProperty("./bootmenu/@enable", is_yesno=True)
+     useserial = XMLProperty("./bios/@useserial", is_yesno=True)
+ 
+diff -urN virt-manager-1.0.1/virtinst/pollhelpers.py virt-manager/virtinst/pollhelpers.py
+--- virt-manager-1.0.1/virtinst/pollhelpers.py	2014-02-17 17:37:52.000000000 +0000
++++ virt-manager/virtinst/pollhelpers.py	2014-06-12 11:22:21.174891895 +0000
+@@ -19,10 +19,12 @@
+ 
+ import logging
+ 
+-from virtinst import util
+ 
++# Debugging helper to force old style polling
++_force_old_poll = False
+ 
+-def _new_poll_helper(origmap, typename, listfunc, keyfunc, buildfunc):
++
++def _new_poll_helper(origmap, typename, listfunc, buildfunc):
+     """
+     Helper for new style listAll* APIs
+     """
+@@ -36,16 +38,16 @@
+         logging.debug("Unable to list all %ss: %s", typename, e)
+ 
+     for obj in objs:
+-        key = getattr(obj, keyfunc)()
++        connkey = obj.name()
+ 
+-        if key not in origmap:
++        if connkey not in origmap:
+             # Object is brand new this period
+-            current[key] = buildfunc(obj, key)
+-            new[key] = current[key]
++            current[connkey] = buildfunc(obj, connkey)
++            new[connkey] = current[connkey]
+         else:
+             # Previously known object
+-            current[key] = origmap[key]
+-            del origmap[key]
++            current[connkey] = origmap[connkey]
++            del(origmap[connkey])
+ 
+     return (origmap, new, current)
+ 
+@@ -55,7 +57,7 @@
+                      lookup_func, build_func):
+     """
+     Helper routine for old style split API libvirt polling.
+-    @origmap: Pre-existing mapping of objects, with key->obj mapping.
++    @origmap: Pre-existing mapping of objects, with connkey->obj mapping.
+         objects must have an is_active and set_active API
+     @typename: string describing type of objects we are polling for use
+         in debug messages.
+@@ -63,7 +65,7 @@
+     @inactive_list: Function that returns the list of inactive objects
+     @lookup_func: Function to get an object handle for the passed name
+     @build_func: Function that builds a new object class. It is passed
+-        args of (raw libvirt object, key (usually UUID))
++        args of (raw libvirt object, connkey)
+     """
+     current = {}
+     new = {}
+@@ -79,22 +81,26 @@
+     except Exception, e:
+         logging.debug("Unable to list inactive %ss: %s", typename, e)
+ 
+-    def check_obj(key):
+-        if key not in origmap:
+-            try:
+-                obj = lookup_func(key)
+-            except Exception, e:
+-                logging.debug("Could not fetch %s '%s': %s",
+-                              typename, key, e)
+-                return
++    def check_obj(name):
++        obj = None
++        connkey = name
++
++        if connkey not in origmap:
++            if connkey not in origmap:
++                try:
++                    obj = lookup_func(name)
++                except Exception, e:
++                    logging.debug("Could not fetch %s '%s': %s",
++                                  typename, connkey, e)
++                    return
+ 
+             # Object is brand new this period
+-            current[key] = build_func(obj, key)
+-            new[key] = current[key]
++            current[connkey] = build_func(obj, connkey)
++            new[connkey] = current[connkey]
+         else:
+             # Previously known object
+-            current[key] = origmap[key]
+-            del origmap[key]
++            current[connkey] = origmap[connkey]
++            del(origmap[connkey])
+ 
+     for name in newActiveNames + newInactiveNames:
+         try:
+@@ -109,10 +115,9 @@
+     name = "network"
+ 
+     if backend.check_support(
+-            backend.SUPPORT_CONN_LISTALLNETWORKS):
++        backend.SUPPORT_CONN_LISTALLNETWORKS) and not _force_old_poll:
+         return _new_poll_helper(origmap, name,
+-                                backend.listAllNetworks,
+-                                "UUIDString", build_func)
++                                backend.listAllNetworks, build_func)
+     else:
+         active_list = backend.listNetworks
+         inactive_list = backend.listDefinedNetworks
+@@ -127,10 +132,9 @@
+     name = "pool"
+ 
+     if backend.check_support(
+-            backend.SUPPORT_CONN_LISTALLSTORAGEPOOLS):
++        backend.SUPPORT_CONN_LISTALLSTORAGEPOOLS) and not _force_old_poll:
+         return _new_poll_helper(origmap, name,
+-                                backend.listAllStoragePools,
+-                                "UUIDString", build_func)
++                                backend.listAllStoragePools, build_func)
+     else:
+         active_list = backend.listStoragePools
+         inactive_list = backend.listDefinedStoragePools
+@@ -145,10 +149,9 @@
+     name = "volume"
+ 
+     if backend.check_support(
+-        backend.SUPPORT_POOL_LISTALLVOLUMES, pool):
++        backend.SUPPORT_POOL_LISTALLVOLUMES, pool) and not _force_old_poll:
+         return _new_poll_helper(origmap, name,
+-                                pool.listAllVolumes,
+-                                "name", build_func)
++                                pool.listAllVolumes, build_func)
+     else:
+         active_list = pool.listVolumes
+         inactive_list = lambda: []
+@@ -162,10 +165,9 @@
+     name = "interface"
+ 
+     if backend.check_support(
+-            backend.SUPPORT_CONN_LISTALLINTERFACES):
++        backend.SUPPORT_CONN_LISTALLINTERFACES) and not _force_old_poll:
+         return _new_poll_helper(origmap, name,
+-                                backend.listAllInterfaces,
+-                                "name", build_func)
++                                backend.listAllInterfaces, build_func)
+     else:
+         active_list = backend.listInterfaces
+         inactive_list = backend.listDefinedInterfaces
+@@ -179,10 +181,9 @@
+ def fetch_nodedevs(backend, origmap, build_func):
+     name = "nodedev"
+     if backend.check_support(
+-            backend.SUPPORT_CONN_LISTALLDEVICES):
++        backend.SUPPORT_CONN_LISTALLDEVICES) and not _force_old_poll:
+         return _new_poll_helper(origmap, name,
+-                                backend.listAllDevices,
+-                                "name", build_func)
++                                backend.listAllDevices, build_func)
+     else:
+         active_list = lambda: backend.listDevices(None, 0)
+         inactive_list = lambda: []
+@@ -205,8 +206,7 @@
+     new = {}
+ 
+     # Build list of previous vms with proper id/name mappings
+-    for uuid in origmap:
+-        vm = origmap[uuid]
++    for vm in origmap.values():
+         if vm.is_active():
+             oldActiveIDs[vm.get_id()] = vm
+         else:
+@@ -223,20 +223,20 @@
+         logging.exception("Unable to list inactive domains: %s", e)
+ 
+     def add_vm(vm):
+-        uuid = vm.get_uuid()
++        connkey = vm.get_name()
+ 
+-        current[uuid] = vm
+-        del(origmap[uuid])
++        current[connkey] = vm
++        del(origmap[connkey])
+ 
+-    def check_new(rawvm, uuid):
+-        if uuid in origmap:
+-            vm = origmap[uuid]
+-            del(origmap[uuid])
++    def check_new(rawvm, connkey):
++        if connkey in origmap:
++            vm = origmap[connkey]
++            del(origmap[connkey])
+         else:
+-            vm = build_func(rawvm, uuid)
+-            new[uuid] = vm
++            vm = build_func(rawvm, connkey)
++            new[connkey] = vm
+ 
+-        current[uuid] = vm
++        current[connkey] = vm
+ 
+     for _id in newActiveIDs:
+         if _id in oldActiveIDs:
+@@ -247,9 +247,9 @@
+             # Check if domain is brand new, or old one that changed state
+             try:
+                 vm = backend.lookupByID(_id)
+-                uuid = util.uuidstr(vm.UUID())
++                connkey = vm.name()
+ 
+-                check_new(vm, uuid)
++                check_new(vm, connkey)
+             except:
+                 logging.exception("Couldn't fetch domain id '%s'", _id)
+ 
+@@ -263,9 +263,9 @@
+             # Check if domain is brand new, or old one that changed state
+             try:
+                 vm = backend.lookupByName(name)
+-                uuid = util.uuidstr(vm.UUID())
++                connkey = name
+ 
+-                check_new(vm, uuid)
++                check_new(vm, connkey)
+             except:
+                 logging.exception("Couldn't fetch domain '%s'", name)
+ 
+@@ -275,9 +275,8 @@
+ def fetch_vms(backend, origmap, build_func):
+     name = "domain"
+     if backend.check_support(
+-            backend.SUPPORT_CONN_LISTALLDOMAINS):
++        backend.SUPPORT_CONN_LISTALLDOMAINS):
+         return _new_poll_helper(origmap, name,
+-                                backend.listAllDomains,
+-                                "UUIDString", build_func)
++                                backend.listAllDomains, build_func)
+     else:
+         return _old_fetch_vms(backend, origmap, build_func)
+diff -urN virt-manager-1.0.1/virtinst/storage.py virt-manager/virtinst/storage.py
+--- virt-manager-1.0.1/virtinst/storage.py	2014-02-17 17:37:52.000000000 +0000
++++ virt-manager/virtinst/storage.py	2014-06-12 11:22:21.174891895 +0000
+@@ -213,7 +213,7 @@
+ 
+ 
+     @staticmethod
+-    def get_default_path(conn):
++    def get_default_path(conn, build=True):
+         """
+         Return the default storage path. If there's a 'default' pool,
+         report that. If there's no default pool, return the path we would
+@@ -230,7 +230,9 @@
+         except:
+             pass
+ 
+-        return StoragePool.build_default_pool(conn).target_path
++        if build:
++            return StoragePool.build_default_pool(conn).target_path
++        return _get_default_pool_path(conn)
+ 
+ 
+     @staticmethod
+diff -urN virt-manager-1.0.1/virtinst/support.py virt-manager/virtinst/support.py
+--- virt-manager-1.0.1/virtinst/support.py	2014-03-20 18:04:29.000000000 +0000
++++ virt-manager/virtinst/support.py	2014-06-12 11:22:21.174891895 +0000
+@@ -293,6 +293,7 @@
+ SUPPORT_CONN_POOL_GLUSTERFS = _make(version="1.2.0")
+ SUPPORT_CONN_CPU_MODEL_NAMES = _make(function="virConnect.getCPUModelNames",
+                                      run_args=("x86_64", 0))
++SUPPORT_CONN_BARE_BACKINGSTORE = _make(version="1.2.4")
+ 
+ 
+ # Domain checks
+diff -urN virt-manager-1.0.1/virtinst/urlfetcher.py virt-manager/virtinst/urlfetcher.py
+--- virt-manager-1.0.1/virtinst/urlfetcher.py	2014-03-06 17:52:00.000000000 +0000
++++ virt-manager/virtinst/urlfetcher.py	2014-06-12 11:22:21.175891895 +0000
+@@ -151,9 +151,16 @@
+         self.ftp = None
+ 
+     def prepareLocation(self):
+-        url = urlparse.urlparse(self._make_path(""))
+-        self.ftp = ftplib.FTP(url[1])
+-        self.ftp.login()
++        try:
++            url = urlparse.urlparse(self._make_path(""))
++            if not url[1]:
++                raise ValueError(_("Invalid install location"))
++            self.ftp = ftplib.FTP(url[1])
++            self.ftp.login()
++        except Exception, e:
++            raise ValueError(_("Opening URL %s failed: %s.") %
++                              (self.location, str(e)))
++
+ 
+     def hasFile(self, filename):
+         path = self._make_path(filename)
+@@ -658,7 +665,7 @@
+         """
+         ret = None
+         for osinfo in osdict.list_os(typename="linux"):
+-            if osinfo.name.startswith("fedora"):
++            if osinfo.name.startswith("fedora") and "unknown" not in osinfo.name:
+                 # First fedora* occurence should be the newest
+                 ret = osinfo.name
+                 break
+diff -urN virt-manager-1.0.1/virtinst/util.py virt-manager/virtinst/util.py
+--- virt-manager-1.0.1/virtinst/util.py	2014-02-28 18:01:32.000000000 +0000
++++ virt-manager/virtinst/util.py	2014-06-12 11:22:21.175891895 +0000
+@@ -434,20 +434,6 @@
+     return getattr(libvirt, key)
+ 
+ 
+-def uuidstr(rawuuid):
+-    hx = ['0', '1', '2', '3', '4', '5', '6', '7',
+-          '8', '9', 'a', 'b', 'c', 'd', 'e', 'f']
+-    uuid = []
+-    for i in range(16):
+-        uuid.append(hx[((ord(rawuuid[i]) >> 4) & 0xf)])
+-        uuid.append(hx[(ord(rawuuid[i]) & 0xf)])
+-        if i == 3 or i == 5 or i == 7 or i == 9:
+-            uuid.append('-')
+-    return "".join(uuid)
+-
+-
+-
+-
+ def get_system_scratchdir(hvtype):
+     if "VIRTINST_TEST_SUITE" in os.environ:
+         return os.getcwd()
+@@ -495,7 +481,7 @@
+     ret = ""
+     try:
+         # We don't want to depend on glib for virt-install
+-        from gi.repository import GLib  # pylint: disable=E0611
++        from gi.repository import GLib
+         ret = GLib.get_user_cache_dir()
+     except ImportError:
+         pass
+diff -urN virt-manager-1.0.1/virtinst/virtimage.py virt-manager/virtinst/virtimage.py
+--- virt-manager-1.0.1/virtinst/virtimage.py	2014-03-22 12:36:51.000000000 +0000
++++ virt-manager/virtinst/virtimage.py	2014-06-12 11:22:21.175891895 +0000
+@@ -53,7 +53,7 @@
+         self.descr = None
+         self.version = None
+         self.release = None
+-        if not node is None:
++        if node is not None:
+             self.parseXML(node)
+ 
+     def abspath(self, p):
+@@ -97,7 +97,7 @@
+         self.memory = None
+         self.interface = 0
+         self.graphics = None
+-        if not node is None:
++        if node is not None:
+             self.parseXML(node)
+ 
+     def parseXML(self, node):
+@@ -151,7 +151,7 @@
+         self.drives = []
+         self.arch = None
+         self.features = ImageFeatures()
+-        if not node is None:
++        if node is not None:
+             self.parseXML(node)
+ 
+     def parseXML(self, node):
+@@ -221,7 +221,7 @@
+         self.size = None
+         self.use = None
+         self.csum = {}
+-        if not node is None:
++        if node is not None:
+             self.parseXML(node)
+ 
+     def parseXML(self, node):
+@@ -260,7 +260,7 @@
+         if hashlib:
+             if "sha256" in self.csum:
+                 csumvalue = self.csum["sha256"]
+-                m = hashlib.sha256()  # pylint: disable=E1101
++                m = hashlib.sha256()
+ 
+             elif "sha1" in self.csum:
+                 csumvalue = self.csum["sha1"]
+diff -urN virt-manager-1.0.1/virtinst/xmlbuilder.py virt-manager/virtinst/xmlbuilder.py
+--- virt-manager-1.0.1/virtinst/xmlbuilder.py	2014-03-06 17:52:00.000000000 +0000
++++ virt-manager/virtinst/xmlbuilder.py	2014-06-12 11:22:21.176891895 +0000
+@@ -29,7 +29,7 @@
+ from virtinst import util
+ 
+ 
+-# pylint: disable=W0212
++# pylint: disable=protected-access
+ # This whole file is calling around into non-public functions that we
+ # don't want regular API users to touch
+ 
+diff -urN virt-manager-1.0.1/virt-install virt-manager/virt-install
+--- virt-manager-1.0.1/virt-install	2014-03-22 16:27:02.000000000 +0000
++++ virt-manager/virt-install	2014-06-12 11:22:21.151891895 +0000
+@@ -36,9 +36,6 @@
+ ##############################
+ 
+ install_methods = "--location URL, --cdrom CD/ISO, --pxe, --import, --boot hd|cdrom|..."
+-install_missing = (_("An install method must be specified\n(%(methods)s)") %
+-                   {"methods" : install_methods})
+-disk_missing = _("--disk storage must be specified (override with --nodisks)")
+ 
+ 
+ def install_specified(location, cdpath, pxe, import_install):
+@@ -263,13 +260,17 @@
+         not storage_specified(options.disk,
+                               options.nodisks,
+                               options.filesystem)):
+-        msg += "\n" + disk_missing
++        msg += "\n" + (
++            _("--disk storage must be specified (override with --nodisks)"))
+ 
+     if (not guest.os.is_container() and
<Skipped 4716 lines>
================================================================

---- gitweb:

http://git.pld-linux.org/gitweb.cgi/packages/virt-manager.git/commitdiff/022a737ceaae815175badc04c6278961257a5998




More information about the pld-cvs-commit mailing list