Gentoo Archives: gentoo-commits

From: "Zac Medico (zmedico)" <zmedico@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] portage r9875 - main/branches/2.1.2/pym
Date: Sun, 13 Apr 2008 22:07:22
Message-Id: E1JlAM3-0002qx-L1@stork.gentoo.org
Author: zmedico
Date: 2008-04-13 22:07:18 +0000 (Sun, 13 Apr 2008)
New Revision: 9875

Modified:
   main/branches/2.1.2/pym/portage.py
Log:
Make movefile() tolerant to EPERM errors that can be raised from utime()
calls. Instead of failing, use stat() to return the mtime if possible.
(trunk r9863:9865)


Modified: main/branches/2.1.2/pym/portage.py
===================================================================
--- main/branches/2.1.2/pym/portage.py	2008-04-13 21:49:52 UTC (rev 9874)
+++ main/branches/2.1.2/pym/portage.py	2008-04-13 22:07:18 UTC (rev 9875)
@@ -5208,11 +5208,22 @@
 			print "!!!",e
 			return None
 
-	if newmtime:
-		os.utime(dest,(newmtime,newmtime))
-	else:
-		os.utime(dest, (sstat[stat.ST_ATIME], sstat[stat.ST_MTIME]))
-		newmtime=sstat[stat.ST_MTIME]
+	try:
+		if newmtime is not None:
+			os.utime(dest, (newmtime, newmtime))
+		else:
+			os.utime(dest, (sstat.st_atime, sstat.st_mtime))
+			newmtime = long(sstat.st_mtime)
+	except OSError:
+		# The utime can fail here with EPERM even though the move succeeded.
+		# Instead of failing, use stat to return the mtime if possible.
+		try:
+			newmtime = long(os.stat(dest).st_mtime)
+		except OSError, e:
+			writemsg("!!! Failed to stat in movefile()\n", noiselevel=-1)
+			writemsg("!!! %s\n" % dest, noiselevel=-1)
+			writemsg("!!! %s\n" % str(e), noiselevel=-1)
+			return None
 
 	if bsd_chflags:
 		# Restore the flags we saved before moving

-- 
gentoo-commits@l.g.o mailing list