Added deletion rpms
This commit is contained in:
170
app.rb
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
|
||||
|
||||
18
views/prjclean1.erb
Normal file
18
views/prjclean1.erb
Normal file
@@ -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 %>
|
||||
18
views/prjclean2.erb
Normal file
18
views/prjclean2.erb
Normal file
@@ -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 %>
|
||||
41
views/prjclean3.erb
Normal file
41
views/prjclean3.erb
Normal file
@@ -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 %>
|
||||
22
views/prjclean3_post.erb
Normal file
22
views/prjclean3_post.erb
Normal file
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user