infinitepush: open files in binary mode stable
authorMatt Harbison <matt_harbison@yahoo.com>
Thu, 19 Apr 2018 00:55:36 -0400
branchstable
changeset 37792 33d26f7bd6ca
parent 37791 72ccb0716302
child 37793 a07fab68621f
infinitepush: open files in binary mode This fixes the scary looking abort in test-infinitepush-ci.t when unbundling: --- tests/test-infinitepush-ci.t +++ tests/test-infinitepush-ci.t.err @@ -84,15 +84,12 @@ $ hg unbundle .hg/scratchbranches/filebundlestore/a4/c2/a4c202c147a9c4bb91bbadb56321fc5f3950f7f2 adding changesets - adding manifests - adding file changes - added 1 changesets with 1 changes to 1 files - new changesets 6cb0989601f1 - (run 'hg update' to get a working copy) - - $ hg glog - o 1:6cb0989601f1 added a - | public + transaction abort! + rollback completed + abort: stream ended unexpectedly (got 68 bytes, expected 218759168) + [255] + + $ hg glog @ 0:67145f466344 initialcommit public This was found by grepping for '"r', "'r", '"w' and "'w" after manually creating a bundle from the same revision, diffing against the corrupt one, and seeing CRs sprinkled around. Sadly, the missing bookmarks are still a problem in the two remaining test failures.
hgext/infinitepush/__init__.py
hgext/infinitepush/store.py
--- a/hgext/infinitepush/__init__.py	Fri Mar 30 21:12:09 2018 -0400
+++ b/hgext/infinitepush/__init__.py	Thu Apr 19 00:55:36 2018 -0400
@@ -1067,7 +1067,7 @@
         bookmarknode = nodesctx[-1].hex() if nodesctx else None
         key = None
         if newheadscount:
-            with open(bundlefile, 'r') as f:
+            with open(bundlefile, 'rb') as f:
                 bundledata = f.read()
                 with logservicecall(log, 'bundlestore',
                                     bundlesize=len(bundledata)):
--- a/hgext/infinitepush/store.py	Fri Mar 30 21:12:09 2018 -0400
+++ b/hgext/infinitepush/store.py	Thu Apr 19 00:55:36 2018 -0400
@@ -79,14 +79,14 @@
         if not os.path.exists(dirpath):
             os.makedirs(dirpath)
 
-        with open(self._filepath(filename), 'w') as f:
+        with open(self._filepath(filename), 'wb') as f:
             f.write(data)
 
         return filename
 
     def read(self, key):
         try:
-            f = open(self._filepath(key), 'r')
+            f = open(self._filepath(key), 'rb')
         except IOError:
             return None