For bug #33585, leave the old info dir file in place if there is nothing to generate...
authorZac Medico <zmedico@gentoo.org>
Sun, 12 Aug 2007 15:13:28 +0000 (15:13 -0000)
committerZac Medico <zmedico@gentoo.org>
Sun, 12 Aug 2007 15:13:28 +0000 (15:13 -0000)
svn path=/main/branches/2.1.2/; revision=7594

bin/emerge

index 3272172ca4afe0202b3c59922dffdae7734ebdfa..805e86e0e4373102a4940b970d986a26fca92862 100755 (executable)
@@ -4283,28 +4283,43 @@ def chk_updated_info_files(root, infodirs, prev_mtimes, retval):
                else:
                        portage.writemsg_stdout(" "+green("*")+" Regenerating GNU info directory index...\n")
 
+                       dir_extensions = ("", ".gz", ".bz2")
                        icount=0
                        badcount=0
                        for inforoot in regen_infodirs:
                                if inforoot=='':
                                        continue
-                               for filename in ("dir", "dir.gz", "dir.bz2"):
-                                       file_path = os.path.join(inforoot, filename)
-                                       try:
-                                               os.rename(file_path, file_path + ".old")
-                                       except OSError, e:
-                                               if e.errno != errno.ENOENT:
-                                                       raise
-                                               del e
 
                                if not os.path.isdir(inforoot):
                                        continue
                                errmsg = ""
                                file_list = os.listdir(inforoot)
                                file_list.sort()
+                               dir_file = os.path.join(inforoot, "dir")
+                               moved_old_dir = False
+                               processed_count = 0
                                for x in file_list:
-                                       if (x[0] == ".") or (x in ["dir","dir.old"]) or (os.path.isdir(inforoot+"/"+x)):
+                                       if x.startswith(".") or \
+                                               os.path.isdir(os.path.join(inforoot, x)):
                                                continue
+                                       if x.startswith("dir"):
+                                               skip = False
+                                               for ext in dir_extensions:
+                                                       if x == "dir" + ext:
+                                                               skip = True
+                                                               break
+                                               if skip:
+                                                       continue
+                                       if processed_count == 0:
+                                               for ext in dir_extensions:
+                                                       try:
+                                                               os.rename(dir_file + ext, dir_file + ext + ".old")
+                                                               moved_old_dir = True
+                                                       except EnvironmentError, e:
+                                                               if e.errno != errno.ENOENT:
+                                                                       raise
+                                                               del e
+                                       processed_count += 1
                                        myso=commands.getstatusoutput("LANG=C LANGUAGE=C /usr/bin/install-info --dir-file="+inforoot+"/dir "+inforoot+"/"+x)[1]
                                        existsstr="already exists, for file `"
                                        if myso!="":
@@ -4321,6 +4336,17 @@ def chk_updated_info_files(root, infodirs, prev_mtimes, retval):
                                                        errmsg += myso + "\n"
                                        icount=icount+1
 
+                               if moved_old_dir and not os.path.exists(dir_file):
+                                       # We didn't generate a new dir file, so put the old file
+                                       # back where it was originally found.
+                                       for ext in dir_extensions:
+                                               try:
+                                                       os.rename(dir_file + ext + ".old", dir_file + ext)
+                                               except EnvironmentError, e:
+                                                       if e.errno != errno.ENOENT:
+                                                               raise
+                                                       del e
+
                                #update mtime so we can potentially avoid regenerating.
                                prev_mtimes[inforoot] = long(os.stat(inforoot).st_mtime)