def get(self, repo): service = self.request.get('service') if service: handler_cls = DEFAULT_HANDLERS.get(service) if not handler_cls: self.error(403) return self.response.headers['Content-type'] = 'application/x-%s-advertisement' % service proto = ReceivableProtocol(StringIO().read, self.response.out.write) handler = handler_cls(FileSystemBackend(), [ repo ], proto, stateless_rpc = True, advertise_refs = True) handler.proto.write_pkt_line('# service=%s\n' % service) handler.proto.write_pkt_line(None) handler.handle() else: self.response.headers['Content-type'] = 'text/plain' repo = Repo(repo) refs = repo.get_refs() for name in sorted(refs.iterkeys()): if name == 'HEAD': continue sha = refs[name] if not repo[sha]: continue self.response.out.write('%s\t%s\n' % (sha, name)) peeled_sha = repo.get_peeled(name) if peeled_sha != sha: self.response.out.write('%s\t%s^{}\n' % (peeled_sha, name))