[PATCH] obsolete: add seek to end of file before calling tell (issue3543)

Adrian Buehlmann adrian at cadifra.com
Mon Jul 16 15:42:32 CDT 2012


# HG changeset patch
# User Adrian Buehlmann <adrian at cadifra.com>
# Date 1342471064 -7200
# Node ID 786ebb5187776de003ec1d67d1507a757ebcfcb5
# Parent  f76e2196ee709d0771ccdaa7e456f8f1e7339270
obsolete: add seek to end of file before calling tell (issue3543)

diff --git a/mercurial/obsolete.py b/mercurial/obsolete.py
--- a/mercurial/obsolete.py
+++ b/mercurial/obsolete.py
@@ -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:


More information about the Mercurial-devel mailing list