Mercurial > public > mercurial-scm > hg
comparison mercurial/merge.py @ 13400:14f3795a5ed7
explicitly close files
Add missing calls to close() to many places where files are
opened. Relying on reference counting to catch them soon-ish is not
portable and fails in environments with a proper GC, such as PyPy.
author | Dan Villiom Podlaski Christiansen <danchr@gmail.com> |
---|---|
date | Fri, 24 Dec 2010 15:23:01 +0100 |
parents | d8d478f9ee0f |
children | 6169493ac3f9 |
comparison
equal
deleted
inserted
replaced
13399:eff102facb15 | 13400:14f3795a5ed7 |
---|---|
30 if i == 0: | 30 if i == 0: |
31 self._local = bin(l[:-1]) | 31 self._local = bin(l[:-1]) |
32 else: | 32 else: |
33 bits = l[:-1].split("\0") | 33 bits = l[:-1].split("\0") |
34 self._state[bits[0]] = bits[1:] | 34 self._state[bits[0]] = bits[1:] |
35 f.close() | |
35 except IOError, err: | 36 except IOError, err: |
36 if err.errno != errno.ENOENT: | 37 if err.errno != errno.ENOENT: |
37 raise | 38 raise |
38 self._dirty = False | 39 self._dirty = False |
39 def commit(self): | 40 def commit(self): |
40 if self._dirty: | 41 if self._dirty: |
41 f = self._repo.opener("merge/state", "w") | 42 f = self._repo.opener("merge/state", "w") |
42 f.write(hex(self._local) + "\n") | 43 f.write(hex(self._local) + "\n") |
43 for d, v in self._state.iteritems(): | 44 for d, v in self._state.iteritems(): |
44 f.write("\0".join([d] + v) + "\n") | 45 f.write("\0".join([d] + v) + "\n") |
46 f.close() | |
45 self._dirty = False | 47 self._dirty = False |
46 def add(self, fcl, fco, fca, fd, flags): | 48 def add(self, fcl, fco, fca, fd, flags): |
47 hash = util.sha1(fcl.path()).hexdigest() | 49 hash = util.sha1(fcl.path()).hexdigest() |
48 self._repo.opener("merge/" + hash, "w").write(fcl.data()) | 50 self._repo.opener("merge/" + hash, "w").write(fcl.data()) |
49 self._state[fd] = ['u', hash, fcl.path(), fca.path(), | 51 self._state[fd] = ['u', hash, fcl.path(), fca.path(), |
65 if self[dfile] == 'r': | 67 if self[dfile] == 'r': |
66 return 0 | 68 return 0 |
67 state, hash, lfile, afile, anode, ofile, flags = self._state[dfile] | 69 state, hash, lfile, afile, anode, ofile, flags = self._state[dfile] |
68 f = self._repo.opener("merge/" + hash) | 70 f = self._repo.opener("merge/" + hash) |
69 self._repo.wwrite(dfile, f.read(), flags) | 71 self._repo.wwrite(dfile, f.read(), flags) |
72 f.close() | |
70 fcd = wctx[dfile] | 73 fcd = wctx[dfile] |
71 fco = octx[ofile] | 74 fco = octx[ofile] |
72 fca = self._repo.filectx(afile, fileid=anode) | 75 fca = self._repo.filectx(afile, fileid=anode) |
73 r = filemerge.filemerge(self._repo, self._local, lfile, fcd, fco, fca) | 76 r = filemerge.filemerge(self._repo, self._local, lfile, fcd, fco, fca) |
74 if not r: | 77 if not r: |