comparison mercurial/branchmap.py @ 51520:fe8347b984f3

branchcache-v3: introduce a v3 format For now the format is the very same, however we will start changing it in future changesets.
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Mon, 26 Feb 2024 14:20:36 +0100
parents ec640dc9cebd
children 0d4a6ab3c8da
comparison
equal deleted inserted replaced
51519:ec640dc9cebd 51520:fe8347b984f3
726 # (The cache warming setup by localrepo will update the file later.) 726 # (The cache warming setup by localrepo will update the file later.)
727 self.write(repo) 727 self.write(repo)
728 728
729 729
730 def branch_cache_from_file(repo) -> Optional[_LocalBranchCache]: 730 def branch_cache_from_file(repo) -> Optional[_LocalBranchCache]:
731 """Build a branch cache from on-disk data if possible""" 731 """Build a branch cache from on-disk data if possible
732 return BranchCacheV2.fromfile(repo) 732
733 Return a branch cache of the right format depending of the repository.
734 """
735 if repo.ui.configbool(b"experimental", b"branch-cache-v3"):
736 return BranchCacheV3.fromfile(repo)
737 else:
738 return BranchCacheV2.fromfile(repo)
733 739
734 740
735 def new_branch_cache(repo, *args, **kwargs): 741 def new_branch_cache(repo, *args, **kwargs):
736 """Build a new branch cache from argument""" 742 """Build a new branch cache from argument
737 return BranchCacheV2(repo, *args, **kwargs) 743
744 Return a branch cache of the right format depending of the repository.
745 """
746 if repo.ui.configbool(b"experimental", b"branch-cache-v3"):
747 return BranchCacheV3(repo, *args, **kwargs)
748 else:
749 return BranchCacheV2(repo, *args, **kwargs)
738 750
739 751
740 class BranchCacheV2(_LocalBranchCache): 752 class BranchCacheV2(_LocalBranchCache):
741 """a branch cache using version 2 of the format on disk 753 """a branch cache using version 2 of the format on disk
742 754
755 This field can be used to avoid changelog reads when determining if a 767 This field can be used to avoid changelog reads when determining if a
756 branch head closes a branch or not. 768 branch head closes a branch or not.
757 """ 769 """
758 770
759 _base_filename = b"branch2" 771 _base_filename = b"branch2"
772
773
774 class BranchCacheV3(_LocalBranchCache):
775 """a branch cache using version 3 of the format on disk
776
777 This version is still EXPERIMENTAL and the format is subject to changes.
778
779 The cache is serialized on disk in the following format:
780
781 <tip hex node> <tip rev number> [optional filtered repo hex hash]
782 <branch head hex node> <open/closed state> <branch name>
783 <branch head hex node> <open/closed state> <branch name>
784 ...
785
786 The first line is used to check if the cache is still valid. If the
787 branch cache is for a filtered repo view, an optional third hash is
788 included that hashes the hashes of all filtered and obsolete revisions.
789
790 The open/closed state is represented by a single letter 'o' or 'c'.
791 This field can be used to avoid changelog reads when determining if a
792 branch head closes a branch or not.
793 """
794
795 _base_filename = b"branch3"
760 796
761 797
762 class remotebranchcache(_BaseBranchCache): 798 class remotebranchcache(_BaseBranchCache):
763 """Branchmap info for a remote connection, should not write locally""" 799 """Branchmap info for a remote connection, should not write locally"""
764 800