Mercurial > public > mercurial-scm > hg
diff mercurial/revlog.py @ 27431:8f016345e6b0
merge with stable
author | Matt Mackall <mpm@selenic.com> |
---|---|
date | Fri, 18 Dec 2015 14:40:11 -0600 |
parents | 29f50344fa83 e240e914d226 |
children | 12f727a5b434 |
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)