From 6139670677c24505bd4bf729e3aaa5ada65008b4 Mon Sep 17 00:00:00 2001 From: Alexey Berezhok Date: Fri, 17 Apr 2026 18:03:36 +0300 Subject: [PATCH] Added abbility to upload custom rpm to the projects repo --- app.rb | 49 +++++++++++++++++++++++++++++++++++++++++++- classes/projects.rb | 36 ++++++++++++++++++++++++++++++++ views/prjinfo.erb | 2 ++ views/projaddrpm.erb | 33 +++++++++++++++++++++++++++++ 4 files changed, 119 insertions(+), 1 deletion(-) create mode 100644 views/projaddrpm.erb diff --git a/app.rb b/app.rb index a9f3ce0..6768d51 100644 --- a/app.rb +++ b/app.rb @@ -1495,7 +1495,7 @@ get "/prjremoteaddr/:id" do if prj_info.nil? print_error_page(503, "Путь к проектам не существует") else - @page_name = "Подписать проект #{prj_info[:projname]}" + @page_name = "Установить адрес для репозитория проекта #{prj_info[:projname]}" @proj_name = prj_info[:projname] @proj_id = params["id"] @addres = prj_info[:remote_address] @@ -1532,6 +1532,53 @@ post "/prjremoteaddr/:id" do end end +get "/prjaddrpm/: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 + @page_name = "Добавить rpm пакет в репозиторий #{prj_info[:projname]}" + @proj_name = prj_info[:projname] + @proj_id = params["id"] + @proj_dir_list = prj.get_repo_dirs_list(params["id"]) + erb :projaddrpm + end + end +end + +post "/prjaddrpm/: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["add"] == "add" + direct = if params["newdir"].strip == "" + params["directory"] + else + params["newdir"] + end + puts params + err = prj.add_rpm(params["id"], direct, params["rpm_file"]) + unless err.nil? + session[:prj_modal_info] = "Ошибка установки адреса проекта" + session[:prj_modal_text] = err + else + prj.recreate_repo(params["id"]) + end + end + redirect "/prjedit/#{params["id"]}" + end + end +end + get "/prjsignview/:id" do prj = ProjectsActions.new(cfg.get_projects_path, db) if prj.path.nil? diff --git a/classes/projects.rb b/classes/projects.rb index 1e72889..c81d463 100644 --- a/classes/projects.rb +++ b/classes/projects.rb @@ -538,4 +538,40 @@ class ProjectsActions FileUtils.cp_r(Dir.glob(File.join(snap_path, '*')), repo_path) end end + + def get_repo_dirs_list(id) + repo_path = get_project_repo(id) + dir_list = [] + if Dir.exist?(repo_path) + dir_list = Dir.entries(repo_path).reject { |entry| entry == '.' || entry == '..' || entry == 'repodata' } + end + dir_list + end + + def add_rpm(id, directory, rpm_file) + repo_path = get_project_repo(id) + if !Dir.exist?(repo_path) + return "Репозиторий отсутствует" + end + + target_dir = File.join(repo_path, directory) + unless Dir.exist?(target_dir) + Dir.mkdir(target_dir) + end + + target_file = File.join(target_dir, File.basename(rpm_file[:filename])) + if File.exist?(target_file) + return "Файл #{File.basename(rpm_file[:filename])} уже существует" + end + + begin + File.open(target_file, "wb") do |file| + file.write(rpm_file[:tempfile].read) + end + rescue => e + return "Ошибка при создании файла: #{e.message}" + end + + nil + end end diff --git a/views/prjinfo.erb b/views/prjinfo.erb index ee67b2d..378b987 100644 --- a/views/prjinfo.erb +++ b/views/prjinfo.erb @@ -46,6 +46,8 @@ конфигурацию сборки Добавить внутренний репозиторий из другого проекта + Добавить бинарный пакет в репозиторий Список всех пакетов diff --git a/views/projaddrpm.erb b/views/projaddrpm.erb new file mode 100644 index 0000000..fa9cd49 --- /dev/null +++ b/views/projaddrpm.erb @@ -0,0 +1,33 @@ +<%= erb :header %> +