# HG changeset patch # User Pierre-Yves David # Date 2021-05-26 19:35:51 # Node ID 1844a2e3401c3c05ca91b3a928b2eabf16215217 # Parent 53ab13d6a5db6332b67a66ca8198fc69c462d151 revlog: simplify the try nesting in the `_writing` context Lets use a single try, with conditional cleanup. This make is easier to add a file handle dedicated to sidedata. Differential Revision: https://phab.mercurial-scm.org/D10775 diff --git a/mercurial/revlog.py b/mercurial/revlog.py --- a/mercurial/revlog.py +++ b/mercurial/revlog.py @@ -2232,41 +2232,43 @@ class revlog(object): if self._writinghandles is not None: yield else: - r = len(self) - dsize = 0 - if r: - dsize = self.end(r - 1) - dfh = None - if not self._inline: - try: - dfh = self._datafp(b"r+") - if self._docket is None: - dfh.seek(0, os.SEEK_END) - else: - dfh.seek(self._docket.data_end, os.SEEK_SET) - except IOError as inst: - if inst.errno != errno.ENOENT: - raise - dfh = self._datafp(b"w+") - transaction.add(self._datafile, dsize) + ifh = dfh = None try: + r = len(self) + # opening the data file. + dsize = 0 + if r: + dsize = self.end(r - 1) + dfh = None + if not self._inline: + try: + dfh = self._datafp(b"r+") + if self._docket is None: + dfh.seek(0, os.SEEK_END) + else: + dfh.seek(self._docket.data_end, os.SEEK_SET) + except IOError as inst: + if inst.errno != errno.ENOENT: + raise + dfh = self._datafp(b"w+") + transaction.add(self._datafile, dsize) + + # opening the index file. isize = r * self.index.entry_size ifh = self.__index_write_fp() if self._inline: transaction.add(self._indexfile, dsize + isize) else: transaction.add(self._indexfile, isize) - try: - self._writinghandles = (ifh, dfh) - try: - yield - if self._docket is not None: - self._write_docket(transaction) - finally: - self._writinghandles = None - finally: + # exposing all file handle for writing. + self._writinghandles = (ifh, dfh) + yield + if self._docket is not None: + self._write_docket(transaction) + finally: + self._writinghandles = None + if ifh is not None: ifh.close() - finally: if dfh is not None: dfh.close()