branchmap: update cache of 'unserved' filter on new changesets

The `commitctx` and `addchangegroup` methods of repo upgrade branchcache after
completion. This behavior aims to keep the branchcache in sync for read only
process as hgweb. See ee317dbfb9d0 for details.

Since changelog filtering is used, those calls only update the cache for unfiltered repo.
One of no interest for typical read only process like hgweb.

Note: By chance in basic case, `repo.unfiltered() == repo.filtered('unserved')`

This changesets have the "unserved" cache updated instead. I think this is the
only cache that matter for hgweb.

We could imagine updating all possible branchcaches instead but:
- I'm not sure it would have any benefit impact. It may even increase the odd of
  all cache being invalidated.
- This is more complicated change.

So I'm going for updating a single cache only which is already better that
updating a cache nobody cares about.

This changeset have a few expected impact on the testsuite are different cache
are updated.

--HG--
extra : rebase_source : ce99c3d8f0d8e5c9322c4b777356f75202e90460
destroyed: drop complex branchcache rebuilt logic

The strip code used a trick to lower the cost of branchcache update after a
strip. However is less necessary since we have branchcache collaboration.
Invalid branchcache are likely to be cheaply rebuilt again a near subset of the
repo.

Moreover, this trick would need update to be relevant in the now filtered
repository world. It currently update the unfiltered branchcache that few people
cares about. Make it smarter on that aspect would need complexes update of the
calling logic


So this mechanism is:
- Arguably needed,
- Currently irrelevant,
- Hard to update
and I'm dropping it.

We now update the branchcache in all case by courtesy of the read only reader.

This changeset have a few expected impact on the testsuite are different cache
are updated.

--HG--
extra : rebase_source : 324ad5ba3de993f37342385a8369a5829b59011a
destroyed: update `unserved` branchcache instead


Before this changesets the `destroyed` function  updated the branchcache for
unfiltered repository. As seen in a previous changeset, Read only repo does
not cares about the unfiltered repo. We now update it for `unserved`.

--HG--
extra : rebase_source : 5175c9be5963aebd2a774015fd02050e924dbf63
stream_in: write the remote branchcache for a usage as wide as possible

Writing cache for unfiltered repo only is barely useful, Most repo user are now
at least use the `hidden` filter. This changeset now assigns the remote cache
for a filter as low as possible for a wider reuse as possible.

--HG--
extra : rebase_source : ec59887cc09181f36aa0ebc0b3c9410b855aea29
test: fix in-test comments related to obsolescence

The `ui.prevent-unstable` option never made it into core. It always behaves
this way when obsolescence feature is enabled.

See changesets c5bd753c5bc6, bacf55bd8f90 and 0f5a0a2073a8 for details.

--HG--
extra : rebase_source : 470c5d72dac420aa91a45e61acf4894da7f22843
extra : amend_source : b8c4fffc211af0e4148c1b31d1a073310f724bc0
tests: more comment cleanup related to obsolescence
get-with-headers: add a --headeronly switch

In some case we do not care about the actual rendering.
hgweb: add test regarding filtering and hgweb

Since 4d1671b39168 hgweb is broken with filtering. This changeset add test that
should pass once it is fixed. Test currently broken are commented and will be
uncommented by changeset that fix them.

The filelog test is currently passing because we already have some hack in core
regarding filelog (see 518c1403838f).
hgweb: `limit` argument is actually `latestonly` renames and enforce

The `limit` argument of several generator have only two possible values in
practice: 0 and 1. We rename this parameter to `latestonly` and simplify it's
handling.

The simplification allows us to save fetching of data that we are sure to not
consume.

Having a function minimal function perimeter will helps future refactoring.
hgweb: move revnavgen into an object

For later compatibility with changelog filtering some part of the navigation
generation logic will be altered. Those altered part will be different when in
the changelog case and in the filelog case. Moving this into an object will
allow to use inheritance to override just the part of the logic we need.

The aimed logic are for example:

- generation of revision 'hex' (different logic for changelog and filelog)
- revlog emptyness test
- fetching of the first revision of a revlog (may not be 0)
hgweb: pass nodefunc to the revnav object

The issue between hgweb and filtering lay in this function. Moving it into the
object itself helps to abstract the erroneous bit.
hgweb: move hex creation into an object method

This is clearer and allow later overwrite.
hgweb: simplify the handling of empty repo

This abstraction have two advantages:

- If the revlog is empty, None of the code bellow is relevant,
  early returns seems a win.

- Abtraction of the 'emptiness' check will help later when we stop relying on
  nodefunc.

A bonus, with filtering, a non-empty revlog may not have '0' revision
accessible. It'll be easier to handle with the emptiness test in a dedicated
function
hgweb: simplify addition of "(0) navigation entry"
hgweb: introduction a filerevnav subclass

It'll be use to implement the file specific behavior.
hgweb: pass repo object to revnav construction

For compatibility with changelog filtering we need access to the changelog, a
simple nodefunc is not sufficient, only the changelog and repo have access the
filteredrevs information.

For the filerevnav version, we use an unfiltered changelog. Linkrev is currently
broken with filtering and we need some failsafe to prevent traceback. This is
the same approach as the one used in 518c1403838f. The use of
filectx.changectx() allowed the previous code to use the 518c1403838f hack.

This changeset may result in an incorrect behaviors, Navigation
link may point to missing revision. However this bad navigation
generation is much better than a plain crash
bundlerepo: fix outdated comment

Comment was made invalid by 01ee43dda681.
bundlerepo: improve performance for bundle() revset expression

Create the set of revision numbers directly instead of creating a list of nodes
first.
bundlerepo: remove unused disktiprev attribute
bundlerepo: drop bundlebase wrapper function for basemap