CONTENTS: handle malformed sym entries
authorZac Medico <zmedico@gentoo.org>
Sun, 16 Jan 2011 12:32:23 +0000 (04:32 -0800)
committerZac Medico <zmedico@gentoo.org>
Sun, 16 Jan 2011 12:32:23 +0000 (04:32 -0800)
This will fix bug #351814.

pym/portage/dbapi/vartree.py

index 9f75da21b61fcd3dbe4c69645d413d5925660cd2..7a1ef5929f65488bc4cdd9cf4bdb93649adec791 100644 (file)
@@ -1196,7 +1196,8 @@ class dblink(object):
        _contents_re = re.compile(r'^(' + \
                r'(?P<dir>(dev|dir|fif) (.+))|' + \
                r'(?P<obj>(obj) (.+) (\S+) (\d+))|' + \
-               r'(?P<sym>(sym) (.+) -> (.+) (\d+))' + \
+               r'(?P<sym>(sym) (.+) -> (.+) ((\d+)|(?P<oldsym>(' + \
+               '\(\d+, \d+L, \d+L, \d+, \d+, \d+, \d+L, \d+, (\d+), \d+\)))))' + \
                r')$'
        )
 
@@ -1379,6 +1380,9 @@ class dblink(object):
                obj_index = contents_re.groupindex['obj']
                dir_index = contents_re.groupindex['dir']
                sym_index = contents_re.groupindex['sym']
+               # The old symlink format may exist on systems that have packages
+               # which were installed many years ago (see bug #351814).
+               oldsym_index = contents_re.groupindex['oldsym']
                # CONTENTS files already contain EPREFIX
                myroot = self.settings['ROOT']
                if myroot == os.path.sep:
@@ -1406,8 +1410,12 @@ class dblink(object):
                                data = (m.group(base+1),)
                        elif m.group(sym_index) is not None:
                                base = sym_index
+                               if m.group(oldsym_index) is None:
+                                       mtime = m.group(base+5)
+                               else:
+                                       mtime = m.group(base+8)
                                #format: type, mtime, dest
-                               data = (m.group(base+1), m.group(base+4), m.group(base+3))
+                               data = (m.group(base+1), mtime, m.group(base+3))
                        else:
                                # This won't happen as long the regular expression
                                # is written to only match valid entries.