Added snapshot

master
Alexey Berezhok 5 days ago
parent bacea404e2
commit 8b4410eee7

128
app.rb

@ -1577,6 +1577,134 @@ get "/prjsignview/:id/*" do
end
end
get "/prjshot/: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_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)
if File.exist?(f_path)
@snap_list = prj.get_snap_list(prj_info[:id])
@rpms_list = [ "Снимок не выбран" ]
erb :prjshot1
else
print_error_page(503, "Репозиторий не существует")
end
end
end
get "/prjsnap_add/: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_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)
if File.exist?(f_path)
erb :prjshot_add
else
print_error_page(503, "Репозиторий не существует")
end
end
end
post "/prjsnap_add/: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["create"] == "create" && !params["yes"].nil?
prj.create_snapshot(prj_info[:id])
end
redirect "/prjshot/#{params["id"]}"
end
end
end
get "/prjsnap_delete/: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_descr = prj_info[:descr]
@proj_id = prj_info[:id]
@snap_name = params["snap"]
if @snap_name.nil?
print_error_page(503, "Не указано имя снимка")
else
filepath = ""
proj_path = prj.get_project_snap(params["id"], params["snap"])
f_path = File.join(proj_path, filepath)
if File.exist?(f_path)
erb :prjshot_delete
else
print_error_page(503, "Снимок не существует")
end
end
end
end
post "/prjsnap_delete/: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_descr = prj_info[:descr]
@proj_id = prj_info[:id]
@snap_name = params["snap"]
if @snap_name.nil?
print_error_page(503, "Не указано имя снимка")
else
filepath = ""
proj_path = prj.get_project_snap(params["id"], params["snap"])
f_path = File.join(proj_path, filepath)
if File.exist?(f_path)
if params["cancel"].nil? && params["delete"] == "delete" && !params["yes"].nil?
prj.delete_snapshot(prj_info[:id], @snap_name)
end
redirect "/prjshot/#{params["id"]}"
else
print_error_page(503, "Снимок не существует")
end
end
end
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
end
end
end
get "/sanitize" do
#Подчистим гит проекты, которые есть в базе, но нет в файловой системе
all_gits = db.get_gits

@ -12,6 +12,7 @@ PROJECTS_STRUCTURE = {
:SRCPRP => "srcprp",
:SIGNED => "signed",
:SRC => "src",
:SNAP => "snapshot",
}
class ProjectsActions
@ -71,6 +72,11 @@ class ProjectsActions
File.join(proj_path, PROJECTS_STRUCTURE[:REPO])
end
def get_project_snap(id, snap)
proj_path = get_project_path(id)
File.join(proj_path, PROJECTS_STRUCTURE[:SNAP], snap)
end
def get_project_path_git(id, gitname)
proj_path = get_project_path(id)
File.join(proj_path, PROJECTS_STRUCTURE[:SRC], gitname)
@ -474,4 +480,47 @@ class ProjectsActions
repoman = RepoManager.new(repo_path)
repoman.create_repo
end
def get_snap_list(id)
proj_path = get_project_path(id)
snap_path = File.join(proj_path, PROJECTS_STRUCTURE[:SNAP])
unless Dir.exist?(snap_path)
FileUtils.mkdir_p(snap_path)
end
snap_list = Dir.glob(File.join(snap_path, "*")).select { |path| File.directory?(path) }.map { |dir| File.basename(dir) }
return snap_list
end
def create_snapshot(id)
proj_path = get_project_path(id)
snap_path = File.join(proj_path, PROJECTS_STRUCTURE[:SNAP])
repo_path = File.join(proj_path, PROJECTS_STRUCTURE[:REPO])
unless Dir.exist?(snap_path)
FileUtils.mkdir_p(snap_path)
end
date_str = Time.now.strftime("%Y-%m-%d")
snapshot_dir = "#{date_str}_0"
while Dir.exist?(File.join(snap_path, snapshot_dir))
num = snapshot_dir.split("_").last.to_i
num += 1
snapshot_dir = "#{date_str}_#{num}"
end
snapshot_full_path = File.join(snap_path, snapshot_dir)
FileUtils.cp_r(repo_path, snapshot_full_path)
end
def delete_snapshot(id, snap)
snap_path = get_project_snap(id, snap)
if File.exist?(snap_path)
FileUtils.rm_rf(snap_path)
end
end
end

@ -49,6 +49,8 @@
<a href="/prjrpm/<%= ERB::Util.url_encode(@proj_id) %>" class="list-group-item list-group-item-action list-group-item-dark icon-link"><i
class="bi bi-box"></i><span class="ms-2">Список всех
пакетов</span></a>
<a href="/prjshot/<%= ERB::Util.url_encode(@proj_id) %>" class="list-group-item list-group-item-action list-group-item-dark icon-link"><i
class="bi bi-camera-fill"></i><span class="ms-2">Управление снимками репозитория</span></a>
<a href="/prjbuilds/<%= ERB::Util.url_encode(@proj_id) %>" class="list-group-item list-group-item-action list-group-item-dark icon-link"><i
class="bi bi-list"></i><span class="ms-2">Список сборок проекта</span></a>
<a href="/prjsign/<%= ERB::Util.url_encode(@proj_id) %>" class="list-group-item list-group-item-action list-group-item-dark icon-link"><i

@ -0,0 +1,40 @@
<%= 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">
<%= @proj_name %>
</h3>
<div class="pb-2"><%= @proj_descr %></div>
<div>
<table class="table">
<tbody>
<% @snap_list.each do |item| %>
<tr>
<td><a href="/prjsnap_info/<%= ERB::Util.url_encode(@proj_id) %>/?snap=<%= ERB::Util.url_encode(item) %>"><%= item %></a></td>
<td><a href="/prjsnap_delete/<%= ERB::Util.url_encode(@proj_id) %>/?snap=<%= ERB::Util.url_encode(item) %>" class="icon-link"><i
class="bi bi-trash3"></i></a></td>
</tr>
<% end %>
</tbody>
</table>
</div>
</div>
<div class="col-8">
<div class="vstack gap-3">
<div class="p-2">
<a href="/prjsnap_add/<%= ERB::Util.url_encode(@proj_id) %>" class="icon-link"><i
class="bi bi-plus-circle"></i><span class="ms-2">Создать снимок текущего репозитория</span></a>
</div>
<div class="p-2">
<ul class="list-group">
<% @rpms_list.each do |rpm| %>
<li class="list-group-item"><%= rpm %></li>
<% end %>
</ul>
</div>
</div>
</div>
</div>
</div>
<%= erb :footer %>

@ -0,0 +1,17 @@
<%= erb :header %>
<div class="container">
<h2 class="text-center">Удаление сатрых версий пакетов проекта <%= @proj_name %></h2>
<form action="/prjsnap_add/<%= 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="yes" name="yes">
<label class="form-check-label" for="yes">
Вы уверены, что хотите создать копию текущего репозитория?
</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="create" value="create">Создать</button>
</div>
</form>
</div>
<%= erb :footer %>

@ -0,0 +1,18 @@
<%= erb :header %>
<div class="container">
<h2 class="text-center">Удаление сатрых версий пакетов проекта <%= @proj_name %></h2>
<form action="/prjsnap_delete/<%= ERB::Util.url_encode(@proj_id) %>/?snap=<% ERB::Util.url_encode(@snap_name) %>" method="post">
<div class="form-check form-switch text-center pb-3">
<input class="form-check-input" type="checkbox" role="switch" id="yes" name="yes">
<label class="form-check-label" for="yes">
Вы уверены, что хотите удалить снимок <%= @snap_name %>?<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 %>
Loading…
Cancel
Save