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| %>