aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Palimaka <kensington@gentoo.org>2012-09-12 03:22:05 +1000
committerZac Medico <zmedico@gentoo.org>2012-09-11 10:46:57 -0700
commit9f735963c000f0e925b513c5378b2552476c0e8e (patch)
tree341feefb6961ae64ef2e5582c2b0b291459f0372
parentrepoman: fix Unicode unequal comparison warning (diff)
downloadportage-9f735963c000f0e925b513c5378b2552476c0e8e.tar.gz
portage-9f735963c000f0e925b513c5378b2552476c0e8e.tar.bz2
portage-9f735963c000f0e925b513c5378b2552476c0e8e.zip
Only validate .desktop files that are installed into XDG-compliant locations.
This replaces the existing error blacklist, and therefore removes the repoman check.
-rwxr-xr-xbin/repoman24
-rw-r--r--pym/portage/package/ebuild/doebuild.py7
-rw-r--r--pym/portage/util/_desktop_entry.py57
3 files changed, 9 insertions, 79 deletions
diff --git a/bin/repoman b/bin/repoman
index 53d138c8d..bc2ac9be6 100755
--- a/bin/repoman
+++ b/bin/repoman
@@ -78,7 +78,6 @@ from portage.output import bold, create_color_func, \
green, nocolor, red
from portage.output import ConsoleStyleFile, StyleWriter
from portage.util import writemsg_level
-from portage.util._desktop_entry import validate_desktop_entry
from portage.package.ebuild.digestgen import digestgen
from portage.eapi import eapi_has_iuse_defaults, eapi_has_required_use
@@ -303,7 +302,6 @@ def ParseArgs(argv, qahelp):
qahelp={
"CVS/Entries.IO_error":"Attempting to commit, and an IO error was encountered access the Entries file",
- "desktop.invalid":"desktop-file-validate reports errors in a *.desktop file",
"ebuild.invalidname":"Ebuild files with a non-parseable or syntactically incorrect name (or using 2.1 versioning extensions)",
"ebuild.namenomatch":"Ebuild files that do not have the same name as their parent directory",
"changelog.ebuildadded":"An ebuild was added but the ChangeLog was not modified",
@@ -406,7 +404,6 @@ qawarnings = set((
"digest.unused",
"ebuild.notadded",
"ebuild.nesteddie",
-"desktop.invalid",
"DEPEND.badmasked","RDEPEND.badmasked","PDEPEND.badmasked",
"DEPEND.badindev","RDEPEND.badindev","PDEPEND.badindev",
"DEPEND.badmaskedindev","RDEPEND.badmaskedindev","PDEPEND.badmaskedindev",
@@ -1054,10 +1051,6 @@ dev_keywords = dev_keywords(profiles)
stats={}
fails={}
-# provided by the desktop-file-utils package
-desktop_file_validate = find_binary("desktop-file-validate")
-desktop_pattern = re.compile(r'.*\.desktop$')
-
for x in qacats:
stats[x]=0
fails[x]=[]
@@ -1630,23 +1623,6 @@ for x in effective_scanlist:
stats["file.name"] += 1
fails["file.name"].append("%s/files/%s: char '%s'" % \
(checkdir, y, m.group(0)))
-
- if desktop_file_validate and desktop_pattern.match(y):
- cmd_output = validate_desktop_entry(full_path)
- if cmd_output:
- # Note: in the future we may want to grab the
- # warnings in addition to the errors. We're
- # just doing errors now since we don't want
- # to generate too much noise at first.
- error_re = re.compile(r'.*\s*error:\s*(.*)')
- for line in cmd_output:
- error_match = error_re.match(line)
- if error_match is None:
- continue
- stats["desktop.invalid"] += 1
- fails["desktop.invalid"].append(
- relative_path + ': %s' % error_match.group(1))
-
del mydigests
if check_changelog and "ChangeLog" not in checkdirlist:
diff --git a/pym/portage/package/ebuild/doebuild.py b/pym/portage/package/ebuild/doebuild.py
index 471a5daeb..a6426eed5 100644
--- a/pym/portage/package/ebuild/doebuild.py
+++ b/pym/portage/package/ebuild/doebuild.py
@@ -1773,6 +1773,9 @@ def _post_src_install_uid_fix(mysettings, out):
unicode_errors = []
desktop_file_validate = \
portage.process.find_binary("desktop-file-validate") is not None
+ xdg_dirs = mysettings.get('XDG_DATA_DIRS', '/usr/share').split(':')
+ xdg_dirs = tuple(os.path.join(i, "applications") + os.sep
+ for i in xdg_dirs if i)
while True:
@@ -1821,7 +1824,9 @@ def _post_src_install_uid_fix(mysettings, out):
fpath = os.path.join(parent, fname)
if desktop_file_validate and fname.endswith(".desktop") and \
- os.path.isfile(fpath):
+ os.path.isfile(fpath) and \
+ fpath[ed_len - 1:].startswith(xdg_dirs):
+
desktop_validate = validate_desktop_entry(fpath)
if desktop_validate:
desktopfile_errors.extend(desktop_validate)
diff --git a/pym/portage/util/_desktop_entry.py b/pym/portage/util/_desktop_entry.py
index aa730ded3..2973d12ff 100644
--- a/pym/portage/util/_desktop_entry.py
+++ b/pym/portage/util/_desktop_entry.py
@@ -42,20 +42,6 @@ def parse_desktop_entry(path):
return parser
_trivial_warnings = re.compile(r' looks redundant with value ')
-_ignore_kde_key_re = re.compile(r'^\s*(configurationType\s*=|Type\s*=\s*Service)')
-_ignore_kde_types = frozenset(
- ["AkonadiAgent", "AkonadiResource", "Service", "ServiceType", "XSession"])
-
-# kdebase-data installs files with [Currency Code] sections
-# in /usr/share/locale/currency
-# kdepim-runtime installs files with [Plugin] and [Wizard]
-# sections in /usr/share/apps/akonadi/{plugins,accountwizard}
-# kdm installs files with [KCM Locale], [KDE Desktop Pattern],
-# [KdmGreeterTheme] and [Wallpaper] sections in various directories
-# libkdegames installs files with [KDE Backdeck] sections in
-# /usr/share/apps/carddecks/
-# Various KDE games install files with [KGameTheme] sections
-_ignore_kde_sections = ("Currency Code", "KCM Locale", "KDE Backdeck", "KDE Desktop Pattern", "KDE Desktop Program", "KdmGreeterTheme", "KGameTheme", "Plugin", "Wallpaper", "Wizard")
_ignored_errors = (
# Ignore error for emacs.desktop:
@@ -74,48 +60,11 @@ def validate_desktop_entry(path):
proc.wait()
if output_lines:
- # Ignore kde extensions for bug #414125 and bug #432862.
- try:
- desktop_entry = parse_desktop_entry(path)
- except ConfigParserError:
- with io.open(_unicode_encode(path,
- encoding=_encodings['fs'], errors='strict'),
- mode='r', encoding=_encodings['repo.content'],
- errors='replace') as f:
- for line in f:
- if _ignore_kde_key_re.match(line):
- # Ignore kde extensions for bug #432862.
- del output_lines[:]
- break
- else:
- if desktop_entry.has_section("Desktop Entry"):
- try:
- entry_type = desktop_entry.get("Desktop Entry", "Type")
- except ConfigParserError:
- pass
- else:
- if entry_type in _ignore_kde_types:
- del output_lines[:]
- try:
- desktop_entry.get("Desktop Entry", "Hidden")
- except ConfigParserError:
- pass
- else:
- # The "Hidden" key appears to be unique to special kde
- # service files (which don't validate well), installed
- # in /usr/share/kde4/services/ by packages like
- # nepomuk-core and kurifilter-plugins.
- del output_lines[:]
- for section in _ignore_kde_sections:
- if desktop_entry.has_section(section):
- del output_lines[:]
-
- if output_lines:
filtered_output = []
for line in output_lines:
- if line[len(path)+2:] in _ignored_errors:
- continue
- filtered_output.append(line)
+ if line[len(path)+2:] in _ignored_errors:
+ continue
+ filtered_output.append(line)
output_lines = filtered_output
if output_lines: