comparison mercurial/hbisect.py @ 15057:774da7121fc9

atomictempfile: make close() consistent with other file-like objects. The usual contract is that close() makes your writes permanent, so atomictempfile's use of close() to *discard* writes (and rename() to keep them) is rather unexpected. Thus, change it so close() makes things permanent and add a new discard() method to throw them away. discard() is only used internally, in __del__(), to ensure that writes are discarded when an atomictempfile object goes out of scope. I audited mercurial.*, hgext.*, and ~80 third-party extensions, and found no one using the existing semantics of close() to discard writes, so this should be safe.
author Greg Ward <greg@gerg.ca>
date Thu, 25 Aug 2011 20:21:04 -0400
parents a35d6f822e3e
children f19de58af225
comparison
equal deleted inserted replaced
15056:8413916df816 15057:774da7121fc9
148 wlock = repo.wlock() 148 wlock = repo.wlock()
149 try: 149 try:
150 for kind in state: 150 for kind in state:
151 for node in state[kind]: 151 for node in state[kind]:
152 f.write("%s %s\n" % (kind, hex(node))) 152 f.write("%s %s\n" % (kind, hex(node)))
153 f.rename() 153 f.close()
154 finally: 154 finally:
155 wlock.release() 155 wlock.release()
156 156