Validate desktop entries after src_install.
authorMichael Palimaka <kensington@gentoo.org>
Tue, 31 Jul 2012 10:18:01 +0000 (03:18 -0700)
committerZac Medico <zmedico@gentoo.org>
Tue, 31 Jul 2012 10:18:01 +0000 (03:18 -0700)
pym/portage/package/ebuild/doebuild.py

index 09062f9f30bdb340129fc4fb529e70e23473a563..dfdfedcbddee5e5537f0a551c2db1b405b8ee1a6 100644 (file)
@@ -28,6 +28,7 @@ portage.proxy.lazyimport.lazyimport(globals(),
        'portage.package.ebuild._ipc.QueryCommand:QueryCommand',
        'portage.dep._slot_abi:evaluate_slot_abi_equal_deps',
        'portage.package.ebuild._spawn_nofetch:spawn_nofetch',
+       'portage.util._desktop_entry:validate_desktop_entry',
        'portage.util.ExtractKernelVersion:ExtractKernelVersion'
 )
 
@@ -1746,6 +1747,7 @@ def _post_src_install_uid_fix(mysettings, out):
 
        destdir = mysettings["D"]
        ed_len = len(mysettings["ED"])
+       desktopfile_errors = []
        unicode_errors = []
 
        while True:
@@ -1794,6 +1796,11 @@ def _post_src_install_uid_fix(mysettings, out):
                                else:
                                        fpath = os.path.join(parent, fname)
 
+                               if fname.endswith(".desktop") and os.path.isfile(fpath):
+                                       desktop_validate = validate_desktop_entry(fpath)
+                                       if desktop_validate:
+                                               desktopfile_errors.extend(desktop_validate)
+
                                if fixlafiles and \
                                        fname.endswith(".la") and os.path.isfile(fpath):
                                        f = open(_unicode_encode(fpath,
@@ -1860,6 +1867,11 @@ def _post_src_install_uid_fix(mysettings, out):
                if not unicode_error:
                        break
 
+       if desktopfile_errors:
+               for l in _merge_desktopfile_error(desktopfile_errors):
+                       l = l.replace(mysettings["ED"], '/')
+                       eqawarn(l, phase='install', key=mysettings.mycpv, out=out)
+
        if unicode_errors:
                for l in _merge_unicode_error(unicode_errors):
                        eqawarn(l, phase='install', key=mysettings.mycpv, out=out)
@@ -2022,6 +2034,20 @@ def _post_src_install_soname_symlinks(mysettings, out):
        for line in qa_msg:
                eqawarn(line, key=mysettings.mycpv, out=out)
 
+def _merge_desktopfile_error(errors):
+       lines = []
+
+       msg = _("QA Notice: This package installs one or more .desktop files "
+               "that do not pass validation.")
+       lines.extend(wrap(msg, 72))
+
+       lines.append("")
+       errors.sort()
+       lines.extend("\t" + x for x in errors)
+       lines.append("")
+
+       return lines
+
 def _merge_unicode_error(errors):
        lines = []