katello 4.6.0 → 4.6.1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of katello might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/app/controllers/katello/api/v2/repositories_controller.rb +5 -0
- data/app/helpers/katello/content_source_helper.rb +2 -0
- data/app/lib/actions/katello/repository/create.rb +1 -1
- data/app/lib/actions/pulp3/repository/repair.rb +1 -1
- data/app/services/katello/bulk_items_helper.rb +3 -3
- data/app/services/katello/pulp3/ansible_collection.rb +9 -6
- data/app/services/katello/pulp3/api/core.rb +2 -2
- data/app/services/katello/pulp3/erratum.rb +4 -1
- data/app/services/katello/pulp3/repository/yum.rb +3 -2
- data/app/services/katello/pulp3/repository.rb +1 -1
- data/app/services/katello/pulp3/smart_proxy_mirror_repository.rb +2 -2
- data/db/seeds.d/102-organizations.rb +1 -1
- data/engines/bastion/app/views/bastion/layouts/assets.html.erb +6 -5
- data/lib/katello/version.rb +1 -1
- data/webpack/components/Table/TableWrapper.js +4 -1
- data/webpack/components/extensions/HostDetails/Tabs/ErrataTab/ErrataTab.js +1 -0
- data/webpack/components/extensions/HostDetails/Tabs/ModuleStreamsTab/ModuleStreamsTab.js +8 -0
- data/webpack/components/extensions/HostDetails/Tabs/RepositorySetsTab/RepositorySetsTab.js +22 -5
- data/webpack/components/extensions/HostDetails/Tabs/__tests__/repositorySetsTab.test.js +8 -3
- metadata +2 -24
- data/locale/bn/katello.po.time_stamp +0 -0
- data/locale/cs/katello.po.time_stamp +0 -0
- data/locale/de/katello.po.time_stamp +0 -0
- data/locale/en/katello.po.time_stamp +0 -0
- data/locale/es/katello.po.time_stamp +0 -0
- data/locale/fr/katello.po.time_stamp +0 -0
- data/locale/gu/katello.po.time_stamp +0 -0
- data/locale/hi/katello.po.time_stamp +0 -0
- data/locale/it/katello.po.time_stamp +0 -0
- data/locale/ja/katello.po.time_stamp +0 -0
- data/locale/kn/katello.po.time_stamp +0 -0
- data/locale/ko/katello.po.time_stamp +0 -0
- data/locale/mr/katello.po.time_stamp +0 -0
- data/locale/or/katello.po.time_stamp +0 -0
- data/locale/pa/katello.po.time_stamp +0 -0
- data/locale/pt/katello.po.time_stamp +0 -0
- data/locale/pt_BR/katello.po.time_stamp +0 -0
- data/locale/ru/katello.po.time_stamp +0 -0
- data/locale/ta/katello.po.time_stamp +0 -0
- data/locale/te/katello.po.time_stamp +0 -0
- data/locale/zh_CN/katello.po.time_stamp +0 -0
- data/locale/zh_TW/katello.po.time_stamp +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 12ea739397f1f4d796d7f7f7d0b6a052cd3ae03ff70cf81a0cfcd7c995eff9f1
|
4
|
+
data.tar.gz: c2898a211d290e996a71b0ca8ce68ef6353f1b76530f1cbca8c38eeb0ec2f19d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a9f45a56723f68dd3e058d6b6b39ce1efe47bdef3c6ef49824e23ba56131bce7a3280f11cb5d967f3a1b065d48fb9b1b8ad1cfda66ca8c4385b8d9690446a510
|
7
|
+
data.tar.gz: 8d5d93e17e005cdcb2825891d3d2e1835633dfc9a1bb38f9621e26d9f17faef11a496a3e5fdf4894b502c8fd2f73bf64d0590f28031885e6d81912f801a308e8
|
@@ -389,6 +389,11 @@ module Katello
|
|
389
389
|
def upload_content
|
390
390
|
fail Katello::Errors::InvalidRepositoryContent, _("Cannot upload Container Image content.") if @repository.docker?
|
391
391
|
fail Katello::Errors::InvalidRepositoryContent, _("Cannot upload Ansible collections.") if @repository.ansible_collection?
|
392
|
+
unless params[:content_type].empty? || RepositoryTypeManager.uploadable_content_types.map(&:label).include?(params[:content_type])
|
393
|
+
msg = _("Invalid params provided - content_type must be one of %s") %
|
394
|
+
RepositoryTypeManager.uploadable_content_types.map(&:label).sort.join(",")
|
395
|
+
fail HttpErrors::UnprocessableEntity, msg
|
396
|
+
end
|
392
397
|
|
393
398
|
filepaths = Array.wrap(params[:content]).compact.collect do |content|
|
394
399
|
{path: content.path, filename: content.original_filename}
|
@@ -34,7 +34,7 @@ module Actions
|
|
34
34
|
|
35
35
|
concurrence do
|
36
36
|
plan_self(:repository_id => repository.id, :clone => clone)
|
37
|
-
if repository.url.present?
|
37
|
+
if !clone && repository.url.present?
|
38
38
|
repository.product.alternate_content_sources.with_type(repository.content_type).each do |acs|
|
39
39
|
acs.smart_proxies.each do |smart_proxy|
|
40
40
|
smart_proxy_acs = ::Katello::SmartProxyAlternateContentSource.create(alternate_content_source_id: acs.id, smart_proxy_id: smart_proxy.id, repository_id: repository.id)
|
@@ -3,7 +3,7 @@ module Actions
|
|
3
3
|
module Repository
|
4
4
|
class Repair < Pulp3::AbstractAsyncTask
|
5
5
|
include Helpers::Presenter
|
6
|
-
def plan(repository_id, smart_proxy)
|
6
|
+
def plan(repository_id, smart_proxy = SmartProxy.pulp_primary)
|
7
7
|
plan_self(:repository_id => repository_id, :smart_proxy_id => smart_proxy.id)
|
8
8
|
end
|
9
9
|
|
@@ -20,12 +20,12 @@ module Katello
|
|
20
20
|
params[:excluded] ||= {}
|
21
21
|
|
22
22
|
items = model_scope
|
23
|
-
if params[:included][:ids]
|
23
|
+
if params[:included][:ids].present?
|
24
24
|
items = model_scope.where(key => params[:included][:ids])
|
25
|
-
elsif params[:included][:search]
|
25
|
+
elsif params[:included][:search].present?
|
26
26
|
items = model_scope.search_for(params[:included][:search])
|
27
27
|
end
|
28
|
-
if params[:excluded][:ids]
|
28
|
+
if params[:excluded][:ids].present?
|
29
29
|
items = items.where.not(key => params[:excluded][:ids])
|
30
30
|
end
|
31
31
|
|
@@ -30,22 +30,25 @@ module Katello
|
|
30
30
|
end
|
31
31
|
|
32
32
|
def self.insert_child_associations(units, pulp_id_to_id)
|
33
|
-
|
34
|
-
tag_rows = tag_names.map { |name| {name: name } }
|
35
|
-
Katello::AnsibleTag.insert_all(tag_rows, unique_by: [:name]) if tag_rows.any?
|
36
|
-
|
33
|
+
insert_tags units
|
37
34
|
collection_tag_rows = []
|
38
35
|
units.each do |unit|
|
39
36
|
katello_id = pulp_id_to_id[unit['pulp_href']]
|
40
37
|
#delete old tags
|
41
|
-
unit_tags = unit['tags']
|
38
|
+
unit_tags = unit['tags']&.map { |tag| tag[:name] }
|
42
39
|
Katello::AnsibleCollectionTag.where(:ansible_collection_id => katello_id).where.not(:ansible_tag_id => Katello::AnsibleTag.where(:name => unit_tags)).delete_all
|
43
|
-
collection_tag_rows += Katello::AnsibleTag.where(:name => unit_tags)
|
40
|
+
collection_tag_rows += Katello::AnsibleTag.where(:name => unit_tags)&.pluck(:id)&.map { |tag_id| {ansible_collection_id: katello_id, ansible_tag_id: tag_id} }
|
44
41
|
end
|
45
42
|
|
46
43
|
collection_tag_rows.flatten!
|
47
44
|
Katello::AnsibleCollectionTag.insert_all(collection_tag_rows, unique_by: [:ansible_collection_id, :ansible_tag_id])
|
48
45
|
end
|
46
|
+
|
47
|
+
def self.insert_tags(units)
|
48
|
+
tag_names = units.map { |unit| unit['tags']&.map { |tag| tag[:name] } }&.flatten
|
49
|
+
tag_rows = tag_names&.compact&.map { |name| {name: name } }
|
50
|
+
Katello::AnsibleTag.insert_all(tag_rows, unique_by: [:name]) if tag_rows.any?
|
51
|
+
end
|
49
52
|
end
|
50
53
|
end
|
51
54
|
end
|
@@ -55,12 +55,15 @@ module Katello
|
|
55
55
|
bugzillas += build_bugzillas(katello_id, unit['references'])
|
56
56
|
cves += build_cves(katello_id, unit['references'])
|
57
57
|
packages += build_packages(katello_id, unit['pkglist'])
|
58
|
-
modules += build_modules(katello_id, unit['pkglist'])
|
59
58
|
end
|
60
59
|
|
61
60
|
Katello::ErratumBugzilla.insert_all(bugzillas, unique_by: [:erratum_id, :bug_id, :href]) if bugzillas.any?
|
62
61
|
Katello::ErratumCve.insert_all(cves, unique_by: [:erratum_id, :cve_id, :href]) if cves.any?
|
63
62
|
Katello::ErratumPackage.insert_all(packages, unique_by: [:erratum_id, :nvrea, :name, :filename]) if packages.any?
|
63
|
+
units.each do |unit|
|
64
|
+
katello_id = pulp_id_to_id[unit['id']]
|
65
|
+
modules += build_modules(katello_id, unit['pkglist'])
|
66
|
+
end
|
64
67
|
ModuleStreamErratumPackage.insert_all(modules, unique_by: [:module_stream_id, :erratum_package_id]) if modules.any?
|
65
68
|
nil
|
66
69
|
end
|
@@ -12,11 +12,12 @@ module Katello
|
|
12
12
|
|
13
13
|
def remote_options
|
14
14
|
options = common_remote_options
|
15
|
-
uri = URI(root.url)
|
15
|
+
uri = root.url ? URI(root.url) : nil
|
16
16
|
unless root.upstream_authentication_token.blank?
|
17
17
|
options.merge!(sles_auth_token: root.upstream_authentication_token)
|
18
18
|
end
|
19
|
-
options.merge!(url: uri.to_s
|
19
|
+
options.merge!(url: uri.to_s) if uri
|
20
|
+
options.merge!(policy: root.download_policy)
|
20
21
|
end
|
21
22
|
|
22
23
|
def publication_options(repository_version)
|
@@ -26,7 +26,7 @@ module Katello
|
|
26
26
|
api = repo_type.pulp3_api(smart_proxy)
|
27
27
|
version_hrefs = api.repository_versions
|
28
28
|
orphan_version_hrefs = api.list_all.collect do |pulp_repo|
|
29
|
-
mirror_repo_versions = api.versions_list_for_repository(pulp_repo.pulp_href, ordering:
|
29
|
+
mirror_repo_versions = api.versions_list_for_repository(pulp_repo.pulp_href, ordering: ['-pulp_created'])
|
30
30
|
version_hrefs = mirror_repo_versions.select { |repo_version| repo_version.number != 0 }.collect { |version| version.pulp_href }
|
31
31
|
|
32
32
|
version_hrefs - [pulp_repo.latest_version_href]
|
@@ -83,7 +83,7 @@ module Katello
|
|
83
83
|
|
84
84
|
remotes.each do |remote|
|
85
85
|
if !repo_names.include?(remote.name) && !acs_remotes.include?(remote.pulp_href)
|
86
|
-
tasks << api.delete_remote(
|
86
|
+
tasks << api.delete_remote(remote.pulp_href)
|
87
87
|
end
|
88
88
|
end
|
89
89
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# This file should contain all the record creation needed to seed the database with its default values.
|
2
2
|
# The data can then be loaded with the rake db:seed (or created alongside the db with db:setup).
|
3
3
|
#
|
4
|
-
#
|
4
|
+
# !! PLEASE KEEP THIS SCRIPT IDEMPOTENT !!
|
5
5
|
#
|
6
6
|
|
7
7
|
unless Rails.env.test?
|
@@ -21,17 +21,18 @@
|
|
21
21
|
angular.module('Bastion').value('simpleContentAccessEnabled', <%= Organization.current.simple_content_access? if Organization.current %>);
|
22
22
|
angular.module('Bastion').value('isManifestImported', <%= !!Organization.current&.manifest_imported?(cached: true) %>)
|
23
23
|
angular.module('Bastion').value('foreman', tfm);
|
24
|
-
angular.module('Bastion').value('repositoryTypes', angular.fromJson(
|
25
|
-
angular.module('Bastion').value('deleteHostOnUnregister', angular.fromJson(
|
26
|
-
angular.module('Bastion').value('globalContentProxy', angular.fromJson(
|
24
|
+
angular.module('Bastion').value('repositoryTypes', angular.fromJson(`<%= Katello::RepositoryTypeManager.enabled_repository_types.values.to_json.html_safe %>`));
|
25
|
+
angular.module('Bastion').value('deleteHostOnUnregister', angular.fromJson(`<%= Setting[:unregister_delete_host] %>`));
|
26
|
+
angular.module('Bastion').value('globalContentProxy', angular.fromJson(`<%= Setting[:content_default_http_proxy].empty? ? nil.to_json : Setting[:content_default_http_proxy].to_json.html_safe %>`));
|
27
27
|
angular.module('Bastion').value('entriesPerPage', "<%= Setting[:entries_per_page] %>");
|
28
28
|
angular.module('Bastion').value('contentViewSolveDependencies', "<%= Setting[:content_view_solve_dependencies] %>");
|
29
|
-
angular.module('Bastion').constant('BastionConfig', angular.fromJson(
|
29
|
+
angular.module('Bastion').constant('BastionConfig', angular.fromJson(`<%= Bastion.config.to_json.html_safe %>`));
|
30
30
|
angular.module('Bastion.auth').value('CurrentUser', {
|
31
31
|
id: <%= User.current.id %>,
|
32
32
|
admin: <%= User.current.admin || User.current.usergroups.any? { |group| group.admin } %>
|
33
33
|
});
|
34
|
-
angular.module('Bastion.auth').value('Permissions', angular.fromJson(
|
34
|
+
angular.module('Bastion.auth').value('Permissions', angular.fromJson(`<%= User.current.cached_roles.collect { |role| role.permissions }.flatten.to_json.html_safe %>`));
|
35
|
+
angular.module('Bastion').value('newHostDetailsUI', "<%= Setting[:host_details_ui] %>");
|
35
36
|
</script>
|
36
37
|
<% Bastion.plugins.each do |name, plugin| %>
|
37
38
|
<%= include_plugin_js(plugin) %>
|
data/lib/katello/version.rb
CHANGED
@@ -19,6 +19,7 @@ import { orgId } from '../../services/api';
|
|
19
19
|
const TableWrapper = ({
|
20
20
|
actionButtons,
|
21
21
|
alwaysShowActionButtons,
|
22
|
+
alwaysShowToggleGroup,
|
22
23
|
toggleGroup,
|
23
24
|
children,
|
24
25
|
metadata,
|
@@ -62,7 +63,7 @@ const TableWrapper = ({
|
|
62
63
|
const hideToolbar = !searchQuery && !filtersAreActive &&
|
63
64
|
allTableProps.status === STATUS.RESOLVED && total === 0;
|
64
65
|
const showActionButtons = actionButtons && (alwaysShowActionButtons || !hideToolbar);
|
65
|
-
const showToggleGroup = toggleGroup && !hideToolbar;
|
66
|
+
const showToggleGroup = toggleGroup && (alwaysShowToggleGroup || !hideToolbar);
|
66
67
|
const paginationParams = useCallback(() =>
|
67
68
|
({ per_page: perPage, page }), [perPage, page]);
|
68
69
|
const prevRequest = useRef({});
|
@@ -275,6 +276,7 @@ TableWrapper.propTypes = {
|
|
275
276
|
searchPlaceholderText: PropTypes.string,
|
276
277
|
actionButtons: PropTypes.node,
|
277
278
|
alwaysShowActionButtons: PropTypes.bool,
|
279
|
+
alwaysShowToggleGroup: PropTypes.bool,
|
278
280
|
toggleGroup: PropTypes.node,
|
279
281
|
children: PropTypes.node,
|
280
282
|
// additionalListeners are anything that should trigger another API call, e.g. a filter
|
@@ -319,6 +321,7 @@ TableWrapper.defaultProps = {
|
|
319
321
|
searchPlaceholderText: undefined,
|
320
322
|
actionButtons: null,
|
321
323
|
alwaysShowActionButtons: true,
|
324
|
+
alwaysShowToggleGroup: false,
|
322
325
|
toggleGroup: null,
|
323
326
|
displaySelectAllCheckbox: false,
|
324
327
|
selectedCount: 0,
|
@@ -46,6 +46,14 @@ import {
|
|
46
46
|
userPermissionsFromHostDetails,
|
47
47
|
} from '../../hostDetailsHelpers';
|
48
48
|
|
49
|
+
const moduleStreamSupported = ({ os, version }) =>
|
50
|
+
os.match(/RedHat|CentOS|Rocky|AlmaLinux|OracleLinux/i) && Number(version) > 7;
|
51
|
+
export const hideModuleStreamsTab = ({ hostDetails }) => {
|
52
|
+
const osMatch = hostDetails?.operatingsystem_name?.match(/(\w+) (\d+)/);
|
53
|
+
if (!osMatch) return true;
|
54
|
+
const [, os, version] = osMatch;
|
55
|
+
return !(osMatch && moduleStreamSupported({ os, version }));
|
56
|
+
};
|
49
57
|
|
50
58
|
const EnabledIcon = ({ streamText, streamInstallStatus, upgradable }) => {
|
51
59
|
switch (true) {
|
@@ -54,6 +54,10 @@ import {
|
|
54
54
|
getHostRepositorySets,
|
55
55
|
setContentOverrides,
|
56
56
|
} from './RepositorySetsActions';
|
57
|
+
|
58
|
+
import { selectOrganization, selectOrganizationStatus } from '../../Cards/SystemPurposeCard/SystemPurposeSelectors';
|
59
|
+
import { getOrganization } from '../../Cards/SystemPurposeCard/SystemPurposeActions';
|
60
|
+
|
57
61
|
import { REPOSITORY_SETS_KEY, STATUSES, STATUS_TO_PARAM, PARAM_TO_FRIENDLY_NAME } from './RepositorySetsConstants.js';
|
58
62
|
import { selectRepositorySetsStatus } from './RepositorySetsSelectors';
|
59
63
|
import './RepositorySetsTab.scss';
|
@@ -121,7 +125,7 @@ const ArchRestrictedIcon = ({ archRestricted }) => (
|
|
121
125
|
/>}
|
122
126
|
>
|
123
127
|
<Label color="orange" className="arch-restricted-label" style={{ marginLeft: '8px' }}>
|
124
|
-
{
|
128
|
+
{archRestricted}
|
125
129
|
</Label>
|
126
130
|
</Tooltip>
|
127
131
|
);
|
@@ -144,7 +148,7 @@ const OsRestrictedIcon = ({ osRestricted }) => (
|
|
144
148
|
/>}
|
145
149
|
>
|
146
150
|
<Label color="blue" className="os-restricted-label" style={{ marginLeft: '8px' }}>
|
147
|
-
{
|
151
|
+
{osRestricted}
|
148
152
|
</Label>
|
149
153
|
</Tooltip>
|
150
154
|
);
|
@@ -161,9 +165,16 @@ const RepositorySetsTab = () => {
|
|
161
165
|
const hostDetails = useSelector(state => selectAPIResponse(state, 'HOST_DETAILS'));
|
162
166
|
const {
|
163
167
|
id: hostId,
|
164
|
-
subscription_status: subscriptionStatus,
|
165
168
|
content_facet_attributes: contentFacetAttributes,
|
169
|
+
organization_id: orgId,
|
166
170
|
} = hostDetails;
|
171
|
+
|
172
|
+
const organizationDetails = useSelector(state => selectOrganization(state, orgId));
|
173
|
+
const orgStatus = useSelector(state => selectOrganizationStatus(state, orgId));
|
174
|
+
|
175
|
+
const {
|
176
|
+
simple_content_access: simpleContentAccess,
|
177
|
+
} = organizationDetails;
|
167
178
|
const canDoContentOverrides = can(
|
168
179
|
editHosts,
|
169
180
|
userPermissionsFromHostDetails({ hostDetails }),
|
@@ -179,7 +190,6 @@ const RepositorySetsTab = () => {
|
|
179
190
|
} = contentFacet;
|
180
191
|
const nonLibraryHost = contentViewDefault === false ||
|
181
192
|
lifecycleEnvironmentLibrary === false;
|
182
|
-
const simpleContentAccess = (Number(subscriptionStatus) === 5);
|
183
193
|
const [isBulkActionOpen, setIsBulkActionOpen] = useState(false);
|
184
194
|
const toggleBulkAction = () => setIsBulkActionOpen(prev => !prev);
|
185
195
|
const dispatch = useDispatch();
|
@@ -247,6 +257,12 @@ const RepositorySetsTab = () => {
|
|
247
257
|
simpleContentAccess, apiSortParams, statusSelected, STATUS_LABEL],
|
248
258
|
);
|
249
259
|
|
260
|
+
useEffect(() => {
|
261
|
+
if (orgId && orgStatus !== STATUS.RESOLVED) {
|
262
|
+
dispatch(getOrganization({ orgId }));
|
263
|
+
}
|
264
|
+
}, [orgId, orgStatus, dispatch]);
|
265
|
+
|
250
266
|
const response = useSelector(state => selectAPIResponse(state, REPOSITORY_SETS_KEY));
|
251
267
|
const { results, error: errorSearchBody, ...metadata } = response;
|
252
268
|
const status = useSelector(state => selectRepositorySetsStatus(state));
|
@@ -420,6 +436,7 @@ const RepositorySetsTab = () => {
|
|
420
436
|
} else {
|
421
437
|
alertText = nonScaAlert;
|
422
438
|
}
|
439
|
+
|
423
440
|
return (
|
424
441
|
<div>
|
425
442
|
<div id="repo-sets-tab">
|
@@ -522,7 +539,7 @@ const RepositorySetsTab = () => {
|
|
522
539
|
} = repoSet;
|
523
540
|
const { isEnabled, isOverridden } =
|
524
541
|
getEnabledValue({ enabled, enabledContentOverride });
|
525
|
-
const showArchRestricted = archRestricted !== 'noarch';
|
542
|
+
const showArchRestricted = archRestricted && archRestricted !== 'noarch';
|
526
543
|
return (
|
527
544
|
<Tr key={id} ouiaId={`tr-${rowIndex}`}>
|
528
545
|
{canDoContentOverrides ? (
|
@@ -8,7 +8,6 @@ import mockRepoSetData from './repositorySets.fixtures.json';
|
|
8
8
|
import mockBookmarkData from './bookmarks.fixtures.json';
|
9
9
|
import mockContentOverride from './contentOverrides.fixtures.json';
|
10
10
|
|
11
|
-
|
12
11
|
jest.mock('../../hostDetailsHelpers', () => ({
|
13
12
|
...jest.requireActual('../../hostDetailsHelpers'),
|
14
13
|
userPermissionsFromHostDetails: () => ({
|
@@ -33,8 +32,15 @@ const renderOptions = (facetAttributes = contentFacetAttributes) => ({
|
|
33
32
|
HOST_DETAILS: {
|
34
33
|
response: {
|
35
34
|
id: 1,
|
35
|
+
organization_id: 1,
|
36
36
|
content_facet_attributes: { ...facetAttributes },
|
37
|
-
|
37
|
+
},
|
38
|
+
status: 'RESOLVED',
|
39
|
+
},
|
40
|
+
ORGANIZATION_1: {
|
41
|
+
response: {
|
42
|
+
id: 1,
|
43
|
+
simple_content_access: true,
|
38
44
|
},
|
39
45
|
status: 'RESOLVED',
|
40
46
|
},
|
@@ -182,7 +188,6 @@ test('Toggle Group shows if it\'s the library environment but a non-default cont
|
|
182
188
|
queryByLabelText,
|
183
189
|
getByText,
|
184
190
|
} = renderWithRedux(<RepositorySetsTab />, options);
|
185
|
-
|
186
191
|
// Assert that the errata are now showing on the screen, but wait for them to appear.
|
187
192
|
await patientlyWaitFor(() => expect(getByText(firstRepoSet.contentUrl)).toBeInTheDocument());
|
188
193
|
expect(queryByLabelText('Limit to environment')).toBeInTheDocument();
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: katello
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.6.
|
4
|
+
version: 4.6.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- N/A
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-12-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -4472,52 +4472,30 @@ files:
|
|
4472
4472
|
- locale/README
|
4473
4473
|
- locale/action_names.rb
|
4474
4474
|
- locale/bn/katello.po
|
4475
|
-
- locale/bn/katello.po.time_stamp
|
4476
4475
|
- locale/cs/katello.po
|
4477
|
-
- locale/cs/katello.po.time_stamp
|
4478
4476
|
- locale/de/katello.po
|
4479
|
-
- locale/de/katello.po.time_stamp
|
4480
4477
|
- locale/en/katello.po
|
4481
|
-
- locale/en/katello.po.time_stamp
|
4482
4478
|
- locale/es/katello.po
|
4483
|
-
- locale/es/katello.po.time_stamp
|
4484
4479
|
- locale/fr/katello.po
|
4485
|
-
- locale/fr/katello.po.time_stamp
|
4486
4480
|
- locale/gu/katello.po
|
4487
|
-
- locale/gu/katello.po.time_stamp
|
4488
4481
|
- locale/hi/katello.po
|
4489
|
-
- locale/hi/katello.po.time_stamp
|
4490
4482
|
- locale/it/katello.po
|
4491
|
-
- locale/it/katello.po.time_stamp
|
4492
4483
|
- locale/ja/katello.po
|
4493
|
-
- locale/ja/katello.po.time_stamp
|
4494
4484
|
- locale/katello.pot
|
4495
4485
|
- locale/kn/katello.po
|
4496
|
-
- locale/kn/katello.po.time_stamp
|
4497
4486
|
- locale/ko/katello.po
|
4498
|
-
- locale/ko/katello.po.time_stamp
|
4499
4487
|
- locale/mr/katello.po
|
4500
|
-
- locale/mr/katello.po.time_stamp
|
4501
4488
|
- locale/or/katello.po
|
4502
|
-
- locale/or/katello.po.time_stamp
|
4503
4489
|
- locale/pa/katello.po
|
4504
|
-
- locale/pa/katello.po.time_stamp
|
4505
4490
|
- locale/pt/katello.po
|
4506
|
-
- locale/pt/katello.po.time_stamp
|
4507
4491
|
- locale/pt_BR/katello.po
|
4508
|
-
- locale/pt_BR/katello.po.time_stamp
|
4509
4492
|
- locale/ru/katello.po
|
4510
|
-
- locale/ru/katello.po.time_stamp
|
4511
4493
|
- locale/ta/katello.po
|
4512
|
-
- locale/ta/katello.po.time_stamp
|
4513
4494
|
- locale/te/katello.po
|
4514
|
-
- locale/te/katello.po.time_stamp
|
4515
4495
|
- locale/update-i18n
|
4516
4496
|
- locale/zanata.xml
|
4517
4497
|
- locale/zh_CN/katello.po
|
4518
|
-
- locale/zh_CN/katello.po.time_stamp
|
4519
4498
|
- locale/zh_TW/katello.po
|
4520
|
-
- locale/zh_TW/katello.po.time_stamp
|
4521
4499
|
- package.json
|
4522
4500
|
- vendor/assets/images/katello/add2.png
|
4523
4501
|
- vendor/assets/images/katello/addhost.png
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|