---
 yum/__init__.py |    4 ++++
 yum/packages.py |   34 +++++++++++++++++++++++++++++++++-
 2 files changed, 37 insertions(+), 1 deletions(-)

diff --git a/yum/__init__.py b/yum/__init__.py
index 58e4367..29e0284 100644
--- a/yum/__init__.py
+++ b/yum/__init__.py
@@ -1524,6 +1524,9 @@ class YumBase(depsolve.Depsolve):
                         po.yumdb_info.from_repo_timestamp = lp_mtime
                     except: pass
 
+                if rpo.xattr_origin_url is not None:
+                    po.yumdb_info.origin_url = rpo.xattr_origin_url
+
                 if not hasattr(rpo.repo, 'repoXML'):
                     continue
 
@@ -2090,6 +2093,7 @@ class YumBase(depsolve.Depsolve):
             if local:
                 filelist.extend([txmbr.po.localHdr()])
             else:
+                txmbr.po.xattr_origin_url # Load this, before we rm the file.
                 filelist.extend([txmbr.po.localPkg(), txmbr.po.localHdr()])
 
         # now remove them
diff --git a/yum/packages.py b/yum/packages.py
index 093d3c8..6f61fea 100644
--- a/yum/packages.py
+++ b/yum/packages.py
@@ -41,6 +41,13 @@ import urlparse
 urlparse.uses_fragment.append("media")
 from urlgrabber.grabber import URLGrabber, URLGrabError
 
+try:
+    import xattr
+    if not hasattr(xattr, 'get'):
+        xattr = None # This is a "newer" API.
+except ImportError:
+    xattr = None
+
 # For verify
 import pwd
 import grp
@@ -879,7 +886,32 @@ class YumAvailablePackage(PackageObject, RpmBase):
         self._verify_local_pkg_cache = nst
 
         return True
-        
+
+    # See: http://www.freedesktop.org/wiki/CommonExtendedAttributes
+    def _localXattrUrl(self):
+        """ Get the user.xdg.origin.url value from the local pkg. ... if it's
+            present. We cache this so we can access it after the file has been
+            deleted (keepcache=False). """
+
+        if xattr is None:
+            return None
+
+        if hasattr(self, '__cached_localXattrUrl'):
+            return getattr(self, '__cached_localXattrUrl')
+
+        if not self.verifyLocalPkg():
+            return None
+
+        try:
+            ret = xattr.get(self.localPkg(), 'user.xdg.origin.url')
+        except: # Documented to be "EnvironmentError", but make sure
+            return None
+
+        setattr(self, '__cached_localXattrUrl', ret)
+        return ret
+
+    xattr_origin_url = property(lambda x: x._localXattrUrl())
+
     def prcoPrintable(self, prcoTuple):
         """convert the prco tuples into a nicer human string"""
         warnings.warn('prcoPrintable() will go away in a future version of 
Yum.\n',
-- 
1.7.2.3

_______________________________________________
Yum-devel mailing list
[email protected]
http://lists.baseurl.org/mailman/listinfo/yum-devel

Reply via email to