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: