From f04f926bd8a16738dc6211bfaa84b7197859cfc8 Mon Sep 17 00:00:00 2001
From: alexey
Date: Sun, 16 Mar 2025 18:08:13 +0300
Subject: [PATCH] mock build.Part 4
---
app.rb | 31 +++++++++++
classes/db.rb | 36 +++++++++++++
classes/repomanage.rb | 23 ++++++---
views/rpminfo.erb | 116 ++++++++++++++++++++++++++++++++++++++++++
views/rpmlistgit.erb | 12 +++--
5 files changed, 206 insertions(+), 12 deletions(-)
create mode 100644 views/rpminfo.erb
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 %>
+ <%= entry.time %> <%= entry.name %> <%= entry.text %>
+
+
+
+
+
+
+
+ Имя пакета
+ <%= @pkg_info.name %>
+
+
+ Версия
+ <%= @pkg_info.version %>
+
+
+ Архитектура
+ <%= @pkg_info.arch %>
+
+
+
+ Исходный пакет
+ <% if @rpms_info.nil? %>
+ Не найден
+ <% else %>
+ <%= @rpms_info[:rpmname] %>.src
+ <% end %>
+
+
+
+
+
+
+
+
+
+