Skip to content

Commit 9a52168

Browse files
committed
io, #519: ALL open() --> with open()
+ Some cases had restructuring of code.
1 parent bdf1e68 commit 9a52168

File tree

14 files changed

+92
-89
lines changed

14 files changed

+92
-89
lines changed

doc/source/conf.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,8 @@
5050
# built documents.
5151
#
5252
# The short X.Y version.
53-
VERSION = open(os.path.join(os.path.dirname(__file__),"..", "..", 'VERSION')).readline().strip()
53+
with open(os.path.join(os.path.dirname(__file__),"..", "..", 'VERSION')) as fd:
54+
VERSION = fd.readline().strip()
5455
version = VERSION
5556
# The full version, including alpha/beta/rc tags.
5657
release = VERSION

git/objects/submodule/base.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -854,6 +854,8 @@ def remove(self, module=True, force=False, configuration=True, dry_run=False):
854854
self._clear_cache()
855855
wtd = mod.working_tree_dir
856856
del(mod) # release file-handles (windows)
857+
import gc
858+
gc.collect()
857859
rmtree(wtd)
858860
# END delete tree if possible
859861
# END handle force

git/refs/symbolic.py

Lines changed: 42 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -134,9 +134,8 @@ def _get_ref_info(cls, repo, ref_path):
134134
point to, or None"""
135135
tokens = None
136136
try:
137-
fp = open(join(repo.git_dir, ref_path), 'rt')
138-
value = fp.read().rstrip()
139-
fp.close()
137+
with open(join(repo.git_dir, ref_path), 'rt') as fp:
138+
value = fp.read().rstrip()
140139
# Don't only split on spaces, but on whitespace, which allows to parse lines like
141140
# 60b64ef992065e2600bfef6187a97f92398a9144 branch 'master' of git-server:/path/to/repo
142141
tokens = value.split()
@@ -313,13 +312,17 @@ def set_reference(self, ref, logmsg=None):
313312

314313
lfd = LockedFD(fpath)
315314
fd = lfd.open(write=True, stream=True)
316-
fd.write(write_value.encode('ascii') + b'\n')
317-
lfd.commit()
318-
315+
ok = True
316+
try:
317+
fd.write(write_value.encode('ascii') + b'\n')
318+
lfd.commit()
319+
ok = True
320+
finally:
321+
if not ok:
322+
lfd.rollback()
319323
# Adjust the reflog
320324
if logmsg is not None:
321325
self.log_append(oldbinsha, logmsg)
322-
# END handle reflog
323326

324327
return self
325328

@@ -422,40 +425,36 @@ def delete(cls, repo, path):
422425
# check packed refs
423426
pack_file_path = cls._get_packed_refs_path(repo)
424427
try:
425-
reader = open(pack_file_path, 'rb')
426-
except (OSError, IOError):
427-
pass # it didnt exist at all
428-
else:
429-
new_lines = list()
430-
made_change = False
431-
dropped_last_line = False
432-
for line in reader:
433-
# keep line if it is a comment or if the ref to delete is not
434-
# in the line
435-
# If we deleted the last line and this one is a tag-reference object,
436-
# we drop it as well
437-
line = line.decode(defenc)
438-
if (line.startswith('#') or full_ref_path not in line) and \
439-
(not dropped_last_line or dropped_last_line and not line.startswith('^')):
440-
new_lines.append(line)
441-
dropped_last_line = False
442-
continue
443-
# END skip comments and lines without our path
444-
445-
# drop this line
446-
made_change = True
447-
dropped_last_line = True
448-
# END for each line in packed refs
449-
reader.close()
428+
with open(pack_file_path, 'rb') as reader:
429+
new_lines = list()
430+
made_change = False
431+
dropped_last_line = False
432+
for line in reader:
433+
# keep line if it is a comment or if the ref to delete is not
434+
# in the line
435+
# If we deleted the last line and this one is a tag-reference object,
436+
# we drop it as well
437+
line = line.decode(defenc)
438+
if (line.startswith('#') or full_ref_path not in line) and \
439+
(not dropped_last_line or dropped_last_line and not line.startswith('^')):
440+
new_lines.append(line)
441+
dropped_last_line = False
442+
continue
443+
# END skip comments and lines without our path
444+
445+
# drop this line
446+
made_change = True
447+
dropped_last_line = True
450448

451449
# write the new lines
452450
if made_change:
453451
# write-binary is required, otherwise windows will
454452
# open the file in text mode and change LF to CRLF !
455-
open(pack_file_path, 'wb').writelines(l.encode(defenc) for l in new_lines)
456-
# END write out file
457-
# END open exception handling
458-
# END handle deletion
453+
with open(pack_file_path, 'wb') as fd:
454+
fd.writelines(l.encode(defenc) for l in new_lines)
455+
456+
except (OSError, IOError):
457+
pass # it didnt exist at all
459458

460459
# delete the reflog
461460
reflog_path = RefLog.path(cls(repo, full_ref_path))
@@ -484,7 +483,8 @@ def _create(cls, repo, path, resolve, reference, force, logmsg=None):
484483
target_data = target.path
485484
if not resolve:
486485
target_data = "ref: " + target_data
487-
existing_data = open(abs_ref_path, 'rb').read().decode(defenc).strip()
486+
with open(abs_ref_path, 'rb') as fd:
487+
existing_data = fd.read().decode(defenc).strip()
488488
if existing_data != target_data:
489489
raise OSError("Reference at %r does already exist, pointing to %r, requested was %r" %
490490
(full_ref_path, existing_data, target_data))
@@ -549,7 +549,11 @@ def rename(self, new_path, force=False):
549549
if isfile(new_abs_path):
550550
if not force:
551551
# if they point to the same file, its not an error
552-
if open(new_abs_path, 'rb').read().strip() != open(cur_abs_path, 'rb').read().strip():
552+
with open(new_abs_path, 'rb') as fd1:
553+
f1 = fd1.read().strip()
554+
with open(cur_abs_path, 'rb') as fd2:
555+
f2 = fd2.read().strip()
556+
if f1 != f2:
553557
raise OSError("File at path %r already exists" % new_abs_path)
554558
# else: we could remove ourselves and use the otherone, but
555559
# but clarity we just continue as usual

git/remote.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -638,9 +638,8 @@ def _get_fetch_info_from_stderr(self, proc, progress):
638638
finalize_process(proc, stderr=stderr_text)
639639

640640
# read head information
641-
fp = open(join(self.repo.git_dir, 'FETCH_HEAD'), 'rb')
642-
fetch_head_info = [l.decode(defenc) for l in fp.readlines()]
643-
fp.close()
641+
with open(join(self.repo.git_dir, 'FETCH_HEAD'), 'rb') as fp:
642+
fetch_head_info = [l.decode(defenc) for l in fp.readlines()]
644643

645644
l_fil = len(fetch_info_lines)
646645
l_fhi = len(fetch_head_info)

git/test/fixtures/cat_file.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import sys
22

3-
for line in open(sys.argv[1]).readlines():
4-
sys.stdout.write(line)
5-
sys.stderr.write(line)
3+
with open(sys.argv[1]) as fd:
4+
for line in fd.readlines():
5+
sys.stdout.write(line)
6+
sys.stderr.write(line)

git/test/lib/helper.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,8 @@ def fixture_path(name):
3939

4040

4141
def fixture(name):
42-
return open(fixture_path(name), 'rb').read()
42+
with open(fixture_path(name), 'rb') as fd:
43+
return fd.read()
4344

4445

4546
def absolute_project_path():
@@ -373,7 +374,6 @@ def _make_file(self, rela_path, data, repo=None):
373374
"""
374375
repo = repo or self.rorepo
375376
abs_path = os.path.join(repo.working_tree_dir, rela_path)
376-
fp = open(abs_path, "w")
377-
fp.write(data)
378-
fp.close()
377+
with open(abs_path, "w") as fp:
378+
fp.write(data)
379379
return abs_path

git/test/test_base.py

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -77,13 +77,11 @@ def test_base_object(self):
7777
assert data
7878

7979
tmpfilename = tempfile.mktemp(suffix='test-stream')
80-
tmpfile = open(tmpfilename, 'wb+')
81-
assert item == item.stream_data(tmpfile)
82-
tmpfile.seek(0)
83-
assert tmpfile.read() == data
84-
tmpfile.close()
80+
with open(tmpfilename, 'wb+') as tmpfile:
81+
assert item == item.stream_data(tmpfile)
82+
tmpfile.seek(0)
83+
assert tmpfile.read() == data
8584
os.remove(tmpfilename)
86-
# END stream to file directly
8785
# END for each object type to create
8886

8987
# each has a unique sha
@@ -133,7 +131,8 @@ def test_add_unicode(self, rw_repo):
133131
from nose import SkipTest
134132
raise SkipTest("Environment doesn't support unicode filenames")
135133

136-
open(file_path, "wb").write(b'something')
134+
with open(file_path, "wb") as fp:
135+
fp.write(b'something')
137136

138137
if is_win:
139138
# on windows, there is no way this works, see images on

git/test/test_commit.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -313,14 +313,16 @@ def test_serialization_unicode_support(self):
313313

314314
def test_invalid_commit(self):
315315
cmt = self.rorepo.commit()
316-
cmt._deserialize(open(fixture_path('commit_invalid_data'), 'rb'))
316+
with open(fixture_path('commit_invalid_data'), 'rb') as fd:
317+
cmt._deserialize(fd)
317318

318319
self.assertEqual(cmt.author.name, u'E.Azer Ko�o�o�oculu', cmt.author.name)
319320
self.assertEqual(cmt.author.email, 'azer@kodfabrik.com', cmt.author.email)
320321

321322
def test_gpgsig(self):
322323
cmt = self.rorepo.commit()
323-
cmt._deserialize(open(fixture_path('commit_with_gpgsig'), 'rb'))
324+
with open(fixture_path('commit_with_gpgsig'), 'rb') as fd:
325+
cmt._deserialize(fd)
324326

325327
fixture_sig = """-----BEGIN PGP SIGNATURE-----
326328
Version: GnuPG v1.4.11 (GNU/Linux)

git/test/test_docs.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,8 @@ def test_init_repo_object(self, rw_dir):
5353
# ![5-test_init_repo_object]
5454

5555
# [6-test_init_repo_object]
56-
repo.archive(open(join(rw_dir, 'repo.tar'), 'wb'))
56+
with open(join(rw_dir, 'repo.tar'), 'wb') as fp:
57+
repo.archive(fp)
5758
# ![6-test_init_repo_object]
5859

5960
# repository paths

git/test/test_git.py

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -93,10 +93,9 @@ def test_it_executes_git_to_shell_and_returns_result(self):
9393

9494
def test_it_accepts_stdin(self):
9595
filename = fixture_path("cat_file_blob")
96-
fh = open(filename, 'r')
97-
assert_equal("70c379b63ffa0795fdbfbc128e5a2818397b7ef8",
98-
self.git.hash_object(istream=fh, stdin=True))
99-
fh.close()
96+
with open(filename, 'r') as fh:
97+
assert_equal("70c379b63ffa0795fdbfbc128e5a2818397b7ef8",
98+
self.git.hash_object(istream=fh, stdin=True))
10099

101100
@patch.object(Git, 'execute')
102101
def test_it_ignores_false_kwargs(self, git):
@@ -200,10 +199,9 @@ def test_environment(self, rw_dir):
200199
self.assertEqual(self.git.environment(), {})
201200

202201
path = os.path.join(rw_dir, 'failing-script.sh')
203-
stream = open(path, 'wt')
204-
stream.write("#!/usr/bin/env sh\n" +
205-
"echo FOO\n")
206-
stream.close()
202+
with open(path, 'wt') as stream:
203+
stream.write("#!/usr/bin/env sh\n"
204+
"echo FOO\n")
207205
os.chmod(path, 0o777)
208206

209207
rw_repo = Repo.init(os.path.join(rw_dir, 'repo'))

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy