Added deletion rpms

This commit is contained in:
Alexey Berezhok
2025-12-23 23:33:01 +03:00
parent 97ee27fe79
commit 5f784270e2
8 changed files with 276 additions and 2 deletions

170
app.rb
View File

@@ -419,6 +419,176 @@ get "/prjedit/:id" do
end
end
get "/prjclean/:id" do
prj = ProjectsActions.new(cfg.get_projects_path, db)
if prj.path.nil?
print_error_page(503, "Путь к проектам не существует")
else
prj_info = prj.get_project(params["id"])
if prj_info.nil?
print_error_page(503, "Путь к проектам не существует")
else
@page_name = prj_info[:projname]
@proj_name = prj_info[:projname]
@proj_descr = prj_info[:descr]
@proj_id = prj_info[:id]
@proj_public = prj_info[:public]
@proj_tmpbuild = prj_info[:tmpstpbuild]
erb :prjclean1
end
end
end
post "/prjclean/:id" do
prj = ProjectsActions.new(cfg.get_projects_path, db)
if prj.path.nil?
print_error_page(503, "Путь к проектам не существует")
else
prj_info = prj.get_project(params["id"])
if prj_info.nil?
print_error_page(503, "Путь к проектам не существует")
else
if params["cancel"].nil? && params["delete"] == "delete" && !params["isclean"].nil?
redirect "/prjclean_step2/#{params["id"]}"
end
redirect "/prjedit/#{params["id"]}"
end
end
end
get "/prjclean_step2/:id" do
prj = ProjectsActions.new(cfg.get_projects_path, db)
if prj.path.nil?
print_error_page(503, "Путь к проектам не существует")
else
prj_info = prj.get_project(params["id"])
@page_name = prj_info[:projname]
@proj_name = prj_info[:projname]
@proj_id = prj_info[:id]
filepath = ""
proj_path = prj.get_project_repo(params["id"])
f_path = File.join(proj_path, filepath)
if File.exist?(f_path)
erb :prjclean2
else
print_error_page(503, "Файл не существует")
end
end
end
post "/prjclean_step2/:id" do
prj = ProjectsActions.new(cfg.get_projects_path, db)
if prj.path.nil?
print_error_page(503, "Путь к проектам не существует")
else
prj_info = prj.get_project(params["id"])
if prj_info.nil?
print_error_page(503, "Путь к проектам не существует")
else
if params["cancel"].nil? && params["delete"] == "delete" && params["inputvernum"].to_i > 0
numb = params["inputvernum"]
redirect "/prjclean_step3/#{params["id"]}?numb=#{numb}"
end
redirect "/prjedit/#{params["id"]}"
end
end
end
get "/prjclean_step3/:id" do
prj = ProjectsActions.new(cfg.get_projects_path, db)
if prj.path.nil?
print_error_page(503, "Путь к проектам не существует")
else
if params["numb"].to_i > 0
prj_info = prj.get_project(params["id"])
@page_name = prj_info[:projname]
@proj_name = prj_info[:projname]
@proj_descr = prj_info[:descr]
@proj_id = prj_info[:id]
filepath = ""
proj_path = prj.get_project_repo(params["id"])
f_path = File.join(proj_path, filepath)
rpm_list_stay = []
if File.exist?(f_path)
rpm_list = get_rpms_list_full(f_path)
repo = RepoManager.new(f_path)
rpm_result_list = {}
numb = params["numb"].to_i
rpm_list.each do |item|
f_name = File.basename item
rpm_info = repo.get_rpm_info(item)
if rpm_info[:error].nil?
p_name = "#{rpm_info[:pkginfo].name}"
if f_name =~ /\.src\.rpm$/
p_name = "#{rpm_info[:pkginfo].name}_src"
end
if rpm_result_list[p_name].nil?
rpm_result_list[p_name] = [[rpm_info[:pkginfo], item, rpm_info[:pkginfo].version]]
else
rpm_result_list[p_name] << [rpm_info[:pkginfo], item, rpm_info[:pkginfo].version]
rpm_result_list[p_name].sort! do |a, b|
if a[2] < b[2]
1
elsif a[2] > b[2]
-1
else
a[2] <=> b[2]
end
end
if rpm_result_list[p_name].length > numb
rpm_result_list[p_name].pop
end
end
else
rpm_list_stay << item
end
end
rpm_result_list.each_pair do |k, v|
v.each do |item|
rpm_list_stay << item[1]
end
end
delete_rpm_list = rpm_list - rpm_list_stay
@del_list = delete_rpm_list
erb :prjclean3
else
print_error_page(503, "Файл не существует")
end
else
print_error_page(503, "Число оставшихся пакетов должно быть более 0")
end
end
end
post "/prjclean_step3/:id" do
prj = ProjectsActions.new(cfg.get_projects_path, db)
if prj.path.nil?
print_error_page(503, "Путь к проектам не существует")
else
prj_info = prj.get_project(params["id"])
if prj_info.nil?
print_error_page(503, "Путь к проектам не существует")
else
if params["cancel"].nil? && params["delete"] == "delete" && params["prjrpmlst"].length > 0
@page_name = prj_info[:projname]
@proj_name = prj_info[:projname]
@proj_descr = prj_info[:descr]
@proj_id = prj_info[:id]
params["prjrpmlst"].each do |item|
File.unlink(item)
end
@rpm_list = params["prjrpmlst"]
erb :prjclean3_post
else
redirect "/prjedit/#{params["id"]}"
end
end
end
end
post "/prjagit/:id" do
prj = ProjectsActions.new(cfg.get_projects_path, db)
if prj.path.nil?