Handle a potential OSError that occurs if the scanelf binary is missing
authorZac Medico <zmedico@gentoo.org>
Fri, 7 Nov 2008 21:52:48 +0000 (21:52 -0000)
committerZac Medico <zmedico@gentoo.org>
Fri, 7 Nov 2008 21:52:48 +0000 (21:52 -0000)
when LinkageMap.rebuild() is called.

svn path=/main/trunk/; revision=11825

pym/portage/dbapi/vartree.py

index cce5b69f093001e58e0c1050c9dd719dacfb229d..5d6e8f57804307b72b9187f8f6b9a741892bbe84 100644 (file)
@@ -278,20 +278,26 @@ class LinkageMap(object):
                        for items in self._dbapi.plib_registry.getPreservedLibs().values():
                                args.extend(os.path.join(root, x.lstrip("." + os.sep)) \
                                        for x in items)
-                       proc = subprocess.Popen(args, stdout=subprocess.PIPE)
-                       for l in proc.stdout:
-                               l = l[3:].rstrip("\n")
-                               if not l:
-                                       continue
-                               fields = l.split(";")
-                               if len(fields) < 5:
-                                       writemsg_level("\nWrong number of fields " + \
-                                               "returned from scanelf: %s\n\n" % (l,),
-                                               level=logging.ERROR, noiselevel=-1)
-                                       continue
-                               fields[1] = fields[1][root_len:]
-                               lines.append(";".join(fields))
-                       proc.wait()
+                       try:
+                               proc = subprocess.Popen(args, stdout=subprocess.PIPE)
+                       except EnvironmentError, e:
+                               writemsg_level("\nUnable to execute %s: %s\n\n" % (args[0], e),
+                                       level=logging.ERROR, noiselevel=-1)
+                               del e
+                       else:
+                               for l in proc.stdout:
+                                       l = l[3:].rstrip("\n")
+                                       if not l:
+                                               continue
+                                       fields = l.split(";")
+                                       if len(fields) < 5:
+                                               writemsg_level("\nWrong number of fields " + \
+                                                       "returned from scanelf: %s\n\n" % (l,),
+                                                       level=logging.ERROR, noiselevel=-1)
+                                               continue
+                                       fields[1] = fields[1][root_len:]
+                                       lines.append(";".join(fields))
+                               proc.wait()
 
                for l in lines:
                        l = l.rstrip("\n")