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 %> +
+
+ <%=@rpm_data[:rpmname] %> + <% unless @build_id.nil? %> + + <% end %> + +
+
+
+

+ +

+
+
+ + + + + + + + + + + + + + + + + <% if @rpms_info.nil? %> + + <% else %> + + <% end %> + + +
Имя пакета<%= @pkg_info.name %>
Версия<%= @pkg_info.version %>
Архитектура<%= @pkg_info.arch %>
Исходный пакетНе найден<%= @rpms_info[:rpmname] %>.src
+
+
+
+
+

+ +

+
+
+
+ <% @pkg_info.changelog.each do |entry| %> +
+

<%= entry.time %> <%= entry.name %>

+

<%= entry.text %>

+
+ <% end %> +
+
+
+
+
+

+ +

+
+
+
+ <% @pkg_info.files.each do |file| %> +
<%= file.path %> (<%= file.size %>)
+ <% end %> +
+
+
+
+
+

+ +

+
+
+
+
Provides
+ <% @pkg_info.provides.each do |item| %> +
<%= item.name %>
+ <% end %> +
Requires
+ <% @pkg_info.requires.each do |item| %> +
<%= item.name %>
+ <% end %> +
Obsoletes
+ <% @pkg_info.obsoletes.each do |item| %> +
<%= item.name %>
+ <% end %> +
Conflists
+ <% @pkg_info.conflicts.each do |item| %> +
<%= item.name %>
+ <% end %> +
+
+
+
+
+
+<%= erb :footer %> \ No newline at end of file diff --git a/views/rpmlistgit.erb b/views/rpmlistgit.erb index 00632a9..a8c09a9 100644 --- a/views/rpmlistgit.erb +++ b/views/rpmlistgit.erb @@ -20,7 +20,7 @@ <%= item[:rpmname] %> <%= item[:create_at] %> <%= item[:repoid] %> - build#<%= item[:builid] %> + build#<%= item[:builid] %> Перейти к проекту Информация о пакете @@ -31,11 +31,15 @@