# HG changeset patch # User Boris Feld # Date 1517847733 -3600 # Node ID 91b3b11565e5e9872945daac724213d9db2c992f # Parent 61326dd7cb8d5237c7bbc509a81045e97512f2cb revlog: move index file opening in a method Having file operation centralized into a single spot help to factor common logic out (eg: special flag handling according to the mode). It is also the first step to simplify file handling during batch operation (eg: revlog cloning). However, that part does not seems to be a hotspot yet. diff -r 61326dd7cb8d -r 91b3b11565e5 mercurial/revlog.py --- a/mercurial/revlog.py Mon Feb 05 17:03:56 2018 +0100 +++ b/mercurial/revlog.py Mon Feb 05 17:22:13 2018 +0100 @@ -621,7 +621,7 @@ indexdata = '' self._initempty = True try: - f = self.opener(self.indexfile) + f = self._indexfp() if (mmapindexthreshold is not None and self.opener.fstat(f).st_size >= mmapindexthreshold): indexdata = util.buffer(util.mmapread(f)) @@ -682,6 +682,15 @@ def _compressor(self): return util.compengines[self._compengine].revlogcompressor() + def _indexfp(self, mode='r'): + """file object for the revlog's index file""" + args = {r'mode': mode} + if mode != 'r': + args[r'checkambig'] = self._checkambig + if mode == 'w': + args[r'atomictemp'] = True + return self.opener(self.indexfile, **args) + def _datafp(self, mode='r'): """file object for the revlog's data file""" return self.opener(self.datafile, mode=mode) @@ -1498,7 +1507,7 @@ closehandle = False else: if self._inline: - df = self.opener(self.indexfile) + df = self._indexfp() else: df = self._datafp() closehandle = True @@ -1858,8 +1867,7 @@ finally: df.close() - fp = self.opener(self.indexfile, 'w', atomictemp=True, - checkambig=self._checkambig) + fp = self._indexfp('w') self.version &= ~FLAG_INLINE_DATA self._inline = False for i in self: @@ -1928,7 +1936,7 @@ dfh = None if not self._inline: dfh = self._datafp("a+") - ifh = self.opener(self.indexfile, "a+", checkambig=self._checkambig) + ifh = self._indexfp("a+") try: return self._addrevision(node, rawtext, transaction, link, p1, p2, flags, cachedelta, ifh, dfh, @@ -2157,7 +2165,7 @@ end = 0 if r: end = self.end(r - 1) - ifh = self.opener(self.indexfile, "a+", checkambig=self._checkambig) + ifh = self._indexfp("a+") isize = r * self._io.size if self._inline: transaction.add(self.indexfile, end + isize, r) @@ -2229,8 +2237,7 @@ # reopen the index ifh.close() dfh = self._datafp("a+") - ifh = self.opener(self.indexfile, "a+", - checkambig=self._checkambig) + ifh = self._indexfp("a+") finally: if dfh: dfh.close()