From 9490c85da50cf1f8cf8fcd40b87d74ed72c9283d Mon Sep 17 00:00:00 2001 From: Fabio Erculiani Date: Fri, 2 Jul 2010 15:04:44 +0200 Subject: [PATCH] [entropy.spm.plugins] PortagePlugin: fix _create_contents_file_if_not_available Fix the following issues: - incorrect symlinks handling when link pointed to file - incorrect symlinks handling when link pointed to directory - incorrect symlinks handling when link pointed to broken path --- .../plugins/interfaces/portage_plugin/__init__.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/libraries/entropy/spm/plugins/interfaces/portage_plugin/__init__.py b/libraries/entropy/spm/plugins/interfaces/portage_plugin/__init__.py index eab2f82ff..82654798e 100644 --- a/libraries/entropy/spm/plugins/interfaces/portage_plugin/__init__.py +++ b/libraries/entropy/spm/plugins/interfaces/portage_plugin/__init__.py @@ -18,6 +18,7 @@ import stat import tempfile import subprocess import tarfile +import time from entropy.const import etpConst, etpUi, const_get_stringtype, \ const_convert_to_unicode, const_convert_to_rawstring, const_setup_perms @@ -2499,14 +2500,19 @@ class PortagePlugin(SpmPlugin): ) continue - if os.path.isfile(path): + is_sym = os.path.islink(path) + if os.path.isfile(path) and not is_sym: md5sum = entropy.tools.md5sum(path) mtime = int(os.path.getmtime(path)) content_meta[path] = (obj_t, mtime, md5sum,) - elif os.path.isdir(path): + elif os.path.isdir(path) and not is_sym: content_meta[path] = (dir_t,) - elif os.path.islink(path): - mtime = int(os.path.getmtime(path)) + elif is_sym: + try: + mtime = int(os.path.getmtime(path)) + except OSError: + # broken symlink! + mtime = int(time.time()) content_meta[path] = (sym_t, mtime, os.readlink(path),) else: try: