summaryrefslogtreecommitdiff
path: root/app/views/projects/mirrors/_mirror_repos.html.haml
blob: e68fa5d08c7ba2b0ae70c817ed1199677d24b7e1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
- expanded = expanded_by_default?
- protocols = Gitlab::UrlSanitizer::ALLOWED_SCHEMES.join('|')

%section.settings.project-mirror-settings.js-mirror-settings.no-animate.qa-mirroring-repositories-settings#js-push-remote-settings{ class: ('expanded' if expanded) }
  .settings-header
    %h4= _('Mirroring repositories')
    %button.btn.js-settings-toggle
      = expanded ? _('Collapse') : _('Expand')
    %p
      = _('Set up your project to automatically push and/or pull changes to/from another repository. Branches, tags, and commits will be synced automatically.')
      = link_to _('Read more'), help_page_path('workflow/repository_mirroring'), target: '_blank'

  .settings-content
    = form_for @project, url: project_mirror_path(@project), html: { class: 'gl-show-field-errors js-mirror-form', autocomplete: 'new-password', data: mirrors_form_data_attributes } do |f|
      .panel.panel-default
        .panel-heading
          %h3.panel-title= _('Mirror a repository')
        .panel-body
          %div= form_errors(@project)

          .form-group.has-feedback
            = label_tag :url, _('Git repository URL'), class: 'label-light'
            = text_field_tag :url, nil, class: 'form-control js-mirror-url js-repo-url qa-mirror-repository-url-input', placeholder: _('Input your repository URL'), required: true, pattern: "(#{protocols}):\/\/.+", autocomplete: 'new-password'

          = render 'projects/mirrors/instructions'

          = render 'projects/mirrors/mirror_repos_form', f: f

          .form-check.append-bottom-10
            = check_box_tag :only_protected_branches, '1', false, class: 'js-mirror-protected form-check-input'
            = label_tag :only_protected_branches, _('Only mirror protected branches'), class: 'form-check-label'
            = link_to icon('question-circle'), help_page_path('user/project/protected_branches'), target: '_blank'

        .panel-footer
          = f.submit _('Mirror repository'), class: 'btn btn-success js-mirror-submit qa-mirror-repository-button', name: :update_remote_mirror

    .panel.panel-default
      .table-responsive
        %table.table.push-pull-table
          %thead
            %tr
              %th
                = _('Mirrored repositories')
                = render_if_exists 'projects/mirrors/mirrored_repositories_count'
              %th= _('Direction')
              %th= _('Last update')
              %th
              %th
          %tbody.js-mirrors-table-body
            = render_if_exists 'projects/mirrors/table_pull_row'
            - @project.remote_mirrors.each_with_index do |mirror, index|
              - next if mirror.new_record?
              %tr.qa-mirrored-repository-row{ class: ('bg-secondary' if mirror.disabled?) }
                %td.qa-mirror-repository-url= mirror.safe_url
                %td= _('Push')
                %td.qa-mirror-last-update-at= mirror.last_update_at.present? ? time_ago_with_tooltip(mirror.last_update_at) : _('Never')
                %td
                  - if mirror.disabled?
                    = render 'projects/mirrors/disabled_mirror_badge'
                  - if mirror.last_error.present?
                    .badge.mirror-error-badge{ data: { toggle: 'tooltip', html: 'true' }, title: html_escape(mirror.last_error.try(:strip)) }= _('Error')
                %td
                  .btn-group.mirror-actions-group.pull-right{ role: 'group' }
                    - if mirror.ssh_key_auth?
                      = clipboard_button(text: mirror.ssh_public_key, class: 'btn btn-default', title: _('Copy SSH public key'))
                    = render 'shared/remote_mirror_update_button', remote_mirror: mirror
                    %button.js-delete-mirror.qa-delete-mirror.btn.btn-danger{ type: 'button', data: { mirror_id: mirror.id, toggle: 'tooltip', container: 'body' }, title: _('Remove') }= icon('trash-o')