Added work with snapshots. Part 2

master
Alexey Berezhok 4 days ago
parent 5dd481a81c
commit 40f8a546f5

@ -1590,9 +1590,16 @@ get "/prjshot/:id" do
filepath = ""
proj_path = prj.get_project_repo(params["id"])
f_path = File.join(proj_path, filepath)
@rpms_list = []
if File.exist?(f_path)
@snap_list = prj.get_snap_list(prj_info[:id])
@rpms_list = [ "Снимок не выбран" ]
unless params["snap"].nil?
snap_shot = prj.get_project_snap(@proj_id, params["snap"])
if File.exist?(snap_shot)
@rpms_list = get_rpms_list(snap_shot)
end
end
@rpms_list = [ "Снимок не выбран" ] if @rpms_list.length == 0
erb :prjshot1
else
print_error_page(503, "Репозиторий не существует")
@ -1705,6 +1712,74 @@ post "/prjsnap_delete/:id" do
end
end
get "/prjsnap_restore/: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 :prjsnap_restore
else
print_error_page(503, "Снимок не существует")
end
end
end
end
post "/prjsnap_restore/: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["restore"] == "restore" && !params["yes"].nil?
prj.restore_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

@ -526,4 +526,14 @@ class ProjectsActions
end
end
end
def restore_snapshot(id, snap)
repo_path = get_project_repo(id)
snap_path = get_project_snap(id, snap)
if Dir.exist?(repo_path) && Dir.exist?(snap_path)
Dir.glob(File.join(repo_path, '*')).each { |file| File.unlink(file) if File.file?(file) || FileUtils.rm_rf(file) }
FileUtils.cp_r(Dir.glob(File.join(snap_path, '*')), repo_path)
end
end
end

@ -11,9 +11,11 @@
<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="/prjshot/<%= 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>
<td><a href="/prjsnap_restore/<%= ERB::Util.url_encode(@proj_id) %>?snap=<%= ERB::Util.url_encode(item) %>" class="icon-link"><i
class="bi bi-capslock"></i></a></td>
</tr>
<% end %>
</tbody>

@ -10,7 +10,7 @@
</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>
<button type="submit" class="btn btn-success" name="create" value="create">Создать</button>
</div>
</form>
</div>

@ -0,0 +1,18 @@
<%= erb :header %>
<div class="container">
<h2 class="text-center">Удаление сатрых версий пакетов проекта <%= @proj_name %></h2>
<form action="/prjsnap_restore/<%= 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="restore" value="restore">Восстановить</button>
</div>
</form>
</div>
<%= erb :footer %>
Loading…
Cancel
Save