comparison mercurial/dispatch.py @ 32379:71e735bd8170

dispatch: make request accept additional reposetups chg needs special logic around repo object creation (like, collecting and reporting repo path to the master server). Adding "reposetup" to dispatch.request seems to be an easy and reasonably clean way to allow that.
author Jun Wu <quark@fb.com>
date Sat, 29 Apr 2017 21:39:47 -0700
parents c942c83ac2ec
children 1b90036f42f0
comparison
equal deleted inserted replaced
32378:7d0c69505a66 32379:71e735bd8170
45 util, 45 util,
46 ) 46 )
47 47
48 class request(object): 48 class request(object):
49 def __init__(self, args, ui=None, repo=None, fin=None, fout=None, 49 def __init__(self, args, ui=None, repo=None, fin=None, fout=None,
50 ferr=None): 50 ferr=None, prereposetups=None):
51 self.args = args 51 self.args = args
52 self.ui = ui 52 self.ui = ui
53 self.repo = repo 53 self.repo = repo
54 54
55 # input/output/error streams 55 # input/output/error streams
56 self.fin = fin 56 self.fin = fin
57 self.fout = fout 57 self.fout = fout
58 self.ferr = ferr 58 self.ferr = ferr
59
60 # reposetups which run before extensions, useful for chg to pre-fill
61 # low-level repo state (for example, changelog) before extensions.
62 self.prereposetups = prereposetups or []
59 63
60 def _runexithandlers(self): 64 def _runexithandlers(self):
61 exc = None 65 exc = None
62 handlers = self.ui._exithandlers 66 handlers = self.ui._exithandlers
63 try: 67 try:
873 repo.ui.fin = ui.fin 877 repo.ui.fin = ui.fin
874 repo.ui.fout = ui.fout 878 repo.ui.fout = ui.fout
875 repo.ui.ferr = ui.ferr 879 repo.ui.ferr = ui.ferr
876 else: 880 else:
877 try: 881 try:
878 repo = hg.repository(ui, path=path) 882 repo = hg.repository(ui, path=path,
883 presetupfuncs=req.prereposetups)
879 if not repo.local(): 884 if not repo.local():
880 raise error.Abort(_("repository '%s' is not local") 885 raise error.Abort(_("repository '%s' is not local")
881 % path) 886 % path)
882 repo.ui.setconfig("bundle", "mainreporoot", repo.root, 887 repo.ui.setconfig("bundle", "mainreporoot", repo.root,
883 'repo') 888 'repo')