# HG changeset patch # User Pierre-Yves David # Date 1685244226 -7200 # Node ID 32837c7e2e4b4ba1ebb74477e4db2e8266c5cc50 # Parent c90ea9bbf3277192cdb4b96b64c79587a8b50154 revlog: add a `get_revlog` method This might seen weird, but I actually thing we have been needing this for a long time. There is multiple object that kind of pretend being revlogs while actually wrapping the actual revlog. Since multiple code needs to access the actuel revlog. See documentation for more details. Expect cleanup of various places one the current series is done. diff -r c90ea9bbf327 -r 32837c7e2e4b mercurial/filelog.py --- a/mercurial/filelog.py Mon May 29 04:26:39 2023 +0200 +++ b/mercurial/filelog.py Sun May 28 05:23:46 2023 +0200 @@ -42,6 +42,15 @@ opts = opener.options self._fix_issue6528 = opts.get(b'issue6528.fix-incoming', True) + def get_revlog(self): + """return an actual revlog instance if any + + This exist because a lot of code leverage the fact the underlying + storage is a revlog for optimization, so giving simple way to access + the revlog instance helps such code. + """ + return self._revlog + def __len__(self): return len(self._revlog) diff -r c90ea9bbf327 -r 32837c7e2e4b mercurial/interfaces/repository.py --- a/mercurial/interfaces/repository.py Mon May 29 04:26:39 2023 +0200 +++ b/mercurial/interfaces/repository.py Sun May 28 05:23:46 2023 +0200 @@ -1404,6 +1404,14 @@ This one behaves the same way, except for manifest data. """ + def get_revlog(): + """return an actual revlog instance if any + + This exist because a lot of code leverage the fact the underlying + storage is a revlog for optimization, so giving simple way to access + the revlog instance helps such code. + """ + class imanifestlog(interfaceutil.Interface): """Interface representing a collection of manifest snapshots. diff -r c90ea9bbf327 -r 32837c7e2e4b mercurial/manifest.py --- a/mercurial/manifest.py Mon May 29 04:26:39 2023 +0200 +++ b/mercurial/manifest.py Sun May 28 05:23:46 2023 +0200 @@ -1617,6 +1617,15 @@ self.index = self._revlog.index self._generaldelta = self._revlog._generaldelta + def get_revlog(self): + """return an actual revlog instance if any + + This exist because a lot of code leverage the fact the underlying + storage is a revlog for optimization, so giving simple way to access + the revlog instance helps such code. + """ + return self._revlog + def _setupmanifestcachehooks(self, repo): """Persist the manifestfulltextcache on lock release""" if not util.safehasattr(repo, '_wlockref'): diff -r c90ea9bbf327 -r 32837c7e2e4b mercurial/revlog.py --- a/mercurial/revlog.py Mon May 29 04:26:39 2023 +0200 +++ b/mercurial/revlog.py Sun May 28 05:23:46 2023 +0200 @@ -663,6 +663,10 @@ # revlog header -> revlog compressor self._decompressors = {} + def get_revlog(self): + """simple function to mirror API of other not-really-revlog API""" + return self + @util.propertycache def revlog_kind(self): return self.target[0]