Added deletion rpms

master
Alexey Berezhok 6 days ago
parent 97ee27fe79
commit 5f784270e2

170
app.rb

@ -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?

@ -59,3 +59,6 @@ def get_dirs_in_mock_cache(dir_path)
Dir.glob(File.join(dir_path, "*")).select { |f| File.directory?(f) }.map{ |f| File.basename(f) }
end
def get_rpms_list_full(directory)
Dir.glob(File.join(directory, "**", "*.rpm")).reject { |f| File.directory?(f) || f =~ /repodata\// }
end

@ -16,8 +16,8 @@ path = "locks/counter"
path = "locks/build"
[configs]
hide=open,amazon,anolis,circle,custom,euro,fedora,mageia,navy,alma,rocky
selected=msvsphere
hide=open,amazon,anolis,circle,custom,euro,fedora,mageia,navy,rocky
selected=alma
[pages]
items_per_page = 30

@ -0,0 +1,18 @@
<%= erb :header %>
<div class="container">
<h2 class="text-center">Удаление сатрых версий пакетов проекта <%= @proj_name %></h2>
<form action="/prjclean/<%= ERB::Util.url_encode(@proj_id) %>" method="post">
<div class="form-check form-switch text-center pb-3">
<input class="form-check-input" type="checkbox" role="switch" id="isclean" name="isclean">
<label class="form-check-label" for="isclean">
Вы уверены, что хотите удалить старые версии пакетов?<br />
Все старые версии пакетов проекта будут удалены, действие не подлежит отмене.
</label>
</div>
<div class="mb-3 text-center">
<button type="submit" class="btn btn-primary" name="cancel" value="cancel">Отменить</button>
<button type="submit" class="btn btn-danger" name="delete" value="delete">Удалить</button>
</div>
</form>
</div>
<%= erb :footer %>

@ -0,0 +1,18 @@
<%= erb :header %>
<div class="container">
<h2 class="text-center">Удаление сатрых версий пакетов проекта <%= @proj_name %></h2>
<form action="/prjclean_step2/<%= ERB::Util.url_encode(@proj_id) %>" method="post">
<div class="form-check form-switch text-center pb-3">
<label for="inputvernum" class="form-label">Число версий</label>
<input type="text" id="inputvernum" name="inputvernum" class="form-control" aria-describedby="vernumHelpBlock">
<div id="vernumHelpBlock" class="form-text">
Укажите число версий каждого пакета, которые должны остаться
</div>
</div>
<div class="mb-3 text-center">
<button type="submit" class="btn btn-primary" name="cancel" value="cancel">Отменить</button>
<button type="submit" class="btn btn-danger" name="delete" value="delete">Удалить</button>
</div>
</form>
</div>
<%= erb :footer %>

@ -0,0 +1,41 @@
<%= erb :header %>
<script src="/js/jquery.dropdown.min.js"></script>
<div class="container">
<div class="row">
<div class="col-4">
<h3 class="bg-secondary-subtle text-center border-bottom border-primary-subtle rounded-1 pb-1 mb-2">
<a href="/prjedit/<%= ERB::Util.url_encode(@proj_id) %>"><%= @proj_name %></a>
</h3>
<div class="pb-2"><%= @proj_descr %></div>
</div>
<div class="col-8">
<div class="vstack gap-3">
<form action="/prjclean_step3/<%= ERB::Util.url_encode(@proj_id) %>" method="post">
<div class="mb-3">
<label for="prjrpmlst" class="form-label">Пакеты для удаления (могут быть удалены из списка)</label>
<div class="prjrpmlist">
<select class="form-control" id="prjrpmlst" name="prjrpmlst[]" multiple>
<% @del_list.each do |item| %>
<option value="<%= item %>" selected><%= File.basename(item) %></option>
<% end %>
</select>
</div>
</div>
<div class="container">
<div style="padding-top: 45px;"></div>
</div>
<div class="mb-3 text-center">
<button type="submit" class="btn btn-primary" name="cancel" value="cancel">Отменить</button>
<button type="submit" class="btn btn-danger" name="delete" value="delete">Удалить</button>
</div>
</form>
</div>
</div>
</div>
</div>
<script>
$('.prjrpmlist').dropdown({
searchNoData: '<li style="color:#ddd">Нет данных</li>',
});
</script>
<%= erb :footer %>

@ -0,0 +1,22 @@
<%= erb :header %>
<div class="container">
<div class="row">
<div class="col-4">
<h3 class="bg-secondary-subtle text-center border-bottom border-primary-subtle rounded-1 pb-1 mb-2">
<a href="/prjedit/<%= ERB::Util.url_encode(@proj_id) %>"><%= @proj_name %></a>
</h3>
<div class="pb-2"><%= @proj_descr %></div>
</div>
<div class="col-8">
<div class="vstack gap-3">
<ul class="list-group">
<li class="list-group-item active" aria-current="true">Список удаленных пакетов (не забудьте пересоздать repoview)</li>
<% @rpm_list.each do |item| %>
<li class="list-group-item"><%= item %></li>
<% end %>
</ul>
</div>
</div>
</div>
</div>
<%= erb :footer %>

@ -57,6 +57,8 @@
class="bi bi-file-earmark-diff"></i><span class="ms-2">Просмотр подписанного репозитория</span></a>
<a href="/prjremoteaddr/<%= ERB::Util.url_encode(@proj_id) %>" class="list-group-item list-group-item-action list-group-item-dark icon-link"><i
class="bi bi-pin-map-fill"></i><span class="ms-2">Установить адрес подписаннго репозитория</span></a>
<a href="/prjclean/<%= ERB::Util.url_encode(@proj_id) %>" class="list-group-item list-group-item-action list-group-item-dark icon-link"><i
class="bi bi-suitcase"></i><span class="ms-2">Удалить старые версии пакетов</span></a>
<a href="/prjdelete/<%= ERB::Util.url_encode(@proj_id) %>" class="list-group-item list-group-item-action list-group-item-dark icon-link"><i
class="bi bi-trash"></i><span class="ms-2">Удалить проект</span></a>
</div>

Loading…
Cancel
Save