525 |
525 |
526 class sshserver: |
526 class sshserver: |
527 def __init__(self, ui, repo, logfh=None, accesshidden=False): |
527 def __init__(self, ui, repo, logfh=None, accesshidden=False): |
528 self._ui = ui |
528 self._ui = ui |
529 self._repo = repo |
529 self._repo = repo |
530 self._fin, self._fout = ui.protectfinout() |
|
531 self._accesshidden = accesshidden |
530 self._accesshidden = accesshidden |
532 |
531 self._logfh = logfh |
533 # Log write I/O to stdout and stderr if configured. |
|
534 if logfh: |
|
535 self._fout = util.makeloggingfileobject( |
|
536 logfh, self._fout, b'o', logdata=True |
|
537 ) |
|
538 ui.ferr = util.makeloggingfileobject( |
|
539 logfh, ui.ferr, b'e', logdata=True |
|
540 ) |
|
541 |
532 |
542 def serve_forever(self): |
533 def serve_forever(self): |
543 self.serveuntil(threading.Event()) |
534 self.serveuntil(threading.Event()) |
544 self._ui.restorefinout(self._fin, self._fout) |
|
545 |
535 |
546 def serveuntil(self, ev): |
536 def serveuntil(self, ev): |
547 """Serve until a threading.Event is set.""" |
537 """Serve until a threading.Event is set.""" |
548 _runsshserver( |
538 with self._ui.protectedfinout() as (fin, fout): |
549 self._ui, self._repo, self._fin, self._fout, ev, self._accesshidden |
539 if self._logfh: |
550 ) |
540 # Log write I/O to stdout and stderr if configured. |
|
541 fout = util.makeloggingfileobject( |
|
542 self._logfh, |
|
543 fout, |
|
544 b'o', |
|
545 logdata=True, |
|
546 ) |
|
547 self._ui.ferr = util.makeloggingfileobject( |
|
548 self._logfh, |
|
549 self._ui.ferr, |
|
550 b'e', |
|
551 logdata=True, |
|
552 ) |
|
553 _runsshserver( |
|
554 self._ui, |
|
555 self._repo, |
|
556 fin, |
|
557 fout, |
|
558 ev, |
|
559 self._accesshidden, |
|
560 ) |