comparison mercurial/repoview.py @ 18245:aff706b3a21c

clfilter: add mutable filtering It filters all mutable changesets, leaving only public changeset unfiltered. This filtering set is expected to be much more stable that the previous one as public changeset are unlikely to disapear. The only official use of this filter is for branchcache.
author Pierre-Yves David <pierre-yves.david@logilab.fr>
date Wed, 02 Jan 2013 01:57:46 +0100
parents e4687edec014
children 58ca19edc043
comparison
equal deleted inserted replaced
18244:5a3c71b0e042 18245:aff706b3a21c
6 # This software may be used and distributed according to the terms of the 6 # This software may be used and distributed according to the terms of the
7 # GNU General Public License version 2 or any later version. 7 # GNU General Public License version 2 or any later version.
8 8
9 import copy 9 import copy
10 import phases 10 import phases
11 import util
11 12
12 13
13 def computehidden(repo): 14 def computehidden(repo):
14 """compute the set of hidden revision to filter 15 """compute the set of hidden revision to filter
15 16
27 # fast path in simple case to avoid impact of non optimised code 28 # fast path in simple case to avoid impact of non optimised code
28 if phases.hassecret(repo) or repo.obsstore: 29 if phases.hassecret(repo) or repo.obsstore:
29 return frozenset(repo.revs('hidden() + secret()')) 30 return frozenset(repo.revs('hidden() + secret()'))
30 return frozenset() 31 return frozenset()
31 32
33 def computemutable(repo):
34 """compute the set of revision that should be filtered when used a server
35
36 Secret and hidden changeset should not pretend to be here."""
37 assert not repo.changelog.filteredrevs
38 # fast check to avoid revset call on huge repo
39 if util.any(repo._phasecache.phaseroots[1:]):
40 return frozenset(repo.revs('draft() + secret()'))
41 return frozenset()
42
32 # function to compute filtered set 43 # function to compute filtered set
33 filtertable = {'hidden': computehidden, 44 filtertable = {'hidden': computehidden,
34 'unserved': computeunserved} 45 'unserved': computeunserved,
46 'mutable': computemutable}
35 ### Nearest subset relation 47 ### Nearest subset relation
36 # Nearest subset of filter X is a filter Y so that: 48 # Nearest subset of filter X is a filter Y so that:
37 # * Y is included in X, 49 # * Y is included in X,
38 # * X - Y is as small as possible. 50 # * X - Y is as small as possible.
39 # This create and ordering used for branchmap purpose. 51 # This create and ordering used for branchmap purpose.
40 # the ordering may be partial 52 # the ordering may be partial
41 subsettable = {None: 'hidden', 53 subsettable = {None: 'hidden',
42 'hidden': 'unserved'} 54 'hidden': 'unserved',
55 'unserved': 'mutable'}
43 56
44 def filteredrevs(repo, filtername): 57 def filteredrevs(repo, filtername):
45 """returns set of filtered revision for this filter name""" 58 """returns set of filtered revision for this filter name"""
46 if filtername not in repo.filteredrevcache: 59 if filtername not in repo.filteredrevcache:
47 func = filtertable[filtername] 60 func = filtertable[filtername]