def repository_tree(request, id, slug, branch, path, template_name='gitweb/repository_tree.html'): try: repository = Repository.objects.visible_repositories_for_user(request.user).get(pk=id) except Repository.DoesNotExist: raise Http404 tree = repository.repo().tree(branch) for element in path.split('/'): if len(element): tree = tree/element if hasattr(tree, 'mime_type'): is_blob = True else: is_blob = False tree = [{'path': os.path.join(path, e.name), 'e': e, 'human_size': human_filesize(getattr(e, 'size', 0))} for e in tree.values()] template_context = { 'repository': repository, 'branch': branch, 'path': os.path.join('/', path), 'prev_path': '/'.join(path.split('/')[0:-1]), 'tree': tree, 'is_blob': is_blob, } if is_blob: template_context.update({ 'blob_human_size': human_filesize(tree.size), 'blob_lines': range(len(tree.data.splitlines())), 'blob_pygmentized': pygmentize(tree.mime_type, tree.data), }) return render_to_response( template_name, template_context, RequestContext(request) )
def pygmentize_diff(blob): try: return pygmentize('diff', blob) except: return blob