Patchwork infinitepush: open files in binary mode

login
register
mail settings
Submitter Matt Harbison
Date April 19, 2018, 4:59 a.m.
Message ID <3d1fddfcb61629858fee.1524113948@Envy>
Download mbox | patch
Permalink /patch/31194/
State Accepted
Headers show

Comments

Matt Harbison - April 19, 2018, 4:59 a.m.
# HG changeset patch
# User Matt Harbison <matt_harbison@yahoo.com>
# Date 1524113736 14400
#      Thu Apr 19 00:55:36 2018 -0400
# Branch stable
# Node ID 3d1fddfcb61629858fee021617312da183005760
# Parent  981ad706524029aaf72139201c1b6a5deb779cfe
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.
Yuya Nishihara - April 19, 2018, 11:14 a.m.
On Thu, 19 Apr 2018 00:59:08 -0400, Matt Harbison wrote:
> # HG changeset patch
> # User Matt Harbison <matt_harbison@yahoo.com>
> # Date 1524113736 14400
> #      Thu Apr 19 00:55:36 2018 -0400
> # Branch stable
> # Node ID 3d1fddfcb61629858fee021617312da183005760
> # Parent  981ad706524029aaf72139201c1b6a5deb779cfe
> infinitepush: open files in binary mode

Queued for stable, thanks.

Patch

diff --git a/hgext/infinitepush/__init__.py b/hgext/infinitepush/__init__.py
--- a/hgext/infinitepush/__init__.py
+++ b/hgext/infinitepush/__init__.py
@@ -1067,7 +1067,7 @@  def storebundle(op, params, bundlefile):
         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)):
diff --git a/hgext/infinitepush/store.py b/hgext/infinitepush/store.py
--- a/hgext/infinitepush/store.py
+++ b/hgext/infinitepush/store.py
@@ -79,14 +79,14 @@  class filebundlestore(object):
         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