Handle failure to chmod() the .sconsign.dblite file, if it's owned by another UID.
authorstevenknight <stevenknight@fdb21ef1-2011-0410-befe-b5e4ea1792b1>
Sat, 8 Oct 2005 03:04:43 +0000 (03:04 +0000)
committerstevenknight <stevenknight@fdb21ef1-2011-0410-befe-b5e4ea1792b1>
Sat, 8 Oct 2005 03:04:43 +0000 (03:04 +0000)
git-svn-id: http://scons.tigris.org/svn/scons/trunk@1360 fdb21ef1-2011-0410-befe-b5e4ea1792b1

src/CHANGES.txt
src/engine/SCons/dblite.py

index 516fe98a67c19a8ae8920e314a8a132afb5523cc..52fd9777fd4135c7893dc48260b19303fcab3943 100644 (file)
@@ -337,6 +337,9 @@ RELEASE 0.97 - XXX
   - Fix a signature refactoring bug that caused Qt header files to
     get re-generated every time.
 
+  - Don't fail when writing signatures if the .sconsign.dblite file is
+    owned by a different user (e.g. root) from a previous run.
+
   From Chen Lee:
 
   - Handle Visual Studio project and solution files in Unicode.
index 505a79304c29287cb62315eeae0bc59e25566817..7a8846e41443e8f55a51710e5d6a6a60d89ff948 100644 (file)
@@ -79,8 +79,13 @@ class dblite:
     cPickle.dump(self._dict, f, 1)
     f.close()
     # Win32 doesn't allow renaming if the file exists, so unlink it first,
-    # chmod'ing it to make sure we can do so.
-    os.chmod(self._file_name, 0777)
+    # chmod'ing it to make sure we can do so.  On UNIX, we may not be able
+    # to chmod the file if it's owned by someone else (e.g. from a previous
+    # run as root).  We should still be able to unlink() the file if the
+    # directory's writable, though, so ignore any OSError exception  thrown
+    # by the chmod() call.
+    try: os.chmod(self._file_name, 0777)
+    except OSError: pass
     os.unlink(self._file_name)
     os.rename(self._tmp_name, self._file_name)
     self._needs_sync = 00000