Compare new digest data with old digest data and rewrite the new digest only if they...
authorZac Medico <zmedico@gentoo.org>
Sun, 19 Mar 2006 04:48:02 +0000 (04:48 -0000)
committerZac Medico <zmedico@gentoo.org>
Sun, 19 Mar 2006 04:48:02 +0000 (04:48 -0000)
svn path=/main/trunk/; revision=2951

pym/portage.py

index c67a23981722464a5b9d20d6a750d930bf95c08c..6a84c925a0ddf67b1b042949396548647415cd7c 100644 (file)
@@ -2115,24 +2115,22 @@ def digestgen(myarchives,mysettings,overwrite=1,manifestonly=0):
                if mydigests==None: # There was a problem, exit with an errorcode.
                        return 0
 
-               try:
-                       outfile=open(digestfn, "w+")
-               except SystemExit, e:
-                       raise
-               except Exception, e:
-                       print "!!! Filesystem error skipping generation. (Read-Only?)"
-                       print "!!!",e
-                       return 0
-               for x in digestCreateLines(myarchives, mydigests):
-                       outfile.write(x+"\n")
-               outfile.close()
-               try:
-                       os.chown(digestfn,os.getuid(),portage_gid)
-                       os.chmod(digestfn,0664)
-               except SystemExit, e:
-                       raise
-               except Exception,e:
-                       print e
+               if mydigests != myolddigest:
+                       digest_lines = digestCreateLines(myarchives, mydigests)
+                       digest_success = True
+                       try:
+                               write_atomic(digestfn, "\n".join(digest_lines) + "\n")
+                               digest_success = apply_secpass_permissions(
+                                       digestfn, gid=portage_gid, mode=0664)
+                       except (IOError, OSError), e:
+                               writemsg("!!! %s\n" % str(e))
+                               digest_success = False
+                       except portage_exception.PortageException:
+                               writemsg("!!! %s\n" % str(e))
+                               digest_success = False
+                       if not digest_success:
+                               writemsg("!!! Filesystem error, skipping generation.\n")
+                               return 0
 
        print green(">>> Generating the manifest file...")
        mypfiles=listdir(pbasedir,recursive=1,filesonly=1,ignorecvs=1,EmptyOnError=1)