From af9c2236034aec3e408ae4dd6f2eb8bbc7e24f2f Mon Sep 17 00:00:00 2001 From: Steven Knight Date: Sat, 8 Oct 2005 03:04:43 +0000 Subject: Handle failure to chmod() the .sconsign.dblite file, if it's owned by another UID. --- src/CHANGES.txt | 3 +++ src/engine/SCons/dblite.py | 9 +++++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/CHANGES.txt b/src/CHANGES.txt index 516fe98..52fd977 100644 --- a/src/CHANGES.txt +++ b/src/CHANGES.txt @@ -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. diff --git a/src/engine/SCons/dblite.py b/src/engine/SCons/dblite.py index 505a793..7a8846e 100644 --- a/src/engine/SCons/dblite.py +++ b/src/engine/SCons/dblite.py @@ -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 -- cgit v0.12