Added abbility to upload custom rpm to the projects repo

This commit is contained in:
Alexey Berezhok
2026-04-17 18:03:36 +03:00
parent cbe4505d1e
commit 6139670677
4 changed files with 119 additions and 1 deletions

49
app.rb
View File

@@ -1495,7 +1495,7 @@ get "/prjremoteaddr/:id" do
if prj_info.nil? if prj_info.nil?
print_error_page(503, "Путь к проектам не существует") print_error_page(503, "Путь к проектам не существует")
else else
@page_name = "Подписать проект #{prj_info[:projname]}" @page_name = "Установить адрес для репозитория проекта #{prj_info[:projname]}"
@proj_name = prj_info[:projname] @proj_name = prj_info[:projname]
@proj_id = params["id"] @proj_id = params["id"]
@addres = prj_info[:remote_address] @addres = prj_info[:remote_address]
@@ -1532,6 +1532,53 @@ post "/prjremoteaddr/:id" do
end end
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 get "/prjsignview/:id" do
prj = ProjectsActions.new(cfg.get_projects_path, db) prj = ProjectsActions.new(cfg.get_projects_path, db)
if prj.path.nil? if prj.path.nil?

View File

@@ -538,4 +538,40 @@ class ProjectsActions
FileUtils.cp_r(Dir.glob(File.join(snap_path, '*')), repo_path) FileUtils.cp_r(Dir.glob(File.join(snap_path, '*')), repo_path)
end end
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 end

View File

@@ -46,6 +46,8 @@
конфигурацию сборки</span></a> конфигурацию сборки</span></a>
<a href="/prjaddrepo/<%= ERB::Util.url_encode(@proj_id) %>" class="list-group-item list-group-item-action list-group-item-dark icon-link"><i <a href="/prjaddrepo/<%= ERB::Util.url_encode(@proj_id) %>" class="list-group-item list-group-item-action list-group-item-dark icon-link"><i
class="bi bi-archive"></i><span class="ms-2">Добавить внутренний репозиторий из другого проекта</span></a> class="bi bi-archive"></i><span class="ms-2">Добавить внутренний репозиторий из другого проекта</span></a>
<a href="/prjaddrpm/<%= ERB::Util.url_encode(@proj_id) %>" class="list-group-item list-group-item-action list-group-item-dark icon-link"><i
class="bi bi-bag-dash"></i><span class="ms-2">Добавить бинарный пакет в репозиторий</span></a>
<a href="/prjrpm/<%= ERB::Util.url_encode(@proj_id) %>" class="list-group-item list-group-item-action list-group-item-dark icon-link"><i <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">Список всех class="bi bi-box"></i><span class="ms-2">Список всех
пакетов</span></a> пакетов</span></a>

33
views/projaddrpm.erb Normal file
View File

@@ -0,0 +1,33 @@
<%= erb :header %>
<div class="container">
<h2 class="text-center">Установить адрес для репозитория проекта <%= @proj_name %></h2>
<form action="/prjaddrpm/<%= ERB::Util.url_encode(@proj_id) %>" method="post" enctype='multipart/form-data'>
<div class="text-center pb-3">
<label class="form-label" for="newdir">
Создать новый каталог с именем (может быть пустым, если уже существует нужный каталог):
</label>
<input class="form-control" type="text" id="newdir" name="newdir" value="">
</div>
<div class="text-center pb-3">
<label class="form-label" for="directory">
Выберите каталог куда будет помещен файл:
</label>
<select class="form-select" id="directory" name="directory">
<% @proj_dir_list.each do |dir| %>
<option value="<%= ERB::Util.html_escape(dir) %>"><%= ERB::Util.html_escape(dir) %></option>
<% end %>
</select>
</div>
<div class="text-center pb-3">
<label class="form-label" for="rpm_file">
Укажите rpm файл:
</label>
<input class="form-control" type="file" id="rpm_file" name="rpm_file" required>
</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="add" value="add">Добавить</button>
</div>
</form>
</div>
<%= erb :footer %>