Mercurial > hg
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] |