mercurial/repoview.py
changeset 32590 c777dac2b27c
parent 32589 306bba74c56e
child 32591 2af0b9a02bf9
equal deleted inserted replaced
32589:306bba74c56e 32590:c777dac2b27c
    42     if tags:
    42     if tags:
    43         rev, nodemap = cl.rev, cl.nodemap
    43         rev, nodemap = cl.rev, cl.nodemap
    44         pinned.update(rev(t[0]) for t in tags.values() if t[0] in nodemap)
    44         pinned.update(rev(t[0]) for t in tags.values() if t[0] in nodemap)
    45     return pinned
    45     return pinned
    46 
    46 
    47 def _consistencyblocker(pfunc, hideable, revs):
       
    48     """return non-hideable changeset blocking hideable one
       
    49 
       
    50     For consistency, we cannot actually hide a changeset if one of it children
       
    51     are visible, this function find such children.
       
    52     """
       
    53     blockers = set()
       
    54     for r in revs:
       
    55         for p in pfunc(r):
       
    56             if p != nullrev and p in hideable:
       
    57                 blockers.add(r)
       
    58                 break
       
    59     return blockers
       
    60 
    47 
    61 def _revealancestors(pfunc, hidden, revs):
    48 def _revealancestors(pfunc, hidden, revs):
    62     """reveals contiguous chains of hidden ancestors of 'revs' by removing them
    49     """reveals contiguous chains of hidden ancestors of 'revs' by removing them
    63     from 'hidden'
    50     from 'hidden'
    64 
    51 
    87     if hidden:
    74     if hidden:
    88         pfunc = repo.changelog.parentrevs
    75         pfunc = repo.changelog.parentrevs
    89         mutablephases = (phases.draft, phases.secret)
    76         mutablephases = (phases.draft, phases.secret)
    90         mutable = repo._phasecache.getrevset(repo, mutablephases)
    77         mutable = repo._phasecache.getrevset(repo, mutablephases)
    91 
    78 
    92         visible = mutable - hidden
    79         visible = set(mutable - hidden)
    93         blockers = _consistencyblocker(pfunc, hidden, visible)
    80         visible |= (hidden & pinnedrevs(repo))
    94 
    81         if visible:
    95         # check if we have wd parents, bookmarks or tags pointing to hidden
       
    96         # changesets and remove those.
       
    97         blockers |= (hidden & pinnedrevs(repo))
       
    98         if blockers:
       
    99             # don't modify possibly cached result of hideablerevs()
    82             # don't modify possibly cached result of hideablerevs()
   100             hidden = hidden.copy()
    83             hidden = hidden.copy()
   101             _revealancestors(pfunc, hidden, blockers)
    84             _revealancestors(pfunc, hidden, visible)
   102     return frozenset(hidden)
    85     return frozenset(hidden)
   103 
    86 
   104 def computeunserved(repo):
    87 def computeunserved(repo):
   105     """compute the set of revision that should be filtered when used a server
    88     """compute the set of revision that should be filtered when used a server
   106 
    89