Mercurial > public > mercurial-scm > hg-stable
diff mercurial/patch.py @ 13112:039a964dbbb3
opener: always reset flags on 'w'rite
only the patcher needs to preserve flags on write
author | Adrian Buehlmann <adrian@cadifra.com> |
---|---|
date | Fri, 10 Dec 2010 15:14:05 +0100 |
parents | 5dac0d04b838 |
children | 104c9ed93fc5 |
line wrap: on
line diff
--- a/mercurial/patch.py Thu Dec 09 16:52:14 2010 -0500 +++ b/mercurial/patch.py Fri Dec 10 15:14:05 2010 +0100 @@ -6,7 +6,7 @@ # This software may be used and distributed according to the terms of the # GNU General Public License version 2 or any later version. -import cStringIO, email.Parser, os, re +import cStringIO, email.Parser, os, errno, re import tempfile, zlib from i18n import _ @@ -429,10 +429,16 @@ # Ensure supplied data ends in fname, being a regular file or # a symlink. cmdutil.updatedir will -too magically- take care # of setting it to the proper type afterwards. + st_mode = None islink = os.path.islink(fname) if islink: fp = cStringIO.StringIO() else: + try: + st_mode = os.lstat(fname).st_mode & 0777 + except OSError, e: + if e.errno != errno.ENOENT: + raise fp = self.opener(fname, 'w') try: if self.eolmode == 'auto': @@ -451,6 +457,8 @@ fp.writelines(lines) if islink: self.opener.symlink(fp.getvalue(), fname) + if st_mode is not None: + os.chmod(fname, st_mode) finally: fp.close()