comparison mercurial/obsolete.py @ 17195:48c232873a54

obsolete: add seek to end of file before calling tell (issue3543)
author Adrian Buehlmann <adrian@cadifra.com>
date Mon, 16 Jul 2012 22:37:44 +0200
parents 8fa8717b47b6
children 19f5dec2d61f
comparison
equal deleted inserted replaced
17194:32a6a33b9a35 17195:48c232873a54
49 - M bytes: metadata as a sequence of nul-terminated strings. Each 49 - M bytes: metadata as a sequence of nul-terminated strings. Each
50 string contains a key and a value, separated by a color ':', without 50 string contains a key and a value, separated by a color ':', without
51 additional encoding. Keys cannot contain '\0' or ':' and values 51 additional encoding. Keys cannot contain '\0' or ':' and values
52 cannot contain '\0'. 52 cannot contain '\0'.
53 """ 53 """
54 import struct 54 import os, struct
55 from mercurial import util, base85 55 from mercurial import util, base85
56 from i18n import _ 56 from i18n import _
57 57
58 _pack = struct.pack 58 _pack = struct.pack
59 _unpack = struct.unpack 59 _unpack = struct.unpack
193 def add(self, transaction, marker): 193 def add(self, transaction, marker):
194 """Add a new marker to the store""" 194 """Add a new marker to the store"""
195 if marker not in self._all: 195 if marker not in self._all:
196 f = self.sopener('obsstore', 'ab') 196 f = self.sopener('obsstore', 'ab')
197 try: 197 try:
198 # Whether the file's current position is at the begin or at
199 # the end after opening a file for appending is implementation
200 # defined. So we must seek to the end before calling tell(),
201 # or we may get a zero offset for non-zero sized files on
202 # some platforms (issue3543).
203 f.seek(0, os.SEEK_END)
198 offset = f.tell() 204 offset = f.tell()
199 transaction.add('obsstore', offset) 205 transaction.add('obsstore', offset)
200 if offset == 0: 206 if offset == 0:
201 # new file add version header 207 # new file add version header
202 f.write(_pack('>B', _fmversion)) 208 f.write(_pack('>B', _fmversion))