~edwargix/git.sr.ht

347c6134807f5849716f12d628aa914cca3267d3 — Drew DeVault 6 years ago f8e178b
Add refs page
M gitsrht/blueprints/repo.py => gitsrht/blueprints/repo.py +46 -1
@@ 194,7 194,7 @@ def archive(owner, repo, ref):
            "--git-dir", repo.path,
            "archive",
            "--format=tar.gz",
            "--prefix", f"{repo.name}-{ref}"
            "--prefix", f"{repo.name}-{ref}",
            "-o", path, ref
        ]
        print(args)


@@ 327,3 327,48 @@ def patch(owner, repo, ref):
        print(subp.stdout, subp.stderr)
        return "Error preparing patch", 500
    return Response(subp.stdout, mimetype='text/plain')

@repo.route("/<owner>/<repo>/refs")
def refs(owner, repo):
    owner, repo = get_repo(owner, repo)
    if not repo:
        abort(404)
    if not has_access(repo, UserAccess.read):
        abort(401)
    git_repo = CachedRepository(repo.path)
    tags = [(
            ref,
            git_repo.get(git_repo.references[ref].target)
        ) for ref in git_repo.references if ref.startswith("refs/tags/")]
    def _tag_key(tag):
        if isinstance(tag[1], pygit2.Commit):
            return tag[1].commit_time
        return tag[1].tagger.time
    tags = sorted(tags, key=_tag_key, reverse=True)
    branches = [(
            branch,
            git_repo.branches[branch],
            git_repo.get(git_repo.branches[branch].target)
        ) for branch in git_repo.branches]
    branches = sorted(branches, key=lambda b: b[2].commit_time, reverse=True)

    results_per_page = 10
    page = request.args.get("page")
    total_results = len(tags)
    total_pages = total_results // results_per_page + 1
    if total_results % results_per_page == 0:
        total_pages -= 1
    if page is not None:
        try:
            page = int(page) - 1
            tags = tags[page*results_per_page:page*results_per_page+results_per_page]
        except:
            page = 0
    else:
        page = 0
        tags = tags[:results_per_page]

    return render_template("refs.html", view="refs",
            owner=owner, repo=repo, tags=tags, branches=branches,
            git_repo=git_repo, isinstance=isinstance, pygit2=pygit2,
            page=page + 1, total_pages=total_pages)

A gitsrht/templates/refs.html => gitsrht/templates/refs.html +77 -0
@@ 0,0 1,77 @@
{% extends "repo.html" %}
{% import "utils.html" as utils %}
{% block title %}
<title>{{repo.owner.canonical_name}}/{{repo.name}} refs - {{cfg("sr.ht", "site-name")}} git</title>
{% endblock %}
{% block content %}
<div class="container">
  <div class="row">
    <div class="col-md-8">
      <div class="event-list">
        {% for tag in tags %}
        {% set ref = tag[0] %}
        {% set tag = tag[1] %}
        {% if isinstance(tag, pygit2.Commit) %}
        {% set commit = tag %}
        {% else %}
        {% set commit = git_repo.get(tag.target) %}
        {% endif %}
        <div class="event">
          <h4 style="margin-bottom: 0.5rem">
            {% if isinstance(tag, pygit2.Commit) %}
              {{ref[len("refs/tags/"):]}}
            {% else %}
            <a href="#">
              {{tag.name}}
            </a>
            {% endif %}
            <small class="pull-right text-muted">
              {{commit_time(tag) | date}}
              <a
                style="margin-left: 0.5rem"
                href="{{url_for("repo.archive",
                  owner=repo.owner.canonical_name,
                  repo=repo.name, ref=tag.name)}}"
              >.tar.gz {{icon("caret-right")}}</a>
              <a
                style="margin-left: 0.5rem"
                href="{{url_for("repo.tree",
                  owner=repo.owner.canonical_name,
                  repo=repo.name, ref=tag.name)}}"
              >browse {{icon("caret-right")}}</a>
            </small>
          </h4>
          {% if tag.message %}
          <pre style="padding-bottom: 0;">{{tag.message}}</pre>
          {% endif %}
        </div>
        {% endfor %}
        {{ pagination() }}
      </div>
    </div>
    <div class="col-md-4">
      <h3>Branches</h3>
      <div class="event-list">
        {% for branch in branches %}
        {% set name = branch[0] %}
        {% set commit = branch[2] %}
        {% set branch = branch[1] %}
        <div class="event">
          {{name}}
          {{ utils.commit_event(repo, commit, commit_time,
            trim_commit, skip_body=True) }}
          <a
            href="{{url_for("repo.tree",
              owner=repo.owner.canonical_name,
              repo=repo.name, ref=name)}}"
            class="btn btn-block {{ "btn-primary"
                if branch.name == git_repo.default_branch().name
                else "btn-default" }}"
          >browse {{icon("caret-right")}}</a>
        </div>
        {% endfor %}
      </div>
    </div>
  </div>
</div>
{% endblock %}

M gitsrht/templates/repo.html => gitsrht/templates/repo.html +3 -1
@@ 31,7 31,9 @@
            repo=repo.name), "log")}}
        </li>
        <li class="nav-item">
          <a class="nav-link" href="#">refs</a>
          {{link(url_for("repo.refs",
            owner=repo.owner.canonical_name,
            repo=repo.name), "refs")}}
        </li>
        <li class="nav-item">
          {{link(url_for("manage.settings_info",

M gitsrht/templates/utils.html => gitsrht/templates/utils.html +3 -1
@@ 20,7 20,7 @@ endif %}{% endfor %}
{% macro commit_event(
  repo, c, commit_time, trim_commit,
  full_body=False, refs={}, full_id=False, parents=False,
  any=None) %}
  any=None, skip_body=False) %}
<div>
  {% if full_id %}
  {{c.id.hex}}


@@ 71,9 71,11 @@ endif %}{% endfor %}
  {% endfor %}
  {% endif %}
</div>
{% if not skip_body %}
{% if full_body %}
<pre>{{c.message}}</pre>
{% else %}
<pre>{{ trim_commit(c.message) }}</pre>
{% endif %}
{% endif %}
{% endmacro %}