D2863: cleanup: fix some latent open(path).read() et al calls we previously missed

durin42 (Augie Fackler) phabricator at mercurial-scm.org
Wed Mar 14 19:53:34 UTC 2018


durin42 created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.

REVISION SUMMARY
  This pattern was banned by check-code way back in https://phab.mercurial-scm.org/rHG1b4b82063ce2c0a918dfb7dfa5537ed665dd5894 (may of
  2011), but due to a regular expression rewriting bug in check-code
  these particular callsites were never detected. Python 3.7 caught the
  bug, which then exposed these errors.

REPOSITORY
  rHG Mercurial

REVISION DETAIL
  https://phab.mercurial-scm.org/D2863

AFFECTED FILES
  i18n/hggettext
  mercurial/cffi/bdiffbuild.py
  mercurial/cffi/mpatchbuild.py
  mercurial/posix.py
  tests/f

CHANGE DETAILS

diff --git a/tests/f b/tests/f
--- a/tests/f
+++ b/tests/f
@@ -61,7 +61,8 @@
             if opts.type:
                 facts.append(b'file')
             if any((opts.hexdump, opts.dump, opts.md5, opts.sha1, opts.sha256)):
-                content = open(f, 'rb').read()
+                with open(f, 'rb') as fobj:
+                    content = fobj.read()
         elif islink:
             if opts.type:
                 facts.append(b'link')
diff --git a/mercurial/posix.py b/mercurial/posix.py
--- a/mercurial/posix.py
+++ b/mercurial/posix.py
@@ -264,7 +264,8 @@
                 # already exists.
                 target = 'checklink-target'
                 try:
-                    open(os.path.join(cachedir, target), 'w').close()
+                    fullpath = os.path.join(cachedir, target)
+                    open(fullpath, 'w').close()
                 except IOError as inst:
                     if inst[0] == errno.EACCES:
                         # If we can't write to cachedir, just pretend
diff --git a/mercurial/cffi/mpatchbuild.py b/mercurial/cffi/mpatchbuild.py
--- a/mercurial/cffi/mpatchbuild.py
+++ b/mercurial/cffi/mpatchbuild.py
@@ -6,8 +6,9 @@
 ffi = cffi.FFI()
 mpatch_c = os.path.join(os.path.join(os.path.dirname(__file__), '..',
                                      'mpatch.c'))
-ffi.set_source("mercurial.cffi._mpatch", open(mpatch_c).read(),
-               include_dirs=["mercurial"])
+with open(mpatch_c) as f:
+    ffi.set_source("mercurial.cffi._mpatch", f.read(),
+                   include_dirs=["mercurial"])
 ffi.cdef("""
 
 struct mpatch_frag {
diff --git a/mercurial/cffi/bdiffbuild.py b/mercurial/cffi/bdiffbuild.py
--- a/mercurial/cffi/bdiffbuild.py
+++ b/mercurial/cffi/bdiffbuild.py
@@ -4,9 +4,10 @@
 import os
 
 ffi = cffi.FFI()
-ffi.set_source("mercurial.cffi._bdiff",
-    open(os.path.join(os.path.join(os.path.dirname(__file__), '..'),
-        'bdiff.c')).read(), include_dirs=['mercurial'])
+with open(os.path.join(os.path.join(os.path.dirname(__file__), '..'),
+                       'bdiff.c')) as f:
+    ffi.set_source("mercurial.cffi._bdiff",
+                   f.read(), include_dirs=['mercurial'])
 ffi.cdef("""
 struct bdiff_line {
     int hash, n, e;
diff --git a/i18n/hggettext b/i18n/hggettext
--- a/i18n/hggettext
+++ b/i18n/hggettext
@@ -104,7 +104,8 @@
     """
     mod = importpath(path)
     if not path.startswith('mercurial/') and mod.__doc__:
-        src = open(path).read()
+        with open(path) as fobj:
+            src = fobj.read()
         lineno = 1 + offset(src, mod.__doc__, path, 7)
         print(poentry(path, lineno, mod.__doc__))
 
@@ -143,7 +144,8 @@
 
 
 def rawtext(path):
-    src = open(path).read()
+    with open(path) as f:
+        src = f.read()
     print(poentry(path, 1, src))
 
 



To: durin42, #hg-reviewers
Cc: mercurial-devel


More information about the Mercurial-devel mailing list