Commit fbc17354 authored by Valery Sizov's avatar Valery Sizov

Merge branch 'master' of gitlab.com:gitlab-org/gitlab-ee into ce-upstream

parents dd0fe672 58d23076
/* global Vue */
(() => {
window.gl = window.gl || {};
window.gl.geo = window.gl.geo || {};
window.gl.geo.CloneDialog = Vue.extend({
props: ['title', 'id'],
data() {
return this.$parent.$data;
},
mounted() {
$(`#${this.id}`).appendTo('body').modal({ modal: true, show: false });
},
template: `
<div class="modal in" tabindex="-1" :id="id">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<a href="#" data-dismiss="modal" class="close">×</a>
<h3>{{title}}</h3>
</div>
<div class="modal-body">
<p><strong>Step 1.</strong> Clone the repository from your secondary node:</p>
<slot name="clipboard-1"></slot>
<pre class="dark" id="geo-info-1">git clone {{cloneUrlSecondary}}</pre>
<p><strong>Step 2.</strong> Go to the new directory and define <strong>primary node's</strong> repository URL as the <strong>push</strong> remote:</p>
<slot name="clipboard-2"></slot>
<pre class="dark" id="geo-info-2">git remote set-url --push origin {{cloneUrlPrimary || '&lt;clone url for primary repository&gt;'}}</pre>
<p><strong>Done.</strong> You can now commit and push code as you normally do, but with increased speed.</p>
</div>
</div>
</div>
</div>
`,
});
})();
/* global Vue */
window.Vue = require('vue');
require('./components/geo_clone_dialog');
$(document).ready(() => {
window.gl = window.gl || {};
const $geoClone = document.getElementById('geo-clone');
if ($geoClone) {
gl.GeoClone = new Vue({
el: $geoClone,
components: {
'geo-clone-dialog': gl.geo.CloneDialog,
},
data: Object.assign({}, $geoClone.dataset),
});
}
});
......@@ -207,7 +207,6 @@ require('./wikis');
require('./zen_mode');
// EE-only scripts
require('./geo/geo_bundle');
require('./admin_email_select');
require('./application_settings');
require('./approvals');
......
......@@ -65,4 +65,4 @@ module PreferencesHelper
def anonymous_project_view
@project.empty_repo? || !can?(current_user, :download_code, @project) ? 'activity' : 'readme'
end
end
\ No newline at end of file
end
......@@ -74,6 +74,16 @@ module Elastic
def es_parent
project_id if respond_to?(:project_id)
end
# Some attributes are actually complicated methods. Bad data can cause
# them to raise exceptions. When this happens, we still want the remainder
# of the object to be saved, so silently swallow the errors
def safely_read_attribute_for_elasticsearch(attr_name)
send(attr_name)
rescue => err
logger.warn("Elasticsearch failed to read #{attr_name} for #{self.class} #{self.id}: #{err}")
nil
end
end
module ClassMethods
......
......@@ -27,7 +27,7 @@ module Elastic
# We don't use as_json(only: ...) because it calls all virtual and serialized attributtes
# https://gitlab.com/gitlab-org/gitlab-ee/issues/349
[:id, :iid, :title, :description, :created_at, :updated_at, :state, :project_id, :author_id, :assignee_id, :confidential].each do |attr|
data[attr.to_s] = self.send(attr)
data[attr.to_s] = safely_read_attribute_for_elasticsearch(attr)
end
data
......
......@@ -45,7 +45,7 @@ module Elastic
:target_project_id,
:author_id
].each do |attr|
data[attr.to_s] = self.send(attr)
data[attr.to_s] = safely_read_attribute_for_elasticsearch(attr)
end
data
......
......@@ -17,9 +17,15 @@ module Elastic
end
def as_indexed_json(options = {})
as_json(
only: [:id, :title, :description, :project_id, :created_at, :updated_at]
)
# We don't use as_json(only: ...) because it calls all virtual and serialized attributtes
# https://gitlab.com/gitlab-org/gitlab-ee/issues/349
data = {}
[:id, :title, :description, :project_id, :created_at, :updated_at].each do |attr|
data[attr.to_s] = safely_read_attribute_for_elasticsearch(attr)
end
data
end
def self.nested?
......
......@@ -26,7 +26,7 @@ module Elastic
# We don't use as_json(only: ...) because it calls all virtual and serialized attributtes
# https://gitlab.com/gitlab-org/gitlab-ee/issues/349
[:id, :note, :project_id, :created_at, :updated_at].each do |attr|
data[attr.to_s] = self.send(attr)
data[attr.to_s] = safely_read_attribute_for_elasticsearch(attr)
end
if noteable.is_a?(Issue)
......
......@@ -46,7 +46,7 @@ module Elastic
:name_with_namespace,
:path_with_namespace
].each do |attr|
data[attr.to_s] = self.send(attr)
data[attr.to_s] = safely_read_attribute_for_elasticsearch(attr)
end
data
......
......@@ -22,20 +22,25 @@ module Elastic
end
def as_indexed_json(options = {})
as_json({
only: [
:id,
:title,
:file_name,
:content,
:created_at,
:updated_at,
:state,
:project_id,
:author_id,
:visibility_level
]
})
# We don't use as_json(only: ...) because it calls all virtual and serialized attributtes
# https://gitlab.com/gitlab-org/gitlab-ee/issues/349
data = {}
[
:id,
:title,
:file_name,
:content,
:created_at,
:updated_at,
:project_id,
:author_id,
:visibility_level
].each do |attr|
data[attr.to_s] = safely_read_attribute_for_elasticsearch(attr)
end
data
end
def self.elastic_search(query, options: {})
......
......@@ -38,10 +38,10 @@
e.preventDefault();
var $this = $(this);
if (gl.GeoClone) {
gl.GeoClone.cloneUrlSecondary = $this.attr('href');
gl.GeoClone.cloneUrlPrimary = $this.data('primaryUrl');
}
$('#modal-geo-info').data({
cloneUrlSecondary: $this.attr('href'),
cloneUrlPrimary: $this.data('primaryUrl') || ''
});
});
= render 'shared/geo_info_modal', project: project if Gitlab::Geo.secondary?
#geo-clone{ data: { clone_url_secondary: h(default_url_to_repo(project)), clone_url_primary: h(geo_primary_default_url_to_repo(project)) } }
%geo-clone-dialog{ id: 'modal-geo-info', title: 'How to work faster with Geo' }
%span{ slot: 'clipboard-1' }
= clipboard_button(clipboard_target: 'pre#geo-info-1')
%span{ slot: 'clipboard-2' }
= clipboard_button(clipboard_target: 'pre#geo-info-2')
#modal-geo-info.modal.in{ tabindex: '-1', data: { clone_url_secondary: h(default_url_to_repo(project)), clone_url_primary: h(geo_primary_default_url_to_repo(project)) } }
.modal-dialog
.modal-content
.modal-header
%a.close{ href: '#', data: { dismiss: 'modal' } }
%h3= 'How to work faster with Geo'
.modal-body
%p
%strong= 'Step 1.'
Clone the repository from your secondary node:
= clipboard_button(clipboard_target: 'pre#geo-info-1')
%pre#geo-info-1.dark
git clone
= default_url_to_repo()
%p
%strong= 'Step 2.'
Go to the new directory and define
%strong= "primary node's"
repository URL as the
%strong= 'push'
remote:
= clipboard_button(clipboard_target: 'pre#geo-info-2')
%pre#geo-info-2.dark
git remote set-url --push origin &lt;clone url for primary repository&gt;
%p
%strong= 'Done.'
You can now commit and push code as you normally do, but with increased speed.
:javascript
$('#modal-geo-info')
.appendTo('body')
.modal({ modal: true, show: false })
.on('show.bs.modal', function() {
var data = $(this).data();
$('#geo-info-1').text(
'git clone ' +
(data.cloneUrlSecondary || '<clone url for secondary repository>')
);
$('geo-info-2').text(
'git remote set-url --push origin ' +
(data.cloneUrlPrimary || '<clone url for primary repository>')
);
});
---
title: Robustify reading attributes for elasticsearch
merge_request: 1365
author:
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment