Skip to content

Commit a6f0447

Browse files
authored
Merge pull request openSUSE#15753 from hellcp-work/files-controller-p1
Remove package_files method from Webui::PackageController
2 parents 874981d + e9519b8 commit a6f0447

File tree

4 files changed

+27
-45
lines changed

4 files changed

+27
-45
lines changed

src/api/app/controllers/webui/package_controller.rb

+6-30
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ def show
8383
authorize @current_notification, :update?, policy_class: NotificationPolicy
8484
end
8585

86-
@services = @files.any? { |file| file[:name] == '_service' }
86+
@services = @files.any? { |file| file['name'] == '_service' }
8787

8888
@package.cache_revisions(@revision)
8989

@@ -305,14 +305,10 @@ def view_file
305305
@expand = params[:expand]
306306
@addeditlink = false
307307
if User.possibly_nobody.can_modify?(@package) && @rev.blank? && @package.scmsync.blank?
308-
begin
309-
files = package_files(@rev, @expand)
310-
rescue Backend::Error
311-
files = []
312-
end
308+
files = @package.dir_hash({ rev: @rev, expand: @expand }.compact).elements('entry')
313309
files.each do |file|
314-
if file[:name] == @filename
315-
@addeditlink = file[:editable]
310+
if file['name'] == @filename
311+
@addeditlink = editable_file?(@filename, file['size'].to_i)
316312
break
317313
end
318314
end
@@ -499,27 +495,6 @@ def validate_xml
499495
render layout: false, status: :bad_request, partial: 'layouts/webui/flash', object: flash
500496
end
501497

502-
def package_files(rev = nil, expand = nil)
503-
query = {}
504-
query[:expand] = expand if expand
505-
query[:rev] = rev if rev
506-
507-
dir_xml = @package.source_file(nil, query)
508-
return [] if dir_xml.blank?
509-
510-
dir = Xmlhash.parse(dir_xml)
511-
@serviceinfo = dir.elements('serviceinfo').first
512-
files = []
513-
dir.elements('entry') do |entry|
514-
file = Hash[*%i[name size mtime md5].map! { |x| [x, entry.value(x.to_s)] }.flatten]
515-
file[:viewable] = !binary_file?(file[:name]) && file[:size].to_i < 2**20 # max. 1 MB
516-
file[:editable] = file[:viewable] && !file[:name].match?(/^_service[_:]/)
517-
file[:srcmd5] = dir.value('srcmd5')
518-
files << file
519-
end
520-
files
521-
end
522-
523498
def require_architecture
524499
@architecture = Architecture.archcache[params[:arch]]
525500
return if @architecture
@@ -549,7 +524,8 @@ def set_file_details
549524
@current_rev = @package.rev
550525
@revision = @current_rev if !@revision && !@srcmd5 # on very first page load only
551526

552-
@files = package_files(@srcmd5 || @revision, @expand)
527+
files_xml = @package.source_file(nil, { rev: @srcmd5 || @revision, expand: @expand }.compact)
528+
@files = Xmlhash.parse(files_xml).elements('entry')
553529
rescue Backend::Error => e
554530
# TODO: crudest hack ever!
555531
if e.summary == 'service in progress' && @expand == 1

src/api/app/helpers/webui/package_helper.rb

+7-1
Original file line numberDiff line numberDiff line change
@@ -75,10 +75,16 @@ def expand_diff?(filename, state)
7575
state != 'deleted' && filename.exclude?('/') && (filename == '_patchinfo' || filename.ends_with?('.spec', '.changes'))
7676
end
7777

78-
def viewable_file?(filename)
78+
def viewable_file?(filename, size = nil)
79+
return false if size && size > 1.megabyte
80+
7981
!binary_file?(filename) && filename.exclude?('/')
8082
end
8183

84+
def editable_file?(filename, size = nil)
85+
viewable_file?(filename, size) && !filename.match?(/^_service[_:]/)
86+
end
87+
8288
def binary_file?(filename)
8389
return false unless (mime = Marcel::Magic.by_path(filename))
8490

Original file line numberDiff line numberDiff line change
@@ -1,26 +1,26 @@
1-
- can_be_removed = removable_file?(file_name: file[:name], package: package) && can_modify
2-
%tr{ id: "file-#{valid_xml_id(file[:name])}" }
1+
- can_be_removed = removable_file?(file_name: file['name'], package: package) && can_modify
2+
%tr{ id: "file-#{valid_xml_id(file['name'])}" }
33
%td.text-word-break-all
4-
- link_opts = { action: :view_file, project: project, package: package, filename: file[:name], expand: expand }
4+
- link_opts = { action: :view_file, project: project, package: package, filename: file['name'], expand: expand }
55
- unless is_current_rev
6-
- link_opts[:rev] = file[:srcmd5]
7-
= link_to_if(file[:viewable], nbsp(file[:name]), link_opts)
6+
- link_opts[:rev] = srcmd5
7+
= link_to_if(viewable_file?(file['name'], file['size'].to_i), nbsp(file['name']), link_opts)
88
%td.text-nowrap
9-
%span.d-none= file[:size].rjust(10, '0')
10-
= human_readable_fsize(file[:size])
11-
%td.text-nowrap{ data: { order: "-#{file[:mtime]}" } }
12-
= render TimeComponent.new(time: Time.zone.at(file[:mtime].to_i))
9+
%span.d-none= file['size'].rjust(10, '0')
10+
= human_readable_fsize(file['size'])
11+
%td.text-nowrap{ data: { order: "-#{file['mtime']}" } }
12+
= render TimeComponent.new(time: Time.zone.at(file['mtime'].to_i))
1313
/ limit download for anonymous user to avoid getting killed by crawlers
1414
- unless nobody
1515
%td.text-center<
16-
= link_to(file_url(project.name, package.name, file[:name], file[:srcmd5]), title: 'Download file', class: 'me-1') do
16+
= link_to(file_url(project.name, package.name, file['name'], srcmd5), title: 'Download file', class: 'me-1') do
1717
%i.fas.fa-download.text-secondary
1818
- if can_be_removed
1919
= link_to('#', title: 'Delete file', data: { 'bs-toggle': 'modal',
2020
'bs-target': '#delete-file-modal',
21-
confirmation_text: "Please confirm deletion of file '#{file[:name]}'",
21+
confirmation_text: "Please confirm deletion of file '#{file['name']}'",
2222
action: url_for(action: :remove_file,
2323
project: project,
2424
package: package,
25-
filename: file[:name]) }) do
25+
filename: file['name']) }) do
2626
%i.fas.fa-times-circle.text-danger

src/api/app/views/webui/package/_files_view.html.haml

+2-2
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@
1313
%th Actions
1414
%tbody
1515
- file_locals = { package: package, project: project, expand: expand, is_current_rev: is_current_rev,
16-
can_modify: user_can_modify_package, nobody: nobody }
16+
can_modify: user_can_modify_package, nobody: nobody, srcmd5: srcmd5 }
1717
= render partial: 'file', collection: files,
18-
cached: proc { |file| [file[:name], file[:mtime], file[:md5], file_locals].hash }, locals: file_locals
18+
cached: proc { |file| [file['name'], file['mtime'], file['md5'], file_locals].hash }, locals: file_locals
1919
- else
2020
%i This package has no files yet
2121
- if user_can_modify_package

0 commit comments

Comments
 (0)