comparison mercurial/localrepo.py @ 46794:e2f7b2695ba1

merge with stable
author Matt Harbison <matt_harbison@yahoo.com>
date Thu, 18 Mar 2021 18:24:59 -0400
parents 6266d19556ad 86b47ec1960a
children d4ba4d51f85f
comparison
equal deleted inserted replaced
46782:6b52cffd8d0a 46794:e2f7b2695ba1
2334 if desc != b'strip' and shouldtracktags: 2334 if desc != b'strip' and shouldtracktags:
2335 oldheads = self.changelog.headrevs() 2335 oldheads = self.changelog.headrevs()
2336 2336
2337 def tracktags(tr2): 2337 def tracktags(tr2):
2338 repo = reporef() 2338 repo = reporef()
2339 assert repo is not None # help pytype
2339 oldfnodes = tagsmod.fnoderevs(repo.ui, repo, oldheads) 2340 oldfnodes = tagsmod.fnoderevs(repo.ui, repo, oldheads)
2340 newheads = repo.changelog.headrevs() 2341 newheads = repo.changelog.headrevs()
2341 newfnodes = tagsmod.fnoderevs(repo.ui, repo, newheads) 2342 newfnodes = tagsmod.fnoderevs(repo.ui, repo, newheads)
2342 # notes: we compare lists here. 2343 # notes: we compare lists here.
2343 # As we do it only once buiding set would not be cheaper 2344 # As we do it only once buiding set would not be cheaper
2370 # 2371 #
2371 # This will have to be fixed before we remove the experimental 2372 # This will have to be fixed before we remove the experimental
2372 # gating. 2373 # gating.
2373 tracktags(tr2) 2374 tracktags(tr2)
2374 repo = reporef() 2375 repo = reporef()
2376 assert repo is not None # help pytype
2375 2377
2376 singleheadopt = (b'experimental', b'single-head-per-branch') 2378 singleheadopt = (b'experimental', b'single-head-per-branch')
2377 singlehead = repo.ui.configbool(*singleheadopt) 2379 singlehead = repo.ui.configbool(*singleheadopt)
2378 if singlehead: 2380 if singlehead:
2379 singleheadsub = repo.ui.configsuboptions(*singleheadopt)[1] 2381 singleheadsub = repo.ui.configsuboptions(*singleheadopt)[1]
2473 # fixes the function accumulation. 2475 # fixes the function accumulation.
2474 hookargs = tr2.hookargs 2476 hookargs = tr2.hookargs
2475 2477
2476 def hookfunc(unused_success): 2478 def hookfunc(unused_success):
2477 repo = reporef() 2479 repo = reporef()
2480 assert repo is not None # help pytype
2481
2478 if hook.hashook(repo.ui, b'txnclose-bookmark'): 2482 if hook.hashook(repo.ui, b'txnclose-bookmark'):
2479 bmchanges = sorted(tr.changes[b'bookmarks'].items()) 2483 bmchanges = sorted(tr.changes[b'bookmarks'].items())
2480 for name, (old, new) in bmchanges: 2484 for name, (old, new) in bmchanges:
2481 args = tr.hookargs.copy() 2485 args = tr.hookargs.copy()
2482 args.update(bookmarks.preparehookargs(name, old, new)) 2486 args.update(bookmarks.preparehookargs(name, old, new))
2504 2508
2505 repo.hook( 2509 repo.hook(
2506 b'txnclose', throw=False, **pycompat.strkwargs(hookargs) 2510 b'txnclose', throw=False, **pycompat.strkwargs(hookargs)
2507 ) 2511 )
2508 2512
2509 reporef()._afterlock(hookfunc) 2513 repo = reporef()
2514 assert repo is not None # help pytype
2515 repo._afterlock(hookfunc)
2510 2516
2511 tr.addfinalize(b'txnclose-hook', txnclosehook) 2517 tr.addfinalize(b'txnclose-hook', txnclosehook)
2512 # Include a leading "-" to make it happen before the transaction summary 2518 # Include a leading "-" to make it happen before the transaction summary
2513 # reports registered via scmutil.registersummarycallback() whose names 2519 # reports registered via scmutil.registersummarycallback() whose names
2514 # are 00-txnreport etc. That way, the caches will be warm when the 2520 # are 00-txnreport etc. That way, the caches will be warm when the
2515 # callbacks run. 2521 # callbacks run.
2516 tr.addpostclose(b'-warm-cache', self._buildcacheupdater(tr)) 2522 tr.addpostclose(b'-warm-cache', self._buildcacheupdater(tr))
2517 2523
2518 def txnaborthook(tr2): 2524 def txnaborthook(tr2):
2519 """To be run if transaction is aborted""" 2525 """To be run if transaction is aborted"""
2520 reporef().hook( 2526 repo = reporef()
2527 assert repo is not None # help pytype
2528 repo.hook(
2521 b'txnabort', throw=False, **pycompat.strkwargs(tr2.hookargs) 2529 b'txnabort', throw=False, **pycompat.strkwargs(tr2.hookargs)
2522 ) 2530 )
2523 2531
2524 tr.addabort(b'txnabort-hook', txnaborthook) 2532 tr.addabort(b'txnabort-hook', txnaborthook)
2525 # avoid eager cache invalidation. in-memory data should be identical 2533 # avoid eager cache invalidation. in-memory data should be identical
2698 # we must avoid cyclic reference between repo and transaction. 2706 # we must avoid cyclic reference between repo and transaction.
2699 reporef = weakref.ref(self) 2707 reporef = weakref.ref(self)
2700 2708
2701 def updater(tr): 2709 def updater(tr):
2702 repo = reporef() 2710 repo = reporef()
2711 assert repo is not None # help pytype
2703 repo.updatecaches(tr) 2712 repo.updatecaches(tr)
2704 2713
2705 return updater 2714 return updater
2706 2715
2707 @unfilteredmethod 2716 @unfilteredmethod
2913 2922
2914 Use this before modifying files in .hg. 2923 Use this before modifying files in .hg.
2915 2924
2916 If both 'lock' and 'wlock' must be acquired, ensure you always acquires 2925 If both 'lock' and 'wlock' must be acquired, ensure you always acquires
2917 'wlock' first to avoid a dead-lock hazard.""" 2926 'wlock' first to avoid a dead-lock hazard."""
2918 l = self._wlockref and self._wlockref() 2927 l = self._wlockref() if self._wlockref else None
2919 if l is not None and l.held: 2928 if l is not None and l.held:
2920 l.lock() 2929 l.lock()
2921 return l 2930 return l
2922 2931
2923 # We do not need to check for non-waiting lock acquisition. Such 2932 # We do not need to check for non-waiting lock acquisition. Such