# HG changeset patch # User Pierre-Yves David # Date 1496792892 -3600 # Node ID ecd47c63b6de0295618625bbb56e86402ca196e0 # Parent d8a48234efad3856d970a5328976f85f54f926c3 obshashrange: add an option to protect from accidental activation The new 'obshashrange.max-revs' option is meant to help large installation like bitbucket to avoid impact on repositories that cannot handle it. diff -r d8a48234efad -r ecd47c63b6de README --- a/README Wed Jun 07 00:12:08 2017 +0100 +++ b/README Wed Jun 07 00:48:12 2017 +0100 @@ -125,6 +125,7 @@ ------------------- - effect flag: fix a small bug related to hidden changeset, + - obshashrange: install a '.max-revs' option see extension help for details 6.3.1 -- 2017-06-01 ------------------- diff -r d8a48234efad -r ecd47c63b6de hgext3rd/evolve/__init__.py --- a/hgext3rd/evolve/__init__.py Wed Jun 07 00:12:08 2017 +0100 +++ b/hgext3rd/evolve/__init__.py Wed Jun 07 00:48:12 2017 +0100 @@ -90,6 +90,12 @@ # restrict cache size to reduce memory consumption obshashrange.lru-size = 2000 # default is 2000 + # automatically disable obshashrange related computation and capabilities + # if the repository has more than N revisions. This is meant to help large + # server deployement to enable the feature on smaller repositories while + # ensuring no large repository will get affected. + obshashrange.max-revs = 100000 # default is None + Effect Flag Experiment ====================== diff -r d8a48234efad -r ecd47c63b6de hgext3rd/evolve/obsdiscovery.py --- a/hgext3rd/evolve/obsdiscovery.py Wed Jun 07 00:12:08 2017 +0100 +++ b/hgext3rd/evolve/obsdiscovery.py Wed Jun 07 00:48:12 2017 +0100 @@ -586,8 +586,7 @@ repo = reporef() if repo is None: return - hasobshashrange = repo.ui.configbool('experimental', - 'obshashrange', False) + hasobshashrange = _useobshashrange(repo) hascachewarm = repo.ui.configbool('experimental', 'obshashrange.warm-cache', True) @@ -665,15 +664,22 @@ hashes = _obshashrange_v0(repo, ranges) return wireproto.encodelist(hashes) +def _useobshashrange(repo): + base = repo.ui.configbool('experimental', 'obshashrange', False) + if base: + maxrevs = repo.ui.configint('experimental', 'obshashrange.max-revs', None) + if maxrevs is not None and maxrevs < len(repo.unfiltered()): + base = False + return base def _canobshashrange(local, remote): - return (local.ui.configbool('experimental', 'obshashrange', False) + return (_useobshashrange(local) and remote.capable('_evoext_obshashrange_v0')) def _obshashrange_capabilities(orig, repo, proto): """wrapper to advertise new capability""" caps = orig(repo, proto) - enabled = repo.ui.configbool('experimental', 'obshashrange', False) + enabled = _useobshashrange(repo) if obsolete.isenabled(repo, obsolete.exchangeopt) and enabled: caps = caps.split() caps.append('_evoext_obshashrange_v0') diff -r d8a48234efad -r ecd47c63b6de hgext3rd/evolve/stablerange.py --- a/hgext3rd/evolve/stablerange.py Wed Jun 07 00:12:08 2017 +0100 +++ b/hgext3rd/evolve/stablerange.py Wed Jun 07 00:48:12 2017 +0100 @@ -948,6 +948,9 @@ if not repo.ui.configbool('experimental', 'obshashrange.warm-cache', True): return tr + maxrevs = self.ui.configint('experimental', 'obshashrange.max-revs', None) + if maxrevs is not None and maxrevs < len(self.unfiltered()): + return tr reporef = weakref.ref(self) def _warmcache(tr): diff -r d8a48234efad -r ecd47c63b6de tests/test-discovery-obshashrange.t --- a/tests/test-discovery-obshashrange.t Wed Jun 07 00:12:08 2017 +0100 +++ b/tests/test-discovery-obshashrange.t Wed Jun 07 00:48:12 2017 +0100 @@ -74,7 +74,7 @@ $ hg debugobsolete aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa `getid 'desc(r1)'` - $ hg debugobsolete bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb `getid 'desc(r2)'` + $ hg debugobsolete bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb `getid 'desc(r2)'` --config experimental.obshashrange.max-revs=1 $ hg debugobsolete cccccccccccccccccccccccccccccccccccccccc `getid 'desc(r4)'` $ hg debugobsolete dddddddddddddddddddddddddddddddddddddddd `getid 'desc(r5)'` --config experimental.obshashrange.warm-cache=0 $ hg debugobsolete eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee `getid 'desc(r7)'` @@ -97,14 +97,12 @@ * @0000000000000000000000000000000000000000 (*)> debugobsolete aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 66f7d451a68b85ed82ff5fcc254daf50c74144bd exited 0 after *.?? seconds (glob) * @0000000000000000000000000000000000000000 (*)> debugobsolete bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb 01241442b3c2bf3211e593b549c655ea65b295e3 (glob) * @0000000000000000000000000000000000000000 (*)> alias 'debugobsolete' expands to 'debugobsolete -d '0 0'' (glob) - * @0000000000000000000000000000000000000000 (*)> obshashcache reset - new markers affect cached ranges (glob) - * @0000000000000000000000000000000000000000 (*)> updated evo-ext-obshashrange in *.???? seconds (0r, 1o) (glob) * @0000000000000000000000000000000000000000 (*)> updated evo-ext-obscache in *.???? seconds (0r, 1o) (glob) - * @0000000000000000000000000000000000000000 (*)> debugobsolete bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb 01241442b3c2bf3211e593b549c655ea65b295e3 exited 0 after *.?? seconds (glob) + * @0000000000000000000000000000000000000000 (*)> debugobsolete bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb 01241442b3c2bf3211e593b549c655ea65b295e3 --config 'experimental.obshashrange.max-revs=1' exited 0 after *.?? seconds (glob) * @0000000000000000000000000000000000000000 (*)> debugobsolete cccccccccccccccccccccccccccccccccccccccc bebd167eb94d257ace0e814aeb98e6972ed2970d (glob) * @0000000000000000000000000000000000000000 (*)> alias 'debugobsolete' expands to 'debugobsolete -d '0 0'' (glob) * @0000000000000000000000000000000000000000 (*)> obshashcache reset - new markers affect cached ranges (glob) - * @0000000000000000000000000000000000000000 (*)> updated evo-ext-obshashrange in *.???? seconds (0r, 1o) (glob) + * @0000000000000000000000000000000000000000 (*)> updated evo-ext-obshashrange in *.???? seconds (0r, 2o) (glob) * @0000000000000000000000000000000000000000 (*)> updated evo-ext-obscache in *.???? seconds (0r, 1o) (glob) * @0000000000000000000000000000000000000000 (*)> debugobsolete cccccccccccccccccccccccccccccccccccccccc bebd167eb94d257ace0e814aeb98e6972ed2970d exited 0 after *.?? seconds (glob) * @0000000000000000000000000000000000000000 (*)> debugobsolete dddddddddddddddddddddddddddddddddddddddd c8d03c1b5e94af74b772900c58259d2e08917735 (glob)