Mercurial > public > mercurial-scm > hg-stable
comparison 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 |
comparison
equal
deleted
inserted
replaced
13111:560b8001f765 | 13112:039a964dbbb3 |
---|---|
4 # Copyright 2007 Chris Mason <chris.mason@oracle.com> | 4 # Copyright 2007 Chris Mason <chris.mason@oracle.com> |
5 # | 5 # |
6 # This software may be used and distributed according to the terms of the | 6 # This software may be used and distributed according to the terms of the |
7 # GNU General Public License version 2 or any later version. | 7 # GNU General Public License version 2 or any later version. |
8 | 8 |
9 import cStringIO, email.Parser, os, re | 9 import cStringIO, email.Parser, os, errno, re |
10 import tempfile, zlib | 10 import tempfile, zlib |
11 | 11 |
12 from i18n import _ | 12 from i18n import _ |
13 from node import hex, nullid, short | 13 from node import hex, nullid, short |
14 import base85, mdiff, util, diffhelpers, copies, encoding | 14 import base85, mdiff, util, diffhelpers, copies, encoding |
427 | 427 |
428 def writelines(self, fname, lines): | 428 def writelines(self, fname, lines): |
429 # Ensure supplied data ends in fname, being a regular file or | 429 # Ensure supplied data ends in fname, being a regular file or |
430 # a symlink. cmdutil.updatedir will -too magically- take care | 430 # a symlink. cmdutil.updatedir will -too magically- take care |
431 # of setting it to the proper type afterwards. | 431 # of setting it to the proper type afterwards. |
432 st_mode = None | |
432 islink = os.path.islink(fname) | 433 islink = os.path.islink(fname) |
433 if islink: | 434 if islink: |
434 fp = cStringIO.StringIO() | 435 fp = cStringIO.StringIO() |
435 else: | 436 else: |
437 try: | |
438 st_mode = os.lstat(fname).st_mode & 0777 | |
439 except OSError, e: | |
440 if e.errno != errno.ENOENT: | |
441 raise | |
436 fp = self.opener(fname, 'w') | 442 fp = self.opener(fname, 'w') |
437 try: | 443 try: |
438 if self.eolmode == 'auto': | 444 if self.eolmode == 'auto': |
439 eol = self.eol | 445 eol = self.eol |
440 elif self.eolmode == 'crlf': | 446 elif self.eolmode == 'crlf': |
449 fp.write(l) | 455 fp.write(l) |
450 else: | 456 else: |
451 fp.writelines(lines) | 457 fp.writelines(lines) |
452 if islink: | 458 if islink: |
453 self.opener.symlink(fp.getvalue(), fname) | 459 self.opener.symlink(fp.getvalue(), fname) |
460 if st_mode is not None: | |
461 os.chmod(fname, st_mode) | |
454 finally: | 462 finally: |
455 fp.close() | 463 fp.close() |
456 | 464 |
457 def unlink(self, fname): | 465 def unlink(self, fname): |
458 os.unlink(fname) | 466 os.unlink(fname) |