diff --git a/src/api/app/controllers/concerns/scmsync_checker.rb b/src/api/app/controllers/concerns/scmsync_checker.rb
index 166efa67613..6c007a5d46f 100644
--- a/src/api/app/controllers/concerns/scmsync_checker.rb
+++ b/src/api/app/controllers/concerns/scmsync_checker.rb
@@ -4,6 +4,7 @@ module ScmsyncChecker
extend ActiveSupport::Concern
def check_scmsync
+ return if Flipper.enabled?(:scmsync, User.session)
return if @project&.scmsync.blank?
flash[:error] = "The project #{@project.name} is configured through scmsync. This is not supported by the OBS frontend"
diff --git a/src/api/app/controllers/webui/package_controller.rb b/src/api/app/controllers/webui/package_controller.rb
index bf954522569..b5183ff2219 100644
--- a/src/api/app/controllers/webui/package_controller.rb
+++ b/src/api/app/controllers/webui/package_controller.rb
@@ -16,12 +16,16 @@ class Webui::PackageController < Webui::WebuiController
save_person save_group remove_role view_file
buildresult rpmlint_result rpmlint_log rpmlint_summary files]
- before_action :check_scmsync, only: %i[requests revisions statistics users]
+ before_action :check_scmsync, only: %i[statistics users requests revisions]
before_action :set_package, only: %i[edit update show requests statistics revisions
branch_diff_info rdiff remove
save_person save_group remove_role view_file
- buildresult rpmlint_result rpmlint_log rpmlint_summary files users]
+ buildresult rpmlint_result rpmlint_log rpmlint_summary files users],
+ unless: -> { Flipper.enabled?(:scmsync, User.session) }
+ before_action :set_package_with_scmsync, only: %i[show revisions branch_diff_info rdiff view_file buildresult
+ rpmlint_result rpmlint_log rpmlint_summary files users],
+ if: -> { Flipper.enabled?(:scmsync, User.session) }
# rubocop:enable Rails/LexicallyScopedActionFilter
before_action :lints_list, only: %i[rpmlint_summary]
@@ -37,7 +41,7 @@ def index
def show
# FIXME: Remove this statement when scmsync is fully supported
- if @project.scmsync.present?
+ if @project.scmsync.present? && !Flipper.enabled?(:scmsync, User.session)
flash[:error] = "Package sources for project #{@project.name} are received through scmsync.
This is not supported by the OBS frontend"
redirect_back_or_to project_show_path(@project)
diff --git a/src/api/app/controllers/webui/packages/binaries_controller.rb b/src/api/app/controllers/webui/packages/binaries_controller.rb
index 8993c4e4287..ee7c5f32b9c 100644
--- a/src/api/app/controllers/webui/packages/binaries_controller.rb
+++ b/src/api/app/controllers/webui/packages/binaries_controller.rb
@@ -13,7 +13,8 @@ class BinariesController < Webui::WebuiController
before_action :require_login, except: [:index]
before_action :set_project
before_action :check_scmsync
- before_action :set_package
+ before_action :set_package, unless: -> { Flipper.enabled?(:scmsync, User.session) }
+ before_action :set_package_with_scmsync, if: -> { Flipper.enabled?(:scmsync, User.session) }
before_action :set_multibuild_flavor
before_action :set_repository
before_action :set_architecture, only: %i[show dependency filelist]
diff --git a/src/api/app/controllers/webui/packages/build_reason_controller.rb b/src/api/app/controllers/webui/packages/build_reason_controller.rb
index e51e79fcd7f..e034310e041 100644
--- a/src/api/app/controllers/webui/packages/build_reason_controller.rb
+++ b/src/api/app/controllers/webui/packages/build_reason_controller.rb
@@ -5,7 +5,8 @@ class BuildReasonController < Webui::WebuiController
before_action :set_project
before_action :check_scmsync
- before_action :set_package
+ before_action :set_package, unless: -> { Flipper.enabled?(:scmsync, User.session) }
+ before_action :set_package_with_scmsync, if: -> { Flipper.enabled?(:scmsync, User.session) }
before_action :set_repository
before_action :set_architecture
diff --git a/src/api/app/controllers/webui/packages/files_controller.rb b/src/api/app/controllers/webui/packages/files_controller.rb
index 573858c7f47..e86276f408f 100644
--- a/src/api/app/controllers/webui/packages/files_controller.rb
+++ b/src/api/app/controllers/webui/packages/files_controller.rb
@@ -6,7 +6,8 @@ class FilesController < Webui::WebuiController
before_action :set_project
before_action :check_scmsync, only: :show
- before_action :set_package
+ before_action :set_package, unless: -> { Flipper.enabled?(:scmsync, User.session) }
+ before_action :set_package_with_scmsync, if: -> { Flipper.enabled?(:scmsync, User.session) }
before_action :set_filename, only: %i[show update destroy blame]
before_action :ensure_existence, only: %i[show blame]
before_action :ensure_viewable, only: %i[show blame]
diff --git a/src/api/app/controllers/webui/packages/job_history_controller.rb b/src/api/app/controllers/webui/packages/job_history_controller.rb
index 46244edbd9d..ebc79d88757 100644
--- a/src/api/app/controllers/webui/packages/job_history_controller.rb
+++ b/src/api/app/controllers/webui/packages/job_history_controller.rb
@@ -5,7 +5,8 @@ class JobHistoryController < Webui::WebuiController
before_action :set_project
before_action :check_scmsync
- before_action :set_package
+ before_action :set_package, unless: -> { Flipper.enabled?(:scmsync, User.session) }
+ before_action :set_package_with_scmsync, if: -> { Flipper.enabled?(:scmsync, User.session) }
before_action :set_repository
before_action :set_architecture
diff --git a/src/api/app/controllers/webui/packages/meta_controller.rb b/src/api/app/controllers/webui/packages/meta_controller.rb
index 4fc400afe14..206e3a4ce00 100644
--- a/src/api/app/controllers/webui/packages/meta_controller.rb
+++ b/src/api/app/controllers/webui/packages/meta_controller.rb
@@ -4,7 +4,8 @@ class MetaController < Webui::WebuiController
include ScmsyncChecker
before_action :set_project
- before_action :set_package
+ before_action :set_package, unless: -> { Flipper.enabled?(:scmsync, User.session) }
+ before_action :set_package_with_scmsync, if: -> { Flipper.enabled?(:scmsync, User.session) }
before_action :check_scmsync
before_action :validate_xml, only: :update
diff --git a/src/api/app/controllers/webui/repositories_controller.rb b/src/api/app/controllers/webui/repositories_controller.rb
index e1f2b9bd591..b8d48b17ee6 100644
--- a/src/api/app/controllers/webui/repositories_controller.rb
+++ b/src/api/app/controllers/webui/repositories_controller.rb
@@ -5,7 +5,8 @@ class Webui::RepositoriesController < Webui::WebuiController
before_action :check_scmsync, if: -> { params[:package] }
before_action :set_repository, only: %i[state mark_important]
before_action :set_architectures, only: %i[index change_flag]
- before_action :set_package, only: %i[index change_flag], if: -> { params[:package] }
+ before_action :set_package, only: %i[index change_flag], if: -> { params[:package] && !Flipper.enabled?(:scmsync, User.session) }
+ before_action :set_package_with_scmsync, only: %i[index change_flag], if: -> { params[:package] && Flipper.enabled?(:scmsync, User.session) }
before_action :set_main_object, only: %i[index change_flag]
before_action :check_ajax, only: :change_flag
after_action :verify_authorized, except: %i[index state]
diff --git a/src/api/app/controllers/webui/webui_controller.rb b/src/api/app/controllers/webui/webui_controller.rb
index 23ca5769876..9299cc22492 100644
--- a/src/api/app/controllers/webui/webui_controller.rb
+++ b/src/api/app/controllers/webui/webui_controller.rb
@@ -105,6 +105,21 @@ def set_package
end
end
+ def set_package_with_scmsync
+ @package_name = params[:package] || params[:package_name]
+
+ return if @package_name.blank?
+
+ begin
+ @package = Package.get_by_project_and_name(@project.name, @package_name,
+ follow_multibuild: true,
+ follow_project_scmsync_links: Flipper.enabled?(:scmsync, User.session))
+ # why it's not found is of no concern
+ rescue APIError
+ raise Package::UnknownObjectError, "Package not found: #{@project.name}/#{@package_name}"
+ end
+ end
+
def set_repository
repository_name = params[:repository] || params[:repository_name]
@repository = @project.repositories.find_by(name: repository_name)
diff --git a/src/api/app/models/package.rb b/src/api/app/models/package.rb
index 19fda578d09..795fedef712 100644
--- a/src/api/app/models/package.rb
+++ b/src/api/app/models/package.rb
@@ -1005,6 +1005,8 @@ def update_instance(namespace = 'OBS', name = 'UpdateProject')
end
def developed_packages
+ return [] unless persisted?
+
packages = []
candidates = Package.where(develpackage_id: self).load
candidates.each do |candidate|
@@ -1046,6 +1048,8 @@ def update_if_dirty
end
def linking_packages
+ return [] unless persisted?
+
::Package.joins(:backend_package).where(backend_packages: { links_to_id: id })
end
diff --git a/src/api/app/models/project.rb b/src/api/app/models/project.rb
index b936912ddbb..9540dcef58e 100644
--- a/src/api/app/models/project.rb
+++ b/src/api/app/models/project.rb
@@ -410,6 +410,12 @@ def very_important_projects_with_categories
# class_methods
end
+ def backend_only_packages
+ Nokogiri::XML(Backend::Api::Search.packages_for_project(name)).xpath('//package').map do |package|
+ Package.get_by_project_and_name(name, package['name'], follow_multibuild: true, follow_project_scmsync_links: true)
+ end
+ end
+
def config
@config ||= ProjectConfigFile.new(project_name: name)
end
diff --git a/src/api/app/views/webui/package/_files_view.html.haml b/src/api/app/views/webui/package/_files_view.html.haml
index f0175ea8108..7c78641c77e 100644
--- a/src/api/app/views/webui/package/_files_view.html.haml
+++ b/src/api/app/views/webui/package/_files_view.html.haml
@@ -2,7 +2,7 @@
- nobody = !User.session
.card-body
- - if files.present?
+ - if files.present? && (!Flipper.enabled?(:scmsync, User.session) || !package.scmsync.present? || revision_parameter.present?)
%table.table.table-bordered.table-hover.table-sm.dt-responsive.w-100#files-table
%thead
%tr
@@ -16,6 +16,13 @@
can_modify: user_can_modify_package, nobody: nobody, srcmd5: srcmd5 }
= render partial: 'file', collection: files,
cached: proc { |file| [file['name'], file['mtime'], file['md5'], file_locals].hash }, locals: file_locals
+ - elsif Flipper.enabled?(:scmsync, User.session) && package.scmsync.present?
+ %i
+ This package is managed with
+ #{link_to('SCM', package.scmsync)}.
+ You can also
+ = link_to('browse source', package_show_path(project, package, rev: revision))
+ here
- else
%i This package has no files yet
- if user_can_modify_package
diff --git a/src/api/app/views/webui/package/_show_actions.html.haml b/src/api/app/views/webui/package/_show_actions.html.haml
index 496eeb37d6c..dcf8bf7dc02 100644
--- a/src/api/app/views/webui/package/_show_actions.html.haml
+++ b/src/api/app/views/webui/package/_show_actions.html.haml
@@ -2,27 +2,28 @@
%li.nav-item.action-report-bug
= render partial: 'webui/package/show_actions/bugzilla_owner', locals: { url: package.report_bug_or_bugzilla_url }
- if User.session
- - if current_rev && is_working && is_branchable
+ - if current_rev && is_working && is_branchable && !package.readonly?
= render partial: 'webui/package/show_actions/branch_package', locals: { package: package, project: project,
revision: revision }
- if current_rev && is_working
= render partial: 'webui/package/show_actions/submit_package', locals: { package: package, project: project,
revision: revision }
- - if User.possibly_nobody.can_modify?(package)
- = render partial: 'webui/package/show_actions/delete_package'
+ - unless package.readonly?
+ - if User.possibly_nobody.can_modify?(package)
+ = render partial: 'webui/package/show_actions/delete_package'
- - if package.kiwi_image? && policy(package).update?
- = render partial: 'webui/package/show_actions/view_kiwi', locals: { package_id: package.id }
+ - if package.kiwi_image? && policy(package).update?
+ = render partial: 'webui/package/show_actions/view_kiwi', locals: { package_id: package.id }
- - if services.present?
- = render partial: 'webui/package/show_actions/trigger_services', locals: { package: package, project: project }
- - else
- = render partial: 'webui/package/show_actions/request_role_addition', locals: { package: package, project: project }
- = render partial: 'webui/package/show_actions/request_deletion', locals: { package: package, project: project }
+ - if services.present?
+ = render partial: 'webui/package/show_actions/trigger_services', locals: { package: package, project: project }
+ - else
+ = render partial: 'webui/package/show_actions/request_role_addition', locals: { package: package, project: project }
+ = render partial: 'webui/package/show_actions/request_deletion', locals: { package: package, project: project }
- //TODO: only users w/o rights should see this, maintainers should get a different dialog:
- - if package.develpackage
- = render partial: 'webui/package/show_actions/request_devel_project_change', locals: { package: package, project: project }
+ //TODO: only users w/o rights should see this, maintainers should get a different dialog:
+ - if package.develpackage
+ = render partial: 'webui/package/show_actions/request_devel_project_change', locals: { package: package, project: project }
- = render partial: 'webui/shared/lock_unlock_comment', locals: { commentable: package }
- = render partial: 'webui/package/show_actions/report_package', locals: { package: package }
+ = render partial: 'webui/shared/lock_unlock_comment', locals: { commentable: package }
+ = render partial: 'webui/package/show_actions/report_package', locals: { package: package }
diff --git a/src/api/app/views/webui/package/_tabs.html.haml b/src/api/app/views/webui/package/_tabs.html.haml
index f2e2ee94d51..a218f512f93 100644
--- a/src/api/app/views/webui/package/_tabs.html.haml
+++ b/src/api/app/views/webui/package/_tabs.html.haml
@@ -10,13 +10,15 @@
- if Flipper.enabled?(:request_show_redesign, User.possibly_nobody)
= tab_link('RPM Lint', rpmlint_result_path(project, package), 'scrollable-tab-link')
= tab_link('Revisions', package_view_revisions_path(project, package), 'scrollable-tab-link')
- - if Flipper.enabled?(:request_index, User.session)
- = tab_link('Requests', packages_requests_path(project,
- package,
- state: %w[new review]),
- 'scrollable-tab-link', active: controller_name == 'bs_requests')
- - else
- = tab_link('Requests', package_requests_path(project, package), 'scrollable-tab-link')
+ - unless package.readonly?
+ - if Flipper.enabled?(:request_index, User.session)
+ = tab_link('Requests', packages_requests_path(project,
+ package,
+ state: %w[new review]),
+ 'scrollable-tab-link', active: controller_name == 'bs_requests')
+ - else
+ = tab_link('Requests', package_requests_path(project, package), 'scrollable-tab-link')
= tab_link('Users', package_users_path(project, package), 'scrollable-tab-link')
- = tab_link('Attributes', index_attribs_path(project, package), 'scrollable-tab-link')
+ - unless package.readonly?
+ = tab_link('Attributes', index_attribs_path(project, package), 'scrollable-tab-link')
= tab_link('Meta', project_package_meta_path(project, package), 'scrollable-tab-link')
diff --git a/src/api/app/views/webui/package/show.html.haml b/src/api/app/views/webui/package/show.html.haml
index 08a49e1378f..e0ef0a1ec84 100644
--- a/src/api/app/views/webui/package/show.html.haml
+++ b/src/api/app/views/webui/package/show.html.haml
@@ -85,17 +85,19 @@
is_current_rev: @is_current_rev,
current_rev: @current_rev,
revision: @revision,
+ revision_parameter: @revision_parameter,
srcmd5: @srcmd5,
spider_bot: @spider_bot }
- .comments
- .card#comments-list
- %h5.card-header.text-word-break-all
- Comments
- %span.badge.text-bg-primary{ id: "comment-counter-package-#{@package.id}" }
- = @comments.length
- .card-body#comments
- = render partial: 'webui/comment/show', locals: { commentable: @package,
- comment_counter_id: "#comment-counter-package-#{@package.id}" }
+ - unless @package.readonly?
+ .comments
+ .card#comments-list
+ %h5.card-header.text-word-break-all
+ Comments
+ %span.badge.text-bg-primary{ id: "comment-counter-package-#{@package.id}" }
+ = @comments.length
+ .card-body#comments
+ = render partial: 'webui/comment/show', locals: { commentable: @package,
+ comment_counter_id: "#comment-counter-package-#{@package.id}" }
- if User.session && User.possibly_nobody.can_modify?(@package)
= render partial: 'delete_dialog', locals: { project: @project, package: @package, cleanup_source: @cleanup_source }
diff --git a/src/api/app/views/webui/package/side_links/_assignments.html.haml b/src/api/app/views/webui/package/side_links/_assignments.html.haml
index 03010847f79..c17c6016f7b 100644
--- a/src/api/app/views/webui/package/side_links/_assignments.html.haml
+++ b/src/api/app/views/webui/package/side_links/_assignments.html.haml
@@ -8,7 +8,7 @@
%p.mb-0.link-danger
%i.fas.fa-user-minus
Unassign
-- else
+- elsif !package.readonly?
.dropdown#assignment-search
%button.btn.btn-sm.dropdown-toggle.ps-0.border-0{ data: { 'bs-toggle': 'dropdown', 'bs-auto-close': 'outside' }, aria: { expanded: 'false' } }
%strong
diff --git a/src/api/app/views/webui/packages/build_log/live_build_log.html.haml b/src/api/app/views/webui/packages/build_log/live_build_log.html.haml
index 70493577b39..c58195740f7 100644
--- a/src/api/app/views/webui/packages/build_log/live_build_log.html.haml
+++ b/src/api/app/views/webui/packages/build_log/live_build_log.html.haml
@@ -2,7 +2,7 @@
- @metarobots = 'noindex,nofollow'
.card.mb-3
- - unless @project.scmsync
+ - if Flipper.enabled?(:scmsync, User.session) || !@project.scmsync
= render partial: 'webui/package/tabs', locals: { project: @project, package: @package }
.card-body
%h3= @pagetitle
diff --git a/src/api/app/views/webui/project/_project_packages.html.haml b/src/api/app/views/webui/project/_project_packages.html.haml
index 063c4dcb7b0..63e086ecd66 100644
--- a/src/api/app/views/webui/project/_project_packages.html.haml
+++ b/src/api/app/views/webui/project/_project_packages.html.haml
@@ -7,9 +7,25 @@
.card-body
- if project.scmsync.present?
- %p
- = link_to project.scmsync do
- This project is managed in SCM
+ - if Flipper.enabled?(:scmsync, User.session)
+ %table.table.table-sm.table-bordered.table-hover.w-100#packages-table-scm
+ %thead
+ %tr
+ %th Name
+ %th SCM
+ %tbody
+ - project.backend_only_packages.each do |package|
+ %tr
+ %td
+ = link_to(package.name, package_show_path(project, package.name))
+ %td
+ = link_to(package.scmsync) do
+ %i.fas.fa-up-right-from-square
+ = URI.parse(package.scmsync).path[1..-1]
+ - else
+ %p
+ = link_to project.scmsync do
+ This project is managed in SCM
- elsif packages.present?
.obs-dataTable
%table.table.table-sm.table-bordered.table-hover.w-100#packages-table{ data: { source: package_index_path(project: project) } }
@@ -28,29 +44,35 @@
- if User.possibly_nobody.can_modify?(project) && show_package_actions?
.pt-4
%ul.nav
- %li.nav-item
- = link_to(new_package_path(project), class: 'nav-link') do
- %i.fas.fa-plus-circle.text-primary
- Create Package
- %li.nav-item
- = link_to(project_new_packages_branch_path(project), class: 'nav-link') do
- %i.fas.fa-code-branch.text-primary
- Branch Package
+ - if policy(Package.new(project: project)).create?
+ %li.nav-item
+ = link_to(new_package_path(project), class: 'nav-link') do
+ %i.fas.fa-plus-circle.text-primary
+ Create Package
+ - if policy(Package.new(project: project)).create_branch?
+ %li.nav-item
+ = link_to(project_new_packages_branch_path(project), class: 'nav-link') do
+ %i.fas.fa-code-branch.text-primary
+ Branch Package
- content_for :ready_function do
- :plain
- var package_datatable_columns = [{"data": "name"}]
-
- - if Flipper.enabled?(:package_version_tracking, User.session)
+ - if project.scmsync.present? && Flipper.enabled?(:scmsync, User.session)
:plain
- package_datatable_columns.push({"data": "version", "orderable": false})
-
- - if Flipper.enabled?(:labels, User.session)
+ initializeDataTable('#packages-table-scm');
+ - else
:plain
- package_datatable_columns.push({"data": "labels", "orderable": false})
+ var package_datatable_columns = [{"data": "name"}]
+
+ - if Flipper.enabled?(:package_version_tracking, User.session)
+ :plain
+ package_datatable_columns.push({"data": "version", "orderable": false})
- :plain
- package_datatable_columns.push({"data": "changed"})
- initializeRemoteDatatable('#packages-table', {
- "columns": package_datatable_columns
- });
+ - if Flipper.enabled?(:labels, User.session)
+ :plain
+ package_datatable_columns.push({"data": "labels", "orderable": false})
+
+ :plain
+ package_datatable_columns.push({"data": "changed"})
+ initializeRemoteDatatable('#packages-table', {
+ "columns": package_datatable_columns
+ });
diff --git a/src/api/app/views/webui/project/show.html.haml b/src/api/app/views/webui/project/show.html.haml
index 232f99a8516..5f1db2dd27b 100644
--- a/src/api/app/views/webui/project/show.html.haml
+++ b/src/api/app/views/webui/project/show.html.haml
@@ -45,7 +45,10 @@
aria: { controls: 'packages', selected: 'false' } }
Packages
%span.badge.text-bg-primary
- = @packages.length
+ - if @project.scmsync.present? && Flipper.enabled?(:scmsync, User.session)
+ = @project.backend_only_packages.count
+ - else
+ = @packages.length
- if @inherited_packages.present?
%li.nav-item
%a.nav-link#inherited-packages-tab{ href: '#inherited-packages', role: 'tab', data: { 'bs-toggle': 'tab' },
diff --git a/src/api/config/initializers/flipper.rb b/src/api/config/initializers/flipper.rb
index 8ce5f8a7bb2..9573afd5800 100644
--- a/src/api/config/initializers/flipper.rb
+++ b/src/api/config/initializers/flipper.rb
@@ -8,7 +8,8 @@
{ name: :labels, description: 'Allow to apply labels to packages, submit requests and projects to improve collaboration between build service users.' },
{ name: :request_index, description: 'Redesign of listing requests' },
{ name: :canned_responses, description: 'Create messages using templates' },
- { name: :package_version_tracking, description: 'Track the local and upstream versions of your packages' }
+ { name: :package_version_tracking, description: 'Track the local and upstream versions of your packages' },
+ { name: :scmsync, description: 'Display extended information about packages from external SCMs' }
].freeze
Flipper.configure do
diff --git a/src/api/spec/cassettes/Assignments/creating_an_assignment_for_a_package/creates_an_assignment_for_the_package.yml b/src/api/spec/cassettes/Assignments/creating_an_assignment_for_a_package/creates_an_assignment_for_the_package.yml
index 393af84341a..0ecd3f7cd8c 100644
--- a/src/api/spec/cassettes/Assignments/creating_an_assignment_for_a_package/creates_an_assignment_for_the_package.yml
+++ b/src/api/spec/cassettes/Assignments/creating_an_assignment_for_a_package/creates_an_assignment_for_the_package.yml
@@ -1,84 +1,17 @@
---
http_interactions:
- request:
- method: get
- uri: http://backend:5352/source/home:tom/test_package
- body:
- encoding: US-ASCII
- string: ''
- headers:
- X-Request-Id:
- - da04052e-2705-451e-887e-4d3e304fdabe
- Accept-Encoding:
- - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
- Accept:
- - "*/*"
- User-Agent:
- - Ruby
- response:
- status:
- code: 404
- message: project 'home tom' does not exist
- headers:
- Content-Type:
- - text/xml
- Cache-Control:
- - no-cache
- Connection:
- - close
- Content-Length:
- - '144'
- body:
- encoding: UTF-8
- string: |
-
- project 'home:tom' does not exist
- 404 project 'home:tom' does not exist
-
- recorded_at: Thu, 08 May 2025 08:57:20 GMT
-- request:
- method: get
- uri: http://backend:5352/source/home:tom/test_package?expand=1
- body:
- encoding: US-ASCII
- string: ''
- headers:
- Accept-Encoding:
- - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
- Accept:
- - "*/*"
- User-Agent:
- - Ruby
- response:
- status:
- code: 404
- message: project 'home tom' does not exist
- headers:
- Content-Type:
- - text/xml
- Cache-Control:
- - no-cache
- Connection:
- - close
- Content-Length:
- - '144'
+ method: put
+ uri: http://backend:5352/source/home:tom/_meta?user=tom
body:
encoding: UTF-8
string: |
-
- project 'home:tom' does not exist
- 404 project 'home:tom' does not exist
-
- recorded_at: Thu, 08 May 2025 08:57:20 GMT
-- request:
- method: get
- uri: http://backend:5352/source/home:tom/test_package
- body:
- encoding: US-ASCII
- string: ''
+
+
+
+
+
headers:
- X-Request-Id:
- - da04052e-2705-451e-887e-4d3e304fdabe
Accept-Encoding:
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
Accept:
@@ -87,8 +20,8 @@ http_interactions:
- Ruby
response:
status:
- code: 404
- message: project 'home tom' does not exist
+ code: 200
+ message: OK
headers:
Content-Type:
- text/xml
@@ -97,58 +30,28 @@ http_interactions:
Connection:
- close
Content-Length:
- - '144'
+ - '128'
body:
encoding: UTF-8
string: |
-
- project 'home:tom' does not exist
- 404 project 'home:tom' does not exist
-
- recorded_at: Thu, 08 May 2025 08:57:20 GMT
+
+
+
+
+
+ recorded_at: Thu, 21 Aug 2025 11:52:35 GMT
- request:
- method: get
- uri: http://backend:5352/source/home:tom/test_package?expand=0
- body:
- encoding: US-ASCII
- string: ''
- headers:
- Accept-Encoding:
- - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
- Accept:
- - "*/*"
- User-Agent:
- - Ruby
- response:
- status:
- code: 404
- message: project 'home tom' does not exist
- headers:
- Content-Type:
- - text/xml
- Cache-Control:
- - no-cache
- Connection:
- - close
- Content-Length:
- - '144'
+ method: put
+ uri: http://backend:5352/source/home:tom/test_package/_meta?user=user_1
body:
encoding: UTF-8
string: |
-
- project 'home:tom' does not exist
- 404 project 'home:tom' does not exist
-
- recorded_at: Thu, 08 May 2025 08:57:20 GMT
-- request:
- method: get
- uri: http://backend:5352/source/home:tom/test_package
- body:
- encoding: US-ASCII
- string: ''
+
+ The Road Less Traveled
+ Quam blanditiis velit nihil.
+
+
headers:
- X-Request-Id:
- - da04052e-2705-451e-887e-4d3e304fdabe
Accept-Encoding:
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
Accept:
@@ -157,8 +60,8 @@ http_interactions:
- Ruby
response:
status:
- code: 404
- message: project 'home tom' does not exist
+ code: 200
+ message: OK
headers:
Content-Type:
- text/xml
@@ -167,15 +70,16 @@ http_interactions:
Connection:
- close
Content-Length:
- - '144'
+ - '201'
body:
encoding: UTF-8
string: |
-
- project 'home:tom' does not exist
- 404 project 'home:tom' does not exist
-
- recorded_at: Thu, 08 May 2025 08:57:20 GMT
+
+ The Road Less Traveled
+ Quam blanditiis velit nihil.
+
+
+ recorded_at: Thu, 21 Aug 2025 11:52:35 GMT
- request:
method: get
uri: http://backend:5352/source/home:tom/test_package
@@ -184,7 +88,7 @@ http_interactions:
string: ''
headers:
X-Request-Id:
- - da04052e-2705-451e-887e-4d3e304fdabe
+ - f7a0f71f-217c-4577-b2d4-b1d439904806
Accept-Encoding:
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
Accept:
@@ -193,8 +97,8 @@ http_interactions:
- Ruby
response:
status:
- code: 404
- message: project 'home tom' does not exist
+ code: 200
+ message: OK
headers:
Content-Type:
- text/xml
@@ -203,24 +107,20 @@ http_interactions:
Connection:
- close
Content-Length:
- - '144'
+ - '87'
body:
encoding: UTF-8
string: |
-
- project 'home:tom' does not exist
- 404 project 'home:tom' does not exist
-
- recorded_at: Thu, 08 May 2025 08:57:20 GMT
+
+
+ recorded_at: Thu, 21 Aug 2025 11:52:42 GMT
- request:
method: get
- uri: http://backend:5352/build/home:tom/_result?lastbuild=1&locallink=1&multibuild=1&package=test_package&view=status
+ uri: http://backend:5352/source/home:tom/test_package?expand=1
body:
encoding: US-ASCII
string: ''
headers:
- X-Request-Id:
- - 4c670889-ef92-453a-a48f-050cfa858c2a
Accept-Encoding:
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
Accept:
@@ -229,8 +129,8 @@ http_interactions:
- Ruby
response:
status:
- code: 404
- message: project 'home tom' does not exist
+ code: 200
+ message: OK
headers:
Content-Type:
- text/xml
@@ -239,24 +139,22 @@ http_interactions:
Connection:
- close
Content-Length:
- - '144'
+ - '87'
body:
encoding: UTF-8
string: |
-
- project 'home:tom' does not exist
- 404 project 'home:tom' does not exist
-
- recorded_at: Thu, 08 May 2025 08:57:21 GMT
+
+
+ recorded_at: Thu, 21 Aug 2025 11:52:42 GMT
- request:
method: get
- uri: http://backend:5352/build/home:tom/_result?package=test_package&view=status
+ uri: http://backend:5352/source/home:tom/test_package
body:
encoding: US-ASCII
string: ''
headers:
X-Request-Id:
- - 04e5ca17-9a20-48c0-bd32-1cb4be86419c
+ - f7a0f71f-217c-4577-b2d4-b1d439904806
Accept-Encoding:
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
Accept:
@@ -265,8 +163,8 @@ http_interactions:
- Ruby
response:
status:
- code: 404
- message: project 'home tom' does not exist
+ code: 200
+ message: OK
headers:
Content-Type:
- text/xml
@@ -275,15 +173,13 @@ http_interactions:
Connection:
- close
Content-Length:
- - '144'
+ - '87'
body:
encoding: UTF-8
string: |
-
- project 'home:tom' does not exist
- 404 project 'home:tom' does not exist
-
- recorded_at: Thu, 08 May 2025 08:57:21 GMT
+
+
+ recorded_at: Thu, 21 Aug 2025 11:52:42 GMT
- request:
method: get
uri: http://backend:5352/source/home:tom/test_package
@@ -292,7 +188,7 @@ http_interactions:
string: ''
headers:
X-Request-Id:
- - b551b553-624c-4c47-9525-d9dd98d36b0c
+ - f7a0f71f-217c-4577-b2d4-b1d439904806
Accept-Encoding:
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
Accept:
@@ -301,8 +197,8 @@ http_interactions:
- Ruby
response:
status:
- code: 404
- message: project 'home tom' does not exist
+ code: 200
+ message: OK
headers:
Content-Type:
- text/xml
@@ -311,22 +207,22 @@ http_interactions:
Connection:
- close
Content-Length:
- - '144'
+ - '87'
body:
encoding: UTF-8
string: |
-
- project 'home:tom' does not exist
- 404 project 'home:tom' does not exist
-
- recorded_at: Thu, 08 May 2025 08:57:21 GMT
+
+
+ recorded_at: Thu, 21 Aug 2025 11:52:42 GMT
- request:
method: get
- uri: http://backend:5352/source/home:tom/test_package?expand=1
+ uri: http://backend:5352/build/home:tom/_result?lastbuild=1&locallink=1&multibuild=1&package=test_package&view=status
body:
encoding: US-ASCII
string: ''
headers:
+ X-Request-Id:
+ - bfcd637d-ab3b-40a7-96e1-29ab44b07e34
Accept-Encoding:
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
Accept:
@@ -335,8 +231,8 @@ http_interactions:
- Ruby
response:
status:
- code: 404
- message: project 'home tom' does not exist
+ code: 200
+ message: OK
headers:
Content-Type:
- text/xml
@@ -345,15 +241,13 @@ http_interactions:
Connection:
- close
Content-Length:
- - '144'
+ - '55'
body:
encoding: UTF-8
- string: |
-
- project 'home:tom' does not exist
- 404 project 'home:tom' does not exist
-
- recorded_at: Thu, 08 May 2025 08:57:21 GMT
+ string: '
+
+'
+ recorded_at: Thu, 21 Aug 2025 11:52:42 GMT
- request:
method: get
uri: http://backend:5352/source/home:tom/test_package
@@ -362,7 +256,7 @@ http_interactions:
string: ''
headers:
X-Request-Id:
- - b551b553-624c-4c47-9525-d9dd98d36b0c
+ - a7567488-6d8a-4721-98d0-848a49f57586
Accept-Encoding:
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
Accept:
@@ -371,8 +265,8 @@ http_interactions:
- Ruby
response:
status:
- code: 404
- message: project 'home tom' does not exist
+ code: 200
+ message: OK
headers:
Content-Type:
- text/xml
@@ -381,18 +275,16 @@ http_interactions:
Connection:
- close
Content-Length:
- - '144'
+ - '87'
body:
encoding: UTF-8
string: |
-
- project 'home:tom' does not exist
- 404 project 'home:tom' does not exist
-
- recorded_at: Thu, 08 May 2025 08:57:21 GMT
+
+
+ recorded_at: Thu, 21 Aug 2025 11:52:43 GMT
- request:
method: get
- uri: http://backend:5352/source/home:tom/test_package?expand=0
+ uri: http://backend:5352/source/home:tom/test_package?expand=1
body:
encoding: US-ASCII
string: ''
@@ -405,8 +297,8 @@ http_interactions:
- Ruby
response:
status:
- code: 404
- message: project 'home tom' does not exist
+ code: 200
+ message: OK
headers:
Content-Type:
- text/xml
@@ -415,15 +307,13 @@ http_interactions:
Connection:
- close
Content-Length:
- - '144'
+ - '87'
body:
encoding: UTF-8
string: |
-
- project 'home:tom' does not exist
- 404 project 'home:tom' does not exist
-
- recorded_at: Thu, 08 May 2025 08:57:21 GMT
+
+
+ recorded_at: Thu, 21 Aug 2025 11:52:43 GMT
- request:
method: get
uri: http://backend:5352/source/home:tom/test_package
@@ -432,7 +322,7 @@ http_interactions:
string: ''
headers:
X-Request-Id:
- - b551b553-624c-4c47-9525-d9dd98d36b0c
+ - a7567488-6d8a-4721-98d0-848a49f57586
Accept-Encoding:
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
Accept:
@@ -441,8 +331,8 @@ http_interactions:
- Ruby
response:
status:
- code: 404
- message: project 'home tom' does not exist
+ code: 200
+ message: OK
headers:
Content-Type:
- text/xml
@@ -451,15 +341,13 @@ http_interactions:
Connection:
- close
Content-Length:
- - '144'
+ - '87'
body:
encoding: UTF-8
string: |
-
- project 'home:tom' does not exist
- 404 project 'home:tom' does not exist
-
- recorded_at: Thu, 08 May 2025 08:57:21 GMT
+
+
+ recorded_at: Thu, 21 Aug 2025 11:52:43 GMT
- request:
method: get
uri: http://backend:5352/source/home:tom/test_package
@@ -468,7 +356,7 @@ http_interactions:
string: ''
headers:
X-Request-Id:
- - b551b553-624c-4c47-9525-d9dd98d36b0c
+ - a7567488-6d8a-4721-98d0-848a49f57586
Accept-Encoding:
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
Accept:
@@ -477,8 +365,8 @@ http_interactions:
- Ruby
response:
status:
- code: 404
- message: project 'home tom' does not exist
+ code: 200
+ message: OK
headers:
Content-Type:
- text/xml
@@ -487,15 +375,13 @@ http_interactions:
Connection:
- close
Content-Length:
- - '144'
+ - '87'
body:
encoding: UTF-8
string: |
-
- project 'home:tom' does not exist
- 404 project 'home:tom' does not exist
-
- recorded_at: Thu, 08 May 2025 08:57:21 GMT
+
+
+ recorded_at: Thu, 21 Aug 2025 11:52:43 GMT
- request:
method: get
uri: http://backend:5352/build/home:tom/_result?lastbuild=1&locallink=1&multibuild=1&package=test_package&view=status
@@ -504,43 +390,7 @@ http_interactions:
string: ''
headers:
X-Request-Id:
- - 2e3ccda0-353c-4260-a3cf-7ecbc8a6b54e
- Accept-Encoding:
- - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
- Accept:
- - "*/*"
- User-Agent:
- - Ruby
- response:
- status:
- code: 404
- message: project 'home tom' does not exist
- headers:
- Content-Type:
- - text/xml
- Cache-Control:
- - no-cache
- Connection:
- - close
- Content-Length:
- - '144'
- body:
- encoding: UTF-8
- string: |
-
- project 'home:tom' does not exist
- 404 project 'home:tom' does not exist
-
- recorded_at: Thu, 08 May 2025 08:57:21 GMT
-- request:
- method: get
- uri: http://backend:5352/build/home:tom/_result?package=test_package&view=status
- body:
- encoding: US-ASCII
- string: ''
- headers:
- X-Request-Id:
- - 75f5335e-39c1-4789-9779-5a6a23fbbaa7
+ - 2d495dca-f051-45c7-8db8-ed05ceb629ec
Accept-Encoding:
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
Accept:
@@ -549,8 +399,8 @@ http_interactions:
- Ruby
response:
status:
- code: 404
- message: project 'home tom' does not exist
+ code: 200
+ message: OK
headers:
Content-Type:
- text/xml
@@ -559,13 +409,11 @@ http_interactions:
Connection:
- close
Content-Length:
- - '144'
+ - '55'
body:
encoding: UTF-8
- string: |
-
- project 'home:tom' does not exist
- 404 project 'home:tom' does not exist
-
- recorded_at: Thu, 08 May 2025 08:57:21 GMT
+ string: '
+
+'
+ recorded_at: Thu, 21 Aug 2025 11:52:43 GMT
recorded_with: VCR 6.3.1
diff --git a/src/api/spec/cassettes/Webui_Packages_MetaController/GET_show/when_its_a_project_managed_via_scmsync/1_1_2_1.yml b/src/api/spec/cassettes/Webui_Packages_MetaController/GET_show/when_its_a_project_managed_via_scmsync/1_1_2_1.yml
new file mode 100644
index 00000000000..1003d98fcbe
--- /dev/null
+++ b/src/api/spec/cassettes/Webui_Packages_MetaController/GET_show/when_its_a_project_managed_via_scmsync/1_1_2_1.yml
@@ -0,0 +1,77 @@
+---
+http_interactions:
+- request:
+ method: put
+ uri: http://backend:5352/source/home:tom/_meta?user=tom
+ body:
+ encoding: UTF-8
+ string: |
+
+
+
+
+
+ headers:
+ Accept-Encoding:
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
+ Accept:
+ - "*/*"
+ User-Agent:
+ - Ruby
+ response:
+ status:
+ code: 200
+ message: OK
+ headers:
+ Content-Type:
+ - text/xml
+ Cache-Control:
+ - no-cache
+ Connection:
+ - close
+ Content-Length:
+ - '128'
+ body:
+ encoding: UTF-8
+ string: |
+
+
+
+
+
+ recorded_at: Mon, 18 Aug 2025 12:29:47 GMT
+- request:
+ method: get
+ uri: http://backend:5352/source/home:tom/some_package/_meta
+ body:
+ encoding: US-ASCII
+ string: ''
+ headers:
+ Accept-Encoding:
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
+ Accept:
+ - "*/*"
+ User-Agent:
+ - Ruby
+ response:
+ status:
+ code: 404
+ message: package 'some_package' does not exist in project 'home tom'
+ headers:
+ Content-Type:
+ - text/xml
+ Cache-Control:
+ - no-cache
+ Connection:
+ - close
+ Content-Length:
+ - '196'
+ body:
+ encoding: UTF-8
+ string: |
+
+ package 'some_package' does not exist in project 'home:tom'
+ 404 package 'some_package' does not exist in project 'home:tom'
+
+ recorded_at: Mon, 18 Aug 2025 12:29:47 GMT
+recorded_with: VCR 6.3.1
diff --git a/src/api/spec/cassettes/Webui_Packages_MetaController/GET_show/when_its_a_project_managed_via_scmsync/does_not_set_the_xml_representation_of_a_package.yml b/src/api/spec/cassettes/Webui_Packages_MetaController/GET_show/when_its_a_project_managed_via_scmsync/does_not_set_the_xml_representation_of_a_package.yml
new file mode 100644
index 00000000000..c19e33a1237
--- /dev/null
+++ b/src/api/spec/cassettes/Webui_Packages_MetaController/GET_show/when_its_a_project_managed_via_scmsync/does_not_set_the_xml_representation_of_a_package.yml
@@ -0,0 +1,77 @@
+---
+http_interactions:
+- request:
+ method: put
+ uri: http://backend:5352/source/home:tom/_meta?user=tom
+ body:
+ encoding: UTF-8
+ string: |
+
+
+
+
+
+ headers:
+ Accept-Encoding:
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
+ Accept:
+ - "*/*"
+ User-Agent:
+ - Ruby
+ response:
+ status:
+ code: 200
+ message: OK
+ headers:
+ Content-Type:
+ - text/xml
+ Cache-Control:
+ - no-cache
+ Connection:
+ - close
+ Content-Length:
+ - '128'
+ body:
+ encoding: UTF-8
+ string: |
+
+
+
+
+
+ recorded_at: Mon, 18 Aug 2025 12:29:46 GMT
+- request:
+ method: get
+ uri: http://backend:5352/source/home:tom/some_package/_meta
+ body:
+ encoding: US-ASCII
+ string: ''
+ headers:
+ Accept-Encoding:
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
+ Accept:
+ - "*/*"
+ User-Agent:
+ - Ruby
+ response:
+ status:
+ code: 404
+ message: package 'some_package' does not exist in project 'home tom'
+ headers:
+ Content-Type:
+ - text/xml
+ Cache-Control:
+ - no-cache
+ Connection:
+ - close
+ Content-Length:
+ - '196'
+ body:
+ encoding: UTF-8
+ string: |
+
+ package 'some_package' does not exist in project 'home:tom'
+ 404 package 'some_package' does not exist in project 'home:tom'
+
+ recorded_at: Mon, 18 Aug 2025 12:29:46 GMT
+recorded_with: VCR 6.3.1