Added snapshot
This commit is contained in:
128
app.rb
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
|
||||
|
||||
40
views/prjshot1.erb
Normal file
40
views/prjshot1.erb
Normal file
@@ -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 %>
|
||||
17
views/prjshot_add.erb
Normal file
17
views/prjshot_add.erb
Normal file
@@ -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 %>
|
||||
18
views/prjshot_delete.erb
Normal file
18
views/prjshot_delete.erb
Normal file
@@ -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 %>
|
||||
Reference in New Issue
Block a user