# HG changeset patch # User Adrian Buehlmann # Date 1342471064 -7200 # Node ID 48c232873a543111100776d1baa47c4bc1538060 # Parent 32a6a33b9a355ceafb2c6cdeed88ebb63a6cbfc9 obsolete: add seek to end of file before calling tell (issue3543) diff -r 32a6a33b9a35 -r 48c232873a54 mercurial/obsolete.py --- a/mercurial/obsolete.py Fri Jul 13 21:52:37 2012 +0200 +++ b/mercurial/obsolete.py Mon Jul 16 22:37:44 2012 +0200 @@ -51,7 +51,7 @@ additional encoding. Keys cannot contain '\0' or ':' and values cannot contain '\0'. """ -import struct +import os, struct from mercurial import util, base85 from i18n import _ @@ -195,6 +195,12 @@ if marker not in self._all: f = self.sopener('obsstore', 'ab') try: + # Whether the file's current position is at the begin or at + # the end after opening a file for appending is implementation + # defined. So we must seek to the end before calling tell(), + # or we may get a zero offset for non-zero sized files on + # some platforms (issue3543). + f.seek(0, os.SEEK_END) offset = f.tell() transaction.add('obsstore', offset) if offset == 0: