Blob Blame History Raw
{% extends "master.html" %}

{% macro print_ssh_url(repo, end_url_ssh, current_user) %}
  {% if not (current_user |user_can_clone_ssh) %}
    <a href="{{ url_for('ui_ns.user_settings') + '#nav-ssh-tab' }}">
      You need to upload SSH key to be able to clone over SSH
    </a>
  {% elif repo.read_only %}
     The permissions on this repository are being updated.
     Cloning over SSH is disabled.
  {% else %}
    <div class="form-group">
      <div class="input-group input-group-sm">
        <div class="input-group-prepend"><span class="input-group-text">SSH</span></div>
        <input class="form-control bg-white" type="text" value="{{
          end_url_ssh | git_url_ssh }}{{ repo.fullname }}.git" readonly>
      </div>
    </div>
  {% endif %}
{% endmacro %}

{% block title %}{{
    repo.namespace + '/' if repo.namespace }}{{ repo.name }}{% endblock %}
{% set tag = "home" %}

{% block content %}
<div class="bg-light border border-bottom pt-3">
  <div class="container">
    <div class="row mb-3">
      <div class="col-6">
        <div class="row">
        <div class="col-auto pr-0">
            <h3>
            {% if repo.is_fork -%}
            <i class="fa fa-code-fork text-muted"></i>
            {%- else -%}
            <i class="fa fa-calendar-o fa-rotate-270 text-muted"></i>
            {%- endif -%}
            </h3>
        </div>
        <div class="col-auto pl-2">
            <h3 class="mb-0">
                {% if repo.is_fork -%}
                 <a href="{{ url_for(
                    'ui_ns.view_user', username=repo.user.user)
                    }}">{{ repo.user.user }}</a><span class="mt-1 text-muted">&nbsp;/&nbsp;</span>
                {%- endif -%}
                {%- if repo.namespace -%}
                    <a href="{{ url_for(
                        'ui_ns.view_projects', namespace=repo.namespace, pattern='*')
                    }}">{{ repo.namespace }}</a>&nbsp;/&nbsp;
                {%- endif -%}<a href="{{ url_for('ui_ns.view_repo',
                    repo=repo.name,
                    username=username,
                    namespace=repo.namespace)
                  }}"><strong>{{ repo.name }}</strong></a>
                  {% if repo.private %}
                  <span class="fa fa-lock text-danger fa-fw" title="Private project"></span>
                  {% endif %}
            </h3>
            {% if repo.is_fork and repo.parent %}
            <span class="text-muted">
              Forked from
              <a href="{{ url_for(
                'ui_ns.view_repo',
                repo=repo.parent.name,
                username=repo.parent.user.user if repo.parent.is_fork else None,
                namespace=repo.parent.namespace)}}">
                {{ repo.parent.fullname }}
              </a>
              {{repo.date_created|humanize}}
            </span>
            {% elif repo.is_fork and not repo.parent %}
            <span class="text-muted">
                Forked from a deleted repository {{repo.date_created|humanize}}
            </span>
            {% endif %}
        </div>
        </div>
      </div>
      <div class="col-6 text-right">
        <div class="btn-group">
        {% if g.authenticated %}
          {% if repo.settings.get('issue_tracker', True)
                and config.get('ENABLE_TICKETS', True)
                and not repo.settings.get('issue_tracker_read_only', False) %}
            <a href="{{ url_for('ui_ns.new_issue',
                repo=repo.name,
                username=username,
                namespace=repo.namespace) }}"
              class="btn btn-outline-primary btn-sm">
              <i class="fa fa-exclamation-circle fa-fw"></i> New issue</a>
            {% endif %}
            {% if g.authenticated %}
            <div class="btn-group">
              <a href="#" class="btn btn-outline-primary btn-sm dropdown-toggle"
                data-toggle="dropdown"
                aria-haspopup="true" aria-expanded="false" id="pr-button">
                <i class="fa fa-arrow-circle-down fa-fw"></i> Open PR
              </a>
              <div class="dropdown-menu dropdown-menu-right" id="PR-dropdown">
                <a class="dropdown-item" id="spinnergif">
                  <small><img
                    src="{{ url_for('static', filename='images/spinner.gif') }}" />
                  </small>
                </a>
                <a class="dropdown-item"
                   href="{{ url_for('ui_ns.new_request_pull',
                    repo=repo.name,
                    username=username,
                    namespace=repo.namespace,
                    branch_to=head or 'master',
                    branch_from=branchname or 'master') }}">
                    New Pull Request
                </a>
                <a class="dropdown-item" href="{{ url_for(
                    'ui_ns.new_remote_request_pull',
                    repo=repo.name,
                    username=username,
                    namespace=repo.namespace) }}">
                  New Remote Pull Request
                </a>
              </div>
            </div>
          {%endif%}

          <div class="btn-group">
            {% if g.repo_forked %}
              {% if g.fas_user.username == username %}
              <a href="{{ url_for(
                'ui_ns.view_repo',
                repo=repo.name,
                namespace=repo.namespace) }}" class="btn btn-sm btn-outline-primary">

              <i class="fa fa-code-fork fa-fw"></i> View Upstream
              </a>
              {% else %}
              <a href="{{ url_for(
                'ui_ns.view_repo',
                repo=repo.name,
                username=g.fas_user.username,
                namespace=repo.namespace) }}" class="btn btn-sm btn-outline-primary">

              <i class="fa fa-code-fork fa-fw"></i> View fork
              </a>
              {% endif %}
            {% else %}
            <form method="POST" name="fork_project" id="fork_project"
              action="{{ url_for(
                'ui_ns.fork_project',
                repo=repo.name,
                username=username,
                namespace=repo.namespace) }}">
              {{ g.forkbuttonform.csrf_token }}
            </form>
              <button class="btn btn-sm btn-outline-primary"
              onclick="$('#fork_project').submit();">
              <i class="fa fa-code-fork fa-fw"></i> Fork</button>
            {% endif %}
          </div>
        {% endif %}
        <div class="btn-group">
        <a href="#" 
            class="btn btn-sm dropdown-toggle btn-outline-primary"
            data-toggle="dropdown" id="watch-button">
          <i class="fa fa-clone fa-fw"></i>
          <span>Clone</span>
        </a>
        <div class="dropdown-menu dropdown-menu-right">
          <div class="m-3" style="width:300px;">
            <div>
              <h5><strong>Source Code</strong></h5>
              {% if g.authenticated and g.repo_committer %}
                {{ print_ssh_url(repo, "", g.fas_user.username) }}
              {% endif %}

              <div class="form-group">
                <div class="input-group input-group-sm">
                  <div class="input-group-prepend"><span class="input-group-text">GIT</span></div>
                  <input class="form-control bg-white" type="text" value="{{
                    config.get('GIT_URL_GIT') }}{{ repo.fullname }}.git" readonly>
                </div>
              </div>

              {% if config['DOC_APP_URL']
                  and repo
                  and repo.settings.get('project_documentation', True) %}
                <h5><strong>Documentation</strong></h5>
                {% if g.authenticated and g.repo_committer %}
                  {{ print_ssh_url(repo, "docs/", g.fas_user.username) }}
                {% endif %}
                <div class="form-group">
                  <div class="input-group input-group-sm">
                    <div class="input-group-prepend"><span class="input-group-text">GIT</span></div>
                    <input class="form-control bg-white" type="text" value="{{
                      config.get('GIT_URL_GIT') }}docs/{{ repo.fullname }}.git" readonly>
                  </div>
                </div>
              {% endif %}

              {% if g.authenticated and g.repo_committer %}
                {% if config.get('ENABLE_TICKETS', True)
                   and repo.settings.get('issue_tracker', True) %}
                  <h5><strong>Issues</strong></h5>
                  {{ print_ssh_url(repo, "tickets/", g.fas_user.username) }}
                {% endif %}
                <h5><strong>Pull Requests</strong></h5>
                {{ print_ssh_url(repo, "requests/", g.fas_user.username) }}
              {% endif %}

              <hr />
              <p>
                <a href="https://docs.pagure.org/pagure/usage/" target="_blank" rel="noopener noreferrer">
                  Learn more about these different git repos.
                </a>
              </p>

            </div>
          </div>
        </div>

      </div>
    </div>
  </div>
</div>

    <ul class="nav nav-tabs nav-small border-bottom-0">
      <li class="nav-item mr-2 text-dark">
        <a {%
          if select == 'overview' or select == 'commits' or select == 'tree' or select == 'tags' or select == 'branches' or select == 'forks'%}class="nav-link active" {%
          else %}class="nav-link" {%
          endif %}href="{{ url_for(
              'ui_ns.view_repo',
              repo=repo.name,
              username=username,
              namespace=repo.namespace) }}">
            <i class="fa fa-code fa-fw text-muted"></i>
            <span class="d-none d-md-inline">Source</span>
        </a>
      </li>
        {% if config['DOC_APP_URL'] and repo and repo.settings.get('project_documentation', True) %}
        <li class="nav-item mr-2 text-dark" >
          <a  {%
            if select == 'docs' %}class="active nav-link" {%
            else %}class="nav-link" {%
            endif %}href="{{ url_for(
                'ui_ns.view_docs',
                repo=repo.name,
                username=username,
                namespace=repo.namespace) }}">
              <i class="fa fa-book fa-fw text-muted"></i>
              <span class="d-none d-md-inline">Docs</span>
          </a>
        </li>
        {% endif %}

        {% if config.get('ENABLE_TICKETS', True) and repo
              and repo.settings.get('issue_tracker', True) %}
        <li class="nav-item mr-2 text-dark">
            <a {%
              if select == 'issues' %}class="active nav-link" {%
              else %}class="nav-link" {%
              endif %}href={% if not repo.settings.get(
                  'roadmap_on_issues_page', False) %}"{{ url_for(
                  'ui_ns.view_issues',
                  repo=repo.name,
                  username=username,
                  namespace=repo.namespace) }}"{% else %}"{{ url_for(
                  'ui_ns.view_roadmap',
                  repo=repo.name,
                  username=username,
                  namespace=repo.namespace) }}"{% endif %}>
                <i class="fa fa-fw text-muted fa-exclamation-circle"></i>
                <span class="d-none d-md-inline">Issues&nbsp;</span>
                <span class="badge badge-secondary py-0 d-none d-md-inline">
                  {{ repo.open_tickets if g.repo_committer else repo.open_tickets_public }}
                </span>
            </a>
        </li>
        {% endif %}

        {% if repo and repo.settings.get('pull_requests', True) %}
        <li class="nav-item mr-2 text-dark">
          <a {%
            if select == 'requests' %}class="active nav-link" {%
            else %}class="nav-link" {%
            endif %}href="{{ url_for(
                'ui_ns.request_pulls',
                repo=repo.name,
                username=username,
                namespace=repo.namespace) }}">
              <i class="fa fa-fw text-muted fa-arrow-circle-down"></i>
              <span class="d-none d-md-inline">Pull Requests&nbsp;</span>
              <span class="badge badge-secondary py-0 d-none d-md-inline">
                {{ repo.open_requests }}
              </span>
          </a>
        </li>
        {% endif %}

        {% if repo.milestones %}
        <li class="nav-item mr-2 text-dark">
        <a {%
            if select == 'roadmap' %}class="active nav-link" {%
            else %}class="nav-link" {%
            endif %} href="{{ url_for(
            'ui_ns.view_roadmap',
            repo=repo.name,
            username=username,
            namespace=repo.namespace) }}"
          class="btn btn-outline-dark btn-sm">
          <i class="fa fa-fw text-muted fa-map-signs"></i>
          <span class="d-none d-md-inline">Roadmap&nbsp;</span>
        </a>
        </li>
        {% endif %}

        <li class="nav-item mr-2 text-dark">
          <a {%
            if select == 'stats' %}class="active nav-link" {%
            else %}class="nav-link" {%
            endif %}href="{{ url_for(
                'ui_ns.view_stats',
                repo=repo.name,
                username=username,
                namespace=repo.namespace) }}">
              <i class="fa fa-line-chart fa-fw text-muted"></i>
              <span class="d-none d-md-inline">Stats</span>
          </a>
        </li>

      {% if g.authenticated %}
        {% if g.repo_admin %}
          <li class="nav-item mr-2 text-dark">
            <a title="Settings" {%
              if select == 'settings' %}class="active nav-link" {%
              else %}class="nav-link" {%
              endif %}href="{{ url_for(
                  'ui_ns.view_settings',
                  repo=repo.name,
                  username=username,
                  namespace=repo.namespace) }}">
                <i class="fa fa-cogs fa-fw text-muted"></i>
                <span class="d-none d-md-inline">Settings</span>
            </a>
          </li>
        {% endif %}
      {% endif %}
      {% if endpoint == 'view_docs' %}
      <li class="nav-item pull-xs-right">
        <a class="nav-link" href="{{ config['DOC_APP_URL'] + url_for(
            'ui_ns.view_repo',
            repo=repo.namespace + '.' + repo.name if repo.namespace else repo.name,
            username=username,
            filename=filename)
          }}" target="_blank" title="Open to a new tab" rel="noopener noreferrer">
          <span class="fa fa-external-link"></span>
        </a>
      </li>
      {% endif %}

    </ul>
  </div>
</div>

<div class="container pt-5 repo-body-container">
    {% if repo.read_only %}
    <div class="container pt-2">
        <div class="alert alert-danger alert-dismissible" role="alert">
          <button type="button" class="close" data-dismiss="alert" aria-label="Close">
            <span aria-hidden="true">&times;</span>
            <span class="sr-only">Close</span>
          </button>
          The permissions on this repository are being updated. This may take a while.
          During this time, you or some of the project's contributors may not be able
          to push to this repository.
        </div>
    </div>
    {% endif %}
    {% if g.authenticated and repo.settings.get('pull_request_access_only') %}
    <div class="container pt-2">
        <div class="alert alert-info alert-dismissible" role="alert">
          <button type="button" class="close" data-dismiss="info" aria-label="Close">
            <span aria-hidden="true">&times;</span>
            <span class="sr-only">Close</span>
          </button>
          <span class="oi blue-icon" data-glyph="file" title="PR Only"></span>
          This project does not support direct push to its git repo, all changes
          must be done via pull-requests from forks.
        </div>
    </div>
    {% endif %}
{% block repo %}
{% endblock %}
</div>
{% endblock %}

{% block jscripts %}
{{ super() }}
<script type="text/javascript"
        src="{{ url_for('static',
            filename='vendor/lazyload/lazyload.min.js') }}">
    </script>
<script type="text/javascript">
window.addEventListener("load", function(event) {
    lazyload();
});

</script>
<script>

{% if g.authenticated and not g.repo_obj.is_empty %}

{% if g.repo_committer %}
$("#pr-button").click(
  function() {
    $.ajax({
      url: '{{ url_for("internal_ns.get_pull_request_ready_branch") }}' ,
      type: 'POST',
      data: {
        repo: "{{ repo.name }}",
        namespace: "{{ repo.namespace if repo.namespace }}",
        repouser: "",
        csrf_token: "{{ g.confirmationform.csrf_token.current_token }}",
      },
      dataType: 'json',
      error: function(res) {
         console.log(res);
      },
      success: function(res) {
        if (res.code == 'OK'){
          var first_item = true;
          for (branch in res.message.new_branch){
            if (first_item){
              $("#PR-dropdown").prepend("<div class='dropdown-divider'></div>")
              first_item = false;
            }
            var url = "{{ url_for(
              'ui_ns.new_request_pull',
              repo=repo.name,
              username=repo.user.user if repo.is_fork else None,
              namespace=repo.namespace,
              branch_to='-',
              branch_from='-') }}";
            url = url.slice(0, -4) + res.message.new_branch[branch]['target_branch'] + '..' + branch;
            html = '<a class="dropdown-item" href="' + url + '">'
              + '<span class="badge badge-light badge-pill border border-secondary font-size-1">'
                + ' <i class="fa fa-calendar-o fa-rotate-270 fa-fw"></i> '
                + '{{ repo.name }}'
              + '</span> '
              + '<span class="badge badge-secondary border border-secondary badge-pill font-size-1">'
                + '<span class="fa fa-random fa-fw"> </span> '
                + branch
              + '</span></a> ';
            $("#PR-dropdown").prepend(html);
          }
        }
      }
    });
  }
);
{% endif %}

$("#pr-button").click(
  function() {
    $.ajax({
      url: '{{ url_for("internal_ns.get_pull_request_ready_branch") }}' ,
      type: 'POST',
      data: {
        namespace: "{{ repo.namespace if repo.namespace }}",
        repo: "{{ repo.name }}",
        repouser: "{{ g.fas_user.username }}",
        csrf_token: "{{ g.confirmationform.csrf_token.current_token }}",
      },
      dataType: 'json',
      error: function(res) {
        $('#spinnergif').hide()
        console.log(res);
      },
      success: function(res) {
        $('#spinnergif').hide()
        console.log("done");
        if (res.code == 'OK'){
          var first_item = true;
          for (branch in res.message.new_branch){
            if (first_item){
              $("#PR-dropdown").prepend("<div class='dropdown-divider'></div>");
              first_item = false;
            }
            var url = "{{ url_for(
              'ui_ns.new_request_pull',
              repo=repo.name,
              username=g.fas_user.username,
              namespace=repo.namespace,
              branch_to='-',
              branch_from='-') }}";
            url = url.slice(0, -4) + res.message.new_branch[branch]['target_branch'] + '..' + branch;
            html = '<a class="dropdown-item" \
            href="' + url + '"><span class="badge badge-light badge-pill border border-secondary font-size-1">'
            + '<i class="fa fa-code-fork fa-fw"></i>'
            +'{{ g.fas_user.username }}/{{ repo.name }}</span> '
            +'<span class="badge badge-secondary border border-secondary badge-pill font-size-1">'
            +'<i class="fa fa-random"></i> '
            + branch + '</span></a> ';
            $("#PR-dropdown").prepend(html);
          }
        }
      }
    })
  }
);

{% endif %}
</script>
{% endblock %}

{% block overviewtabs %}
<nav class="nav nav-tabs nav-sidetabs flex-column">
    <a class=
        "nav-link nowrap
        {%if select == 'overview' %} active{% endif %}"
        href="{{ url_for(
          'ui_ns.view_repo',
          repo=repo.name,
          username=username,
          namespace=repo.namespace) }}">
        <i class="fa fa-home text-muted fa-fw"></i>&nbsp;<span class="d-none d-md-inline">Overview</span>
    </a>
    <a class=
      "nav-link nowrap
      {%if g.repo_obj and g.repo_obj.is_empty %} disabled{% endif %}
      {%if select == 'tree' %} active{% endif %}"
      href="{{ url_for(
      'ui_ns.view_tree',
      repo=repo.name,
      username=username,
      namespace=repo.namespace,
      identifier=branchname,
      branchname=branchname) }}">
      <i class="fa fa-file-code-o text-muted fa-fw"></i>&nbsp;Files
    </a>
    <a class=
      "nav-link nowrap
      {%if g.repo_obj and g.repo_obj.is_empty %} disabled{% endif %}
      {%if select == 'commits' %} active{% endif %}"
      href="{{ url_for(
      'ui_ns.view_commits',
      repo=repo.name,
      username=username,
      namespace=repo.namespace,
      branchname=branchname) }}">
      <i class="fa fa-list-alt text-muted fa-fw" data-glyph="spreadsheet"></i>&nbsp;Commits
    </a>
    <a class=
      "nav-link nowrap
      {%if select == 'branches' %} active{% endif %}"
      href="{{ url_for(
      'ui_ns.view_branches',
      repo=repo.name,
      username=username,
      namespace=repo.namespace,
      branchname=branchname) }}">
      <i class="fa fa-random text-muted fa-fw"></i>&nbsp;Branches
    </a>
    <a class=
      "nav-link nowrap
      {%if select == 'forks' %} active{% endif %}"
      href="{{ url_for(
      'ui_ns.view_forks',
      repo=repo.name,
      username=username,
      namespace=repo.namespace) }}">
      <i class="fa fa-code-fork text-muted fa-fw"></i>&nbsp;Forks
    </a>
    <a class=
      "nav-link nowrap
      {%if select == 'tags' %} active{% endif %}"
      href="{{ url_for(
      'ui_ns.view_tags',
      repo=repo.name,
      username=username,
      namespace=repo.namespace) }}">
      <i class="fa fa-archive text-muted fa-fw"></i>&nbsp;Releases
    </a>
  </nav>
{% endblock %}