mercurial/wireprotoserver.py
changeset 35910 f1efc0caeab7
parent 35909 c9faf3a2eef1
child 35911 49ea1ba15ffd
equal deleted inserted replaced
35909:c9faf3a2eef1 35910:f1efc0caeab7
   246         return []
   246         return []
   247     raise error.ProgrammingError('hgweb.protocol internal failure', rsp)
   247     raise error.ProgrammingError('hgweb.protocol internal failure', rsp)
   248 
   248 
   249 class sshserver(abstractserverproto):
   249 class sshserver(abstractserverproto):
   250     def __init__(self, ui, repo):
   250     def __init__(self, ui, repo):
   251         self.ui = ui
   251         self._ui = ui
   252         self.repo = repo
   252         self._repo = repo
   253         self.fin = ui.fin
   253         self._fin = ui.fin
   254         self.fout = ui.fout
   254         self._fout = ui.fout
   255         self.name = 'ssh'
   255         self.name = 'ssh'
   256 
   256 
   257         hook.redirect(True)
   257         hook.redirect(True)
   258         ui.fout = repo.ui.fout = ui.ferr
   258         ui.fout = repo.ui.fout = ui.ferr
   259 
   259 
   260         # Prevent insertion/deletion of CRs
   260         # Prevent insertion/deletion of CRs
   261         util.setbinary(self.fin)
   261         util.setbinary(self._fin)
   262         util.setbinary(self.fout)
   262         util.setbinary(self._fout)
   263 
   263 
   264     def getargs(self, args):
   264     def getargs(self, args):
   265         data = {}
   265         data = {}
   266         keys = args.split()
   266         keys = args.split()
   267         for n in xrange(len(keys)):
   267         for n in xrange(len(keys)):
   268             argline = self.fin.readline()[:-1]
   268             argline = self._fin.readline()[:-1]
   269             arg, l = argline.split()
   269             arg, l = argline.split()
   270             if arg not in keys:
   270             if arg not in keys:
   271                 raise error.Abort(_("unexpected parameter %r") % arg)
   271                 raise error.Abort(_("unexpected parameter %r") % arg)
   272             if arg == '*':
   272             if arg == '*':
   273                 star = {}
   273                 star = {}
   274                 for k in xrange(int(l)):
   274                 for k in xrange(int(l)):
   275                     argline = self.fin.readline()[:-1]
   275                     argline = self._fin.readline()[:-1]
   276                     arg, l = argline.split()
   276                     arg, l = argline.split()
   277                     val = self.fin.read(int(l))
   277                     val = self._fin.read(int(l))
   278                     star[arg] = val
   278                     star[arg] = val
   279                 data['*'] = star
   279                 data['*'] = star
   280             else:
   280             else:
   281                 val = self.fin.read(int(l))
   281                 val = self._fin.read(int(l))
   282                 data[arg] = val
   282                 data[arg] = val
   283         return [data[k] for k in keys]
   283         return [data[k] for k in keys]
   284 
   284 
   285     def getfile(self, fpout):
   285     def getfile(self, fpout):
   286         self.sendresponse('')
   286         self.sendresponse('')
   287         count = int(self.fin.readline())
   287         count = int(self._fin.readline())
   288         while count:
   288         while count:
   289             fpout.write(self.fin.read(count))
   289             fpout.write(self._fin.read(count))
   290             count = int(self.fin.readline())
   290             count = int(self._fin.readline())
   291 
   291 
   292     def redirect(self):
   292     def redirect(self):
   293         pass
   293         pass
   294 
   294 
   295     def sendresponse(self, v):
   295     def sendresponse(self, v):
   296         self.fout.write("%d\n" % len(v))
   296         self._fout.write("%d\n" % len(v))
   297         self.fout.write(v)
   297         self._fout.write(v)
   298         self.fout.flush()
   298         self._fout.flush()
   299 
   299 
   300     def sendstream(self, source):
   300     def sendstream(self, source):
   301         write = self.fout.write
   301         write = self._fout.write
   302         for chunk in source.gen:
   302         for chunk in source.gen:
   303             write(chunk)
   303             write(chunk)
   304         self.fout.flush()
   304         self._fout.flush()
   305 
   305 
   306     def sendpushresponse(self, rsp):
   306     def sendpushresponse(self, rsp):
   307         self.sendresponse('')
   307         self.sendresponse('')
   308         self.sendresponse(str(rsp.res))
   308         self.sendresponse(str(rsp.res))
   309 
   309 
   310     def sendpusherror(self, rsp):
   310     def sendpusherror(self, rsp):
   311         self.sendresponse(rsp.res)
   311         self.sendresponse(rsp.res)
   312 
   312 
   313     def sendooberror(self, rsp):
   313     def sendooberror(self, rsp):
   314         self.ui.ferr.write('%s\n-\n' % rsp.message)
   314         self._ui.ferr.write('%s\n-\n' % rsp.message)
   315         self.ui.ferr.flush()
   315         self._ui.ferr.flush()
   316         self.fout.write('\n')
   316         self._fout.write('\n')
   317         self.fout.flush()
   317         self._fout.flush()
   318 
   318 
   319     def serve_forever(self):
   319     def serve_forever(self):
   320         while self.serve_one():
   320         while self.serve_one():
   321             pass
   321             pass
   322         sys.exit(0)
   322         sys.exit(0)
   329         wireproto.pusherr: sendpusherror,
   329         wireproto.pusherr: sendpusherror,
   330         wireproto.ooberror: sendooberror,
   330         wireproto.ooberror: sendooberror,
   331     }
   331     }
   332 
   332 
   333     def serve_one(self):
   333     def serve_one(self):
   334         cmd = self.fin.readline()[:-1]
   334         cmd = self._fin.readline()[:-1]
   335         if cmd and cmd in wireproto.commands:
   335         if cmd and cmd in wireproto.commands:
   336             rsp = wireproto.dispatch(self.repo, self, cmd)
   336             rsp = wireproto.dispatch(self._repo, self, cmd)
   337             self.handlers[rsp.__class__](self, rsp)
   337             self.handlers[rsp.__class__](self, rsp)
   338         elif cmd:
   338         elif cmd:
   339             self.sendresponse("")
   339             self.sendresponse("")
   340         return cmd != ''
   340         return cmd != ''
   341 
   341