Mercurial > hg
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)) |