From 40f8a546f51ac6a5812636d1ca2ec4e3f094c786 Mon Sep 17 00:00:00 2001 From: Alexey Berezhok Date: Thu, 25 Dec 2025 15:10:24 +0300 Subject: [PATCH] Added work with snapshots. Part 2 --- app.rb | 77 ++++++++++++++++++++++++++++++++++++++- classes/projects.rb | 10 +++++ views/prjshot1.erb | 4 +- views/prjshot_add.erb | 2 +- views/prjsnap_restore.erb | 18 +++++++++ 5 files changed, 108 insertions(+), 3 deletions(-) create mode 100644 views/prjsnap_restore.erb diff --git a/app.rb b/app.rb index 533418f..6a4be3c 100644 --- a/app.rb +++ b/app.rb @@ -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 diff --git a/classes/projects.rb b/classes/projects.rb index 37ac712..4c37842 100644 --- a/classes/projects.rb +++ b/classes/projects.rb @@ -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 diff --git a/views/prjshot1.erb b/views/prjshot1.erb index 63d1be7..e49bbaa 100644 --- a/views/prjshot1.erb +++ b/views/prjshot1.erb @@ -11,9 +11,11 @@ <% @snap_list.each do |item| %> - <%= item %> + <%= item %> + <% end %> diff --git a/views/prjshot_add.erb b/views/prjshot_add.erb index f851be9..ffae035 100644 --- a/views/prjshot_add.erb +++ b/views/prjshot_add.erb @@ -10,7 +10,7 @@
- +
diff --git a/views/prjsnap_restore.erb b/views/prjsnap_restore.erb new file mode 100644 index 0000000..672d7f7 --- /dev/null +++ b/views/prjsnap_restore.erb @@ -0,0 +1,18 @@ +<%= erb :header %> +
+

Удаление сатрых версий пакетов проекта <%= @proj_name %>

+
+
+ + +
+
+ + +
+
+
+<%= erb :footer %> \ No newline at end of file