summaryrefslogtreecommitdiffstats
path: root/pym
diff options
context:
space:
mode:
Diffstat (limited to 'pym')
-rw-r--r--pym/portage.py34
1 files changed, 16 insertions, 18 deletions
diff --git a/pym/portage.py b/pym/portage.py
index c67a23981..6a84c925a 100644
--- a/pym/portage.py
+++ b/pym/portage.py
@@ -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)