From: stevenknight Date: Sat, 8 Oct 2005 03:04:43 +0000 (+0000) Subject: Handle failure to chmod() the .sconsign.dblite file, if it's owned by another UID. X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=50c519f5493de3a1ab6fe7695d330b0fff8ab405;p=scons.git Handle failure to chmod() the .sconsign.dblite file, if it's owned by another UID. git-svn-id: http://scons.tigris.org/svn/scons/trunk@1360 fdb21ef1-2011-0410-befe-b5e4ea1792b1 --- diff --git a/src/CHANGES.txt b/src/CHANGES.txt index 516fe98a..52fd9777 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 505a7930..7a8846e4 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