mercurial/sshserver.py
changeset 3446 0b450267cf47
parent 3215 53e843840349
child 3447 ef1032c223e7
equal deleted inserted replaced
3445:233c733e4af5 3446:0b450267cf47
    46             impl = getattr(self, 'do_' + cmd, None)
    46             impl = getattr(self, 'do_' + cmd, None)
    47             if impl: impl()
    47             if impl: impl()
    48             else: self.respond("")
    48             else: self.respond("")
    49         return cmd != ''
    49         return cmd != ''
    50 
    50 
       
    51     def do_lookup(self):
       
    52         arg, key = self.getarg()
       
    53         assert arg == 'key'
       
    54         self.respond(hex(self.repo.lookup(key)) + "\n")
       
    55 
    51     def do_heads(self):
    56     def do_heads(self):
    52         h = self.repo.heads()
    57         h = self.repo.heads()
    53         self.respond(" ".join(map(hex, h)) + "\n")
    58         self.respond(" ".join(map(hex, h)) + "\n")
    54 
    59 
    55     def do_hello(self):
    60     def do_hello(self):
    59         consists of a line in the form:
    64         consists of a line in the form:
    60 
    65 
    61         capabilities: space separated list of tokens
    66         capabilities: space separated list of tokens
    62         '''
    67         '''
    63 
    68 
    64         caps = ['unbundle']
    69         caps = ['unbundle', 'lookup', 'changegroupsubset']
    65         if self.ui.configbool('server', 'uncompressed'):
    70         if self.ui.configbool('server', 'uncompressed'):
    66             caps.append('stream=%d' % self.repo.revlogversion)
    71             caps.append('stream=%d' % self.repo.revlogversion)
    67         self.respond("capabilities: %s\n" % (' '.join(caps),))
    72         self.respond("capabilities: %s\n" % (' '.join(caps),))
    68 
    73 
    69     def do_lock(self):
    74     def do_lock(self):
   100         nodes = []
   105         nodes = []
   101         arg, roots = self.getarg()
   106         arg, roots = self.getarg()
   102         nodes = map(bin, roots.split(" "))
   107         nodes = map(bin, roots.split(" "))
   103 
   108 
   104         cg = self.repo.changegroup(nodes, 'serve')
   109         cg = self.repo.changegroup(nodes, 'serve')
       
   110         while True:
       
   111             d = cg.read(4096)
       
   112             if not d:
       
   113                 break
       
   114             self.fout.write(d)
       
   115 
       
   116         self.fout.flush()
       
   117 
       
   118     def do_changegroupsubset(self):
       
   119         bases = []
       
   120         heads = []
       
   121         argmap = dict([self.getarg(), self.getarg()])
       
   122         bases = [bin(n) for n in argmap['bases'].split(' ')]
       
   123         heads = [bin(n) for n in argmap['heads'].split(' ')]
       
   124 
       
   125         cg = self.repo.changegroupsubset(bases, heads, 'serve')
   105         while True:
   126         while True:
   106             d = cg.read(4096)
   127             d = cg.read(4096)
   107             if not d:
   128             if not d:
   108                 break
   129                 break
   109             self.fout.write(d)
   130             self.fout.write(d)