77 lines
4.7 KiB
Text
77 lines
4.7 KiB
Text
- expanded = expanded_by_default?
|
|
- protocols = Gitlab::UrlSanitizer::ALLOWED_SCHEMES.join('|')
|
|
- mirror_settings_enabled = can?(current_user, :admin_remote_mirror, @project)
|
|
- mirror_settings_class = "#{'expanded' if expanded} #{'js-mirror-settings' if mirror_settings_enabled}".strip
|
|
|
|
%section.settings.project-mirror-settings.no-animate#js-push-remote-settings{ class: mirror_settings_class, data: { qa_selector: 'mirroring_repositories_settings_content' } }
|
|
.settings-header
|
|
%h4= _('Mirroring repositories')
|
|
%button.btn.gl-button.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('user/project/repository/repository_mirroring.md'), target: '_blank'
|
|
|
|
.settings-content
|
|
- if mirror_settings_enabled
|
|
= 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-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.gl-mb-3
|
|
= 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 sprite_icon('question-o'), 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
|
|
- else
|
|
.gl-alert.gl-alert-info{ role: 'alert' }
|
|
= sprite_icon('information-o', css_class: 'gl-icon gl-alert-icon gl-alert-icon-no-title')
|
|
.gl-alert-body
|
|
= _('Mirror settings are only available to GitLab administrators.')
|
|
|
|
.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 attempt')
|
|
%th= _('Last successful 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.rspec-mirrored-repository-row{ class: ('bg-secondary' if mirror.disabled?), data: { qa_selector: 'mirrored_repository_row' } }
|
|
%td{ data: { qa_selector: 'mirror_repository_url_cell' } }= mirror.safe_url || _('Invalid URL')
|
|
%td= _('Push')
|
|
%td
|
|
= mirror.last_update_started_at.present? ? time_ago_with_tooltip(mirror.last_update_started_at) : _('Never')
|
|
%td{ data: { qa_selector: 'mirror_last_update_at_cell' } }= 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', qa_selector: 'mirror_error_badge' }, title: html_escape(mirror.last_error.try(:strip)) }= _('Error')
|
|
%td
|
|
- if mirror_settings_enabled
|
|
.btn-group.mirror-actions-group.float-right{ role: 'group' }
|
|
- if mirror.ssh_key_auth?
|
|
= clipboard_button(text: mirror.ssh_public_key, class: 'btn btn-default', title: _('Copy SSH public key'), qa_selector: 'copy_public_key_button')
|
|
= render 'shared/remote_mirror_update_button', remote_mirror: mirror
|
|
%button.js-delete-mirror.qa-delete-mirror.rspec-delete-mirror.btn.gl-button.btn-danger{ type: 'button', data: { mirror_id: mirror.id, toggle: 'tooltip', container: 'body' }, title: _('Remove') }= sprite_icon('remove')
|