Mercurial > hg
changeset 27431:8f016345e6b0
merge with stable
author | Matt Mackall <mpm@selenic.com> |
---|---|
date | Fri, 18 Dec 2015 14:40:11 -0600 |
parents | 2e31a17ad1bf (current diff) e240e914d226 (diff) |
children | 77d25b913f80 |
files | mercurial/revlog.py |
diffstat | 1 files changed, 15 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/revlog.py Mon Dec 14 20:57:21 2015 -0500 +++ b/mercurial/revlog.py Fri Dec 18 14:40:11 2015 -0600 @@ -15,6 +15,7 @@ import collections import errno +import os import struct import zlib @@ -1495,6 +1496,20 @@ return node def _writeentry(self, transaction, ifh, dfh, entry, data, link, offset): + # Files opened in a+ mode have inconsistent behavior on various + # platforms. Windows requires that a file positioning call be made + # when the file handle transitions between reads and writes. See + # 3686fa2b8eee and the mixedfilemodewrapper in windows.py. On other + # platforms, Python or the platform itself can be buggy. Some versions + # of Solaris have been observed to not append at the end of the file + # if the file was seeked to before the end. See issue4943 for more. + # + # We work around this issue by inserting a seek() before writing. + # Note: This is likely not necessary on Python 3. + ifh.seek(0, os.SEEK_END) + if dfh: + dfh.seek(0, os.SEEK_END) + curr = len(self) - 1 if not self._inline: transaction.add(self.datafile, offset)