Exemple #1
0
	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))