diff --git a/app.rb b/app.rb index 0978d3e..0b325c0 100644 --- a/app.rb +++ b/app.rb @@ -833,15 +833,46 @@ get "/gitpackages/:git_id" do @page = params["p"].to_i if @page < 1 @page = 1 + else + @page = @page + 1 end end + if rpms_lst.nil? + rpms_lst = [] + end items_per_page = cfg.get_items_per_page @rpms_list = rpms_lst[(@page - 1) * items_per_page, items_per_page] + @max_pages = rpms_lst.length / items_per_page + if (@max_pages * items_per_page) != rpms_lst.length + @max_pages = @max_pages + 1 + end + @git_id = params["git_id"] erb :rpmlistgit end end end +get "/rpminfo/:rpm_id" do + rpm_info = db.get_rpm_info(params["rpm_id"]) + if rpm_info.nil? + print_error_page(503, "Пакета не существует") + else + @page_name = "Информация о пакете #{rpm_info[:rpmname]}" + @rpm_data = rpm_info + @repo_id = rpm_info[:repo_id] + rpm_reader = RPMReader.new() + rpm_pkg = rpm_reader.get_rpm_info(rpm_info[:savepath]) + if rpm_pkg[:error].nil? + @build_id = db.get_rpm_build(params["rpm_id"]) + @pkg_info = rpm_pkg[:pkginfo] + @rpms_info = db.get_rpm_srpms(params["rpm_id"]) + erb :rpminfo + else + print_error_page(503, "Ошибка чтения пакета #{rpm_info[:rpmname]}: #{rpm_pkg[:error]}") + end + end +end + not_found do status 404 @page_name = "Кто-то потерялся" diff --git a/classes/db.rb b/classes/db.rb index 0c4b1d7..8194132 100644 --- a/classes/db.rb +++ b/classes/db.rb @@ -270,4 +270,40 @@ class DBase def get_rpms_for_git(git_id) $DDB["select t2.id as rpmid, t2.rpmname, t1.reponame as repoid, t4.id as builid, t4.proj_id as prjid, t4.create_at from repos as t1 join rpms as t2 on t2.repo_id = t1.id join build_rpm as t3 on t3.rpm_id = t2.id join buildtask as t4 on t4.id = t3.build_id where t1.id = ? and t2.savepath not like '%.src.rpm' order by t4.create_at, t2.rpmname", git_id.to_i].all end + + def get_rpm_info(rpm_id) + Rpms[rpm_id.to_i] + end + + def get_rpm_build(rpm_id) + bld_info = BuildRpms.where(rpm_id: rpm_id.to_i).first + if bld_info.nil? + nil + else + bld_info[:build_id] + end + end + + def get_rpm_srpms(rpm_id) + bld_info = BuildRpms.where(rpm_id: rpm_id.to_i).first + if bld_info.nil? + nil + else + bld_info[:build_id] + result = BuildRpms.where(build_id: bld_info[:build_id].to_i) + if result.nil? + nil + else + result.each do |item| + rpm_p = Rpms[item[:rpm_id].to_i] + unless rpm_p.nil? + if rpm_p[:savepath] =~ /\.src\.rpm$/ + return rpm_p + end + end + end + end + nil + end + end end diff --git a/classes/repomanage.rb b/classes/repomanage.rb index b9efa22..d88719e 100644 --- a/classes/repomanage.rb +++ b/classes/repomanage.rb @@ -4,6 +4,19 @@ require "rpm" require_relative "runner" +class RPMReader + def get_rpm_info(path_to_rpm) + res = { :error => nil } + if File.exist?(path_to_rpm) + pkg = RPM::Package.open(path_to_rpm) + res[:pkginfo] = pkg + else + res[:error] = "#{path_to_rpm} не существует" + end + res + end +end + class RepoManager attr :path, :error, :last_status, :last_pid @@ -13,6 +26,7 @@ class RepoManager Dir.mkdir(path) end @path = path + @reader = RPMReader.new end def create_repo @@ -28,13 +42,6 @@ class RepoManager end def get_rpm_info(path_to_rpm) - res = { :error => nil } - if File.exist?(path_to_rpm) - pkg = RPM::Package.open(path_to_rpm) - res[:pkginfo] = pkg - else - res[:error] = "#{path_to_rpm} не существует" - end - res + @reader.get_rpm_info(path_to_rpm) end end diff --git a/views/rpminfo.erb b/views/rpminfo.erb new file mode 100644 index 0000000..53688da --- /dev/null +++ b/views/rpminfo.erb @@ -0,0 +1,116 @@ +<%= erb :header %> +
Имя пакета | +<%= @pkg_info.name %> | +|
---|---|---|
Версия | +<%= @pkg_info.version %> | +|
Архитектура | +<%= @pkg_info.arch %> | +|
Исходный пакет | + <% if @rpms_info.nil? %> +Не найден | + <% else %> +<%= @rpms_info[:rpmname] %>.src | + <% end %> +
<%= entry.time %> <%= entry.name %>
+<%= entry.text %>
+