Mercurial > hg
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') |