613 |
613 |
614 if self.postfix is not None: |
614 if self.postfix is not None: |
615 entry_point = b'%s.i.%s' % (self.radix, self.postfix) |
615 entry_point = b'%s.i.%s' % (self.radix, self.postfix) |
616 elif self._trypending and self.opener.exists(b'%s.i.a' % self.radix): |
616 elif self._trypending and self.opener.exists(b'%s.i.a' % self.radix): |
617 entry_point = b'%s.i.a' % self.radix |
617 entry_point = b'%s.i.a' % self.radix |
618 elif self._try_split and self.opener.exists(b'%s.i.s' % self.radix): |
618 elif self._try_split and self.opener.exists(self._split_index_file): |
619 entry_point = b'%s.i.s' % self.radix |
619 entry_point = self._split_index_file |
620 else: |
620 else: |
621 entry_point = b'%s.i' % self.radix |
621 entry_point = b'%s.i' % self.radix |
622 |
622 |
623 if docket is not None: |
623 if docket is not None: |
624 self._docket = docket |
624 self._docket = docket |
2123 except error.RevlogError: |
2123 except error.RevlogError: |
2124 if self._censorable and storageutil.iscensoredtext(text): |
2124 if self._censorable and storageutil.iscensoredtext(text): |
2125 raise error.CensoredNodeError(self.display_id, node, text) |
2125 raise error.CensoredNodeError(self.display_id, node, text) |
2126 raise |
2126 raise |
2127 |
2127 |
|
2128 @property |
|
2129 def _split_index_file(self): |
|
2130 """the path where to expect the index of an ongoing splitting operation |
|
2131 |
|
2132 The file will only exist if a splitting operation is in progress, but |
|
2133 it is always expected at the same location.""" |
|
2134 parts = os.path.split(self.radix) |
|
2135 if len(parts) > 1: |
|
2136 # adds a '-s' prefix to the ``data/` or `meta/` base |
|
2137 head = parts[0] + b'-s' |
|
2138 return os.path.join(head, *parts[1:]) |
|
2139 else: |
|
2140 # the revlog is stored at the root of the store (changelog or |
|
2141 # manifest), no risk of collision. |
|
2142 return self.radix + b'.i.s' |
|
2143 |
2128 def _enforceinlinesize(self, tr, side_write=True): |
2144 def _enforceinlinesize(self, tr, side_write=True): |
2129 """Check if the revlog is too big for inline and convert if so. |
2145 """Check if the revlog is too big for inline and convert if so. |
2130 |
2146 |
2131 This should be called after revisions are added to the revlog. If the |
2147 This should be called after revisions are added to the revlog. If the |
2132 revlog has grown too large to be an inline revlog, it will convert it |
2148 revlog has grown too large to be an inline revlog, it will convert it |
2159 # No need to deal with sidedata writing handle as it is only |
2175 # No need to deal with sidedata writing handle as it is only |
2160 # relevant with revlog-v2 which is never inline, not reaching |
2176 # relevant with revlog-v2 which is never inline, not reaching |
2161 # this code |
2177 # this code |
2162 if side_write: |
2178 if side_write: |
2163 old_index_file_path = self._indexfile |
2179 old_index_file_path = self._indexfile |
2164 new_index_file_path = self._indexfile + b'.s' |
2180 new_index_file_path = self._split_index_file |
2165 opener = self.opener |
2181 opener = self.opener |
2166 weak_self = weakref.ref(self) |
2182 weak_self = weakref.ref(self) |
2167 |
2183 |
2168 # the "split" index replace the real index when the transaction is finalized |
2184 # the "split" index replace the real index when the transaction is finalized |
2169 def finalize_callback(tr): |
2185 def finalize_callback(tr): |