Blob Blame Raw
{% extends "repo_master.html" %}

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

{% block header %}
<style nonce="{{ g.nonce }}">
.disabled_branch a {
  color: #818a91;
}
.disabled_branch .new_pr_btn {
  display: none;
}
</style>
{% endblock %}

{% block repo %}
<div class="row">
  <div class="col-2">
      {% block overviewtabs %}{{ super() }}{% endblock %}
  </div>
  <div class="col-10">
    <h3 class="font-weight-bold">
    Branches <span class="badge badge-secondary">{{g.branches|length}}</span>
    </h3>
    <div class="list-group">
        {% if head %}
        <div id="branch-{{ head }}" class="list-group-item">
            <div class="row align-items-center">
                <div class="col">
                    <span class="fa fa-random fa-fw text-muted"></span>
                    <a href="{{ url_for('ui_ns.view_tree',
                        repo=repo.name,
                        username=username,
                        namespace=repo.namespace,
                        identifier=head) }}"
                        title="{{ head }}" data-toggle="tooltip"
                        class="font-weight-bold">
                        {{ head }}
                    </a>
                </div>
                <div class="col-xs-auto pl-2">
                    <button class="btn btn-outline-light bg-white border-white" title="this is the default branch for this project">
                    <span class="fa fa-star fa-fw text-warning"></span>
                    </button>
                </div>
            </div>
        </div>
        {% endif %}

        {% for branch in g.branches if branch != head %}
        <div id="branch-{{ branch | replace('/', '__')}}" class="list-group-item">
                <div class="row align-items-center">
                    <div class="col">
                        <span class="fa fa-random fa-fw text-muted"></span>
                        <a class="font-weight-bold" href="{{ url_for('ui_ns.view_tree',
                            repo=repo.name,
                            username=username,
                            namespace=repo.namespace,
                            identifier=branch) }}"
                            title="{{ branch }}" data-toggle="tooltip">{{ branch }}
                        </a>
                        <small class="text-muted commits_ahead_label"></small>
                    </div>
                    <div class="col-xs-auto pr-2">
                            <div class="branch_del">
                                <div class="btn-group">
                                    <a class="btn btn-outline-primary" href="{{ url_for('ui_ns.view_tree',
                                        repo=repo.name,
                                        username=username,
                                        namespace=repo.namespace,
                                        identifier=branch) }}"
                                        title="view code tree for this branch">
                                    <i class="fa fa-fw fa-file-code-o"></i>
                                    </a>
                                    <a class="btn btn-outline-primary" href="{{ url_for('ui_ns.view_commits',
                                        repo=repo.name,
                                        username=username,
                                        namespace=repo.namespace,
                                        branchname=branch) }}"
                                        title="view commit list for this branch">
                                    <i class="fa fa-fw fa-list-alt"></i>
                                    </a>
                                </div>
                                {% if g.repo_committer and branch != head
                                      and (
                                        config.get('ALLOW_DELETE_BRANCH', True)
                                        or repo.is_fork) %}
                                    <form id="delete_branch_form-{{
                                        branch | replace('/', '__') | replace('+', '___')
                                        }}" action="{{
                                        url_for('ui_ns.delete_branch',
                                                repo=repo.name,
                                                username=username,
                                                namespace=repo.namespace,
                                                branchname=branch)
                                        }}" method="post" class="icon d-inline delete-branch-form" data-branch-name="{{ branch | unicode }}">
                                        {{ g.confirmationform.csrf_token }}
                                        <a title="Remove branch {{ branch }}" href="#"
                                        class="btn btn-outline-danger"
                                        onclick="$('#delete_branch_form-{{
                                            branch | replace('/', '__') | replace('.', '\\\\.')
                                            | replace('+', '___')
                                            }}').submit();">
                                        <i class="fa fa-trash"></i>
                                        </a>
                                    </form>
                                {% endif %}
                            </div>
                    </div>
                </div>
            </div>
        {% endfor %}
        </div>
  </div>
</div>
{% endblock %}

{% block jscripts %}
{{ super() }}
<script type="text/javascript" nonce="{{ g.nonce }}">
function disable_branches(){
  function get_branches(_url){
    $.ajax({
      url: _url,
      type: 'GET',
      dataType: 'json',
      success: function(res) {
        for (branch in res.results){
          branch = res.results[branch];
          var _it = $('#branch-' + branch.name);
          _it.addClass('disabled_branch');
          if (branch.name == 'master') {
            var _t = $('.projectinfo');
            html = ' \
                <div class="small label label-sm label-danger" data-toggle="tooltip" \
                 title="This package has been retired">Retired on Fedora</div>';
            _t.append(html);
          }
        }
        if (res.next){
          get_branches(res.next);
        }
      }
    })
  }
  var _ns = '{{ repo.namespace }}';
  if (_ns == 'rpms') {
    _ns = 'rpm';
  } else if (_ns == 'modules') {
    _ns = 'modules';
  }
  var _url = 'https://pdc.fedoraproject.org/rest_api/v1/component-branches/'
        + '?active=false&type=' + _ns + '&global_component={{ repo.name }}';
  get_branches(_url);
}

$(function() {
  {% if not repo.is_fork %}
  disable_branches();
  {% endif %}

  {% if g.authenticated and g.repo_committer %}
  var _cnt = 0;

  function set_up_branch_pr_info(res) {
    for (branch in res.new_branch){
      var nb_commits = res.new_branch[branch]['commits']
      var nb_target = res.new_branch[branch]['target_branch']
      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) + nb_target + '..' + branch

      {% if repo.is_fork %}
      html2 = ' \
            <a class="btn btn-outline-primary border-white" data-toggle="tooltip" \
            href="' + url + '" title="' + branch +' contains '
             + nb_commits + ' commit not in the upstream project '
             + nb_target + ' branch. Click to create new PR now.'
             + '"><i class="fa fa-fw fa-arrow-circle-down"></i> Open Pull Request</a> \
            </div>';
      {% else %}
      html2 = ' \
            <a class="btn btn-outline-primary border-white" data-toggle="tooltip" \
            href="' + url + '" title="' + branch +' contains '
             + nb_commits + ' commit not in the ' + nb_target
             + ' branch. Click to create new PR now.'
             + '"><i class="fa fa-fw fa-arrow-circle-down"></i> Open Pull Request</a> \
            </div>';
      {%endif%}
      var _b = branch.replace(/\./g, '\\.').replace('/', '__').replace('\+', '\\+');
      $('#branch-' + _b + ' .branch_del').prepend(html2);
      $('[data-toggle="tooltip"]').tooltip({placement : 'bottom'});
      var commits_string = (nb_commits > 1) ? " commits" : " commit"
      $('#branch-' + _b + ' .commits_ahead_label').append(nb_commits + commits_string + ' ahead');
    }

    for (branch in res.branch_w_pr){
      var html = ' \
          <a class="btn btn-outline-success border-white" data-toggle="tooltip" '
           + 'href="{{ request.url_root }}' + res.branch_w_pr[branch]
           + '"title="' + branch +' is already in an opened pull-request">'
           + '<i class="fa fa-fw fa-arrow-circle-down"></i> Pull Request #' + res.branch_w_pr[branch].split('/').slice(-1)[0]  + ' </a> \
          </div>';
      $('#branch-' + branch.replace(/\./g, '\\.').replace('/', '__')
        + ' .branch_del').prepend(html);
      $('[data-toggle="tooltip"]').tooltip({placement : 'bottom'});
    }
  }

  function process_task_results(_data, callback) {
    var _url = '{{ url_for("internal_ns.task_info", taskid='') }}' + _data.task;
    $.ajax({
      url: _url ,
      type: 'GET',
      data: {
        js: 1,
        count: _cnt,
      },
      dataType: 'JSON',
      success: function(res) {
        callback(res.results);
        $("#spinnergif").hide();
      },
      error: function(res) {
        _cnt += 1;
        if (_cnt < 600) {
          window.setTimeout(process_task_results, 1000, _data, callback);
        }
      }
    });
  }


  $.ajax({
    url: '{{ url_for("internal_ns.get_pull_request_ready_branch") }}' ,
    type: 'POST',
    data: {
      namespace: "{{ repo.namespace if repo.namespace }}",
      repo: "{{ repo.name }}",
      repouser: "{{ repo.user.user if repo.is_fork else '' }}",
      csrf_token: "{{ g.confirmationform.csrf_token.current_token }}",
    },
    dataType: 'json',
    success: function(res) {
      if (res.code == 'OK'){
        process_task_results(res, set_up_branch_pr_info)
      }
    }
  });
  {% endif %}
});
</script>
{% endblock %}