140 # write log on a special 'd' (debug) channel |
140 # write log on a special 'd' (debug) channel |
141 logfile = channeledoutput(sys.stdout, sys.stdout, 'd') |
141 logfile = channeledoutput(sys.stdout, sys.stdout, 'd') |
142 else: |
142 else: |
143 logfile = open(logpath, 'a') |
143 logfile = open(logpath, 'a') |
144 |
144 |
145 # the ui here is really the repo ui so take its baseui so we don't end |
145 if repo: |
146 # up with its local configuration |
146 # the ui here is really the repo ui so take its baseui so we don't |
147 self.ui = repo.baseui |
147 # end up with its local configuration |
148 self.repo = repo |
148 self.ui = repo.baseui |
149 self.repoui = repo.ui |
149 self.repo = repo |
|
150 self.repoui = repo.ui |
|
151 else: |
|
152 self.ui = ui |
|
153 self.repo = self.repoui = None |
150 |
154 |
151 if mode == 'pipe': |
155 if mode == 'pipe': |
152 self.cerr = channeledoutput(sys.stderr, sys.stdout, 'e') |
156 self.cerr = channeledoutput(sys.stderr, sys.stdout, 'e') |
153 self.cout = channeledoutput(sys.stdout, sys.stdout, 'o') |
157 self.cout = channeledoutput(sys.stdout, sys.stdout, 'o') |
154 self.cin = channeledinput(sys.stdin, sys.stdout, 'I') |
158 self.cin = channeledinput(sys.stdin, sys.stdout, 'I') |
181 args = self._read(length).split('\0') |
185 args = self._read(length).split('\0') |
182 |
186 |
183 # copy the uis so changes (e.g. --config or --verbose) don't |
187 # copy the uis so changes (e.g. --config or --verbose) don't |
184 # persist between requests |
188 # persist between requests |
185 copiedui = self.ui.copy() |
189 copiedui = self.ui.copy() |
186 self.repo.baseui = copiedui |
190 if self.repo: |
187 # clone ui without using ui.copy because this is protected |
191 self.repo.baseui = copiedui |
188 repoui = self.repoui.__class__(self.repoui) |
192 # clone ui without using ui.copy because this is protected |
189 repoui.copy = copiedui.copy # redo copy protection |
193 repoui = self.repoui.__class__(self.repoui) |
190 self.repo.ui = self.repo.dirstate._ui = repoui |
194 repoui.copy = copiedui.copy # redo copy protection |
191 self.repo.invalidateall() |
195 self.repo.ui = self.repo.dirstate._ui = repoui |
|
196 self.repo.invalidateall() |
192 |
197 |
193 req = dispatch.request(args[:], copiedui, self.repo, self.cin, |
198 req = dispatch.request(args[:], copiedui, self.repo, self.cin, |
194 self.cout, self.cerr) |
199 self.cout, self.cerr) |
195 |
200 |
196 ret = (dispatch.dispatch(req) or 0) & 255 # might return None |
201 ret = (dispatch.dispatch(req) or 0) & 255 # might return None |