From 97dab7de5fa1e17e544c64ca7f53eb229a1f14bc Mon Sep 17 00:00:00 2001 From: Zac Medico Date: Wed, 29 Mar 2006 08:51:06 +0000 Subject: Automatically follow symlinks in the atomic_ofstream constructor. See bug #127897. svn path=/main/trunk/; revision=3034 --- pym/portage_util.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/pym/portage_util.py b/pym/portage_util.py index ae5312175..14ecaa7f8 100644 --- a/pym/portage_util.py +++ b/pym/portage_util.py @@ -607,9 +607,21 @@ class atomic_ofstream(file): file when the write is interrupted (for example, when an 'out of space' error occurs).""" - def __init__(self, filename, mode='w', **kargs): + def __init__(self, filename, mode='w', follow_links=True, **kargs): """Opens a temporary filename.pid in the same directory as filename.""" self._aborted = False + + if follow_links: + canonical_path = os.path.realpath(filename) + self._real_name = canonical_path + tmp_name = "%s.%i" % (canonical_path, os.getpid()) + try: + super(atomic_ofstream, self).__init__(tmp_name, mode=mode, **kargs) + return + except (OSError, IOError), e: + writemsg("!!! Failed to open file: '%s'\n" % tmp_name) + writemsg("!!! %s\n" % str(e)) + self._real_name = filename tmp_name = "%s.%i" % (filename, os.getpid()) super(atomic_ofstream, self).__init__(tmp_name, mode=mode, **kargs) -- cgit v1.2.3-1-g7c22