Added projects. Part 2
This commit is contained in:
25
app.rb
25
app.rb
@@ -16,6 +16,7 @@ require_relative "classes/db"
|
|||||||
require_relative "classes/systeminfo"
|
require_relative "classes/systeminfo"
|
||||||
require_relative "classes/utilities"
|
require_relative "classes/utilities"
|
||||||
require_relative "classes/projects"
|
require_relative "classes/projects"
|
||||||
|
require_relative "classes/configs"
|
||||||
|
|
||||||
def print_error_page(error_status, error_meaasge)
|
def print_error_page(error_status, error_meaasge)
|
||||||
@page_name = "Ошибка выполнения"
|
@page_name = "Ошибка выполнения"
|
||||||
@@ -271,11 +272,11 @@ end
|
|||||||
|
|
||||||
get "/bldcfg" do
|
get "/bldcfg" do
|
||||||
@page_name = "Список конфигураций сборки"
|
@page_name = "Список конфигураций сборки"
|
||||||
hide_list = cfg.get_configs_hide
|
cfgs = ConfigsList.new(cfg)
|
||||||
select_list = cfg.get_configs_selected
|
result = cfgs.get_configs
|
||||||
@list_global = Dir["/etc/mock/*.cfg"].map { |item| [File.dirname(item), File.basename(item, ".cfg"), item] }.reject { |item| check_partname_in_array(item[1], hide_list) }
|
@list_global = result[:global]
|
||||||
@list_local = Dir["~/.config/mock/*.cfg"].map { |item| [File.dirname(item), File.basename(item, ".cfg"), item] }
|
@list_local = result[:local]
|
||||||
@list_selected = (@list_global + @list_local).select { |item| check_partname_in_array(item[1], select_list) }
|
@list_selected = result[:selected]
|
||||||
erb :cfgslist
|
erb :cfgslist
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -301,6 +302,20 @@ get "/projs" do
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
get "/prjcreate" do
|
||||||
|
@page_name = "Создать новый проект"
|
||||||
|
@old_name = session[:prj_old_name]
|
||||||
|
@old_description = session[:prj_old_description]
|
||||||
|
@old_list = session[:prj_old_list]
|
||||||
|
cfgs = ConfigsList.new(cfg)
|
||||||
|
result = cfgs.get_configs
|
||||||
|
@global_list = result[:global]
|
||||||
|
@local_list = result[:local]
|
||||||
|
@error_data = session[:prjcreate_error]
|
||||||
|
session[:prjcreate_error] = nil
|
||||||
|
erb :prjcrt
|
||||||
|
end
|
||||||
|
|
||||||
not_found do
|
not_found do
|
||||||
status 404
|
status 404
|
||||||
@page_name = "Кто-то потерялся"
|
@page_name = "Кто-то потерялся"
|
||||||
|
|||||||
27
classes/configs.rb
Normal file
27
classes/configs.rb
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
require_relative "utilities"
|
||||||
|
|
||||||
|
class ConfigsList
|
||||||
|
attr :error, :cfg
|
||||||
|
|
||||||
|
def initialize(cfg)
|
||||||
|
@cfg = cfg
|
||||||
|
end
|
||||||
|
|
||||||
|
def get_configs
|
||||||
|
hide_list = @cfg.get_configs_hide
|
||||||
|
select_list = @cfg.get_configs_selected
|
||||||
|
list_global = Dir["/etc/mock/*.cfg"].map { |item| [File.dirname(item), File.basename(item, ".cfg"), item] }.reject { |item| check_partname_in_array(item[1], hide_list) }
|
||||||
|
if list_global.nil?
|
||||||
|
list_global = []
|
||||||
|
end
|
||||||
|
list_local = Dir["~/.config/mock/*.cfg"].map { |item| [File.dirname(item), File.basename(item, ".cfg"), item] }
|
||||||
|
if list_local.nil?
|
||||||
|
list_local = []
|
||||||
|
end
|
||||||
|
list_selected = (list_global + list_local).select { |item| check_partname_in_array(item[1], select_list) }
|
||||||
|
if list_selected.nil?
|
||||||
|
list_selected = []
|
||||||
|
end
|
||||||
|
{ :global => list_global, :local => list_local, :selected => list_selected }
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -118,4 +118,16 @@ class DBase
|
|||||||
def proj_list
|
def proj_list
|
||||||
Projects.order(:id).all
|
Projects.order(:id).all
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def proj_create(proj_name, proj_descr)
|
||||||
|
@error = nil
|
||||||
|
data = Projects.where(projname: project_name).first
|
||||||
|
if data.nil?
|
||||||
|
id = Projects.insert(projname: project_name, descr: description, public: 1)
|
||||||
|
@last_id = id
|
||||||
|
else
|
||||||
|
@error = "Данный проект уже существует"
|
||||||
|
end
|
||||||
|
@error
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
require "sqlite3"
|
|
||||||
require "rugged"
|
require "rugged"
|
||||||
require "fileutils"
|
require "fileutils"
|
||||||
require_relative "db"
|
require_relative "db"
|
||||||
|
|||||||
@@ -1,5 +1,14 @@
|
|||||||
|
require "fileutils"
|
||||||
require_relative "db"
|
require_relative "db"
|
||||||
|
|
||||||
|
PROJECTS_STRUCTURE = {
|
||||||
|
:REPO => "repo",
|
||||||
|
:LOGS => "logs",
|
||||||
|
:CONFIGS => "configs",
|
||||||
|
:SRCPRP => "srcprp",
|
||||||
|
:SIGNED => "signed",
|
||||||
|
}
|
||||||
|
|
||||||
class ProjectsActions
|
class ProjectsActions
|
||||||
attr :path, :error, :db
|
attr :path, :error, :db
|
||||||
|
|
||||||
@@ -27,4 +36,40 @@ class ProjectsActions
|
|||||||
end
|
end
|
||||||
prj
|
prj
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def create_project(name, description, configuration)
|
||||||
|
@error = nil
|
||||||
|
ret_val = 0
|
||||||
|
project_name = sanitize_rcptname(name)
|
||||||
|
File.open("locks/prjcreate", "r") do |f|
|
||||||
|
f.flock(File::LOCK_EX)
|
||||||
|
fname = File.expand_path("#{project_name}.prj", @path)
|
||||||
|
if File.exist?(fname)
|
||||||
|
@error = "Проект с таким именем уже существует: #{project_name}"
|
||||||
|
ret_val = 1
|
||||||
|
else
|
||||||
|
Dir.mkdir(fname)
|
||||||
|
created = false
|
||||||
|
PROJECTS_STRUCTURE.each_pair do |key, value|
|
||||||
|
new_path = File.join(fname, value)
|
||||||
|
Dir.mkdir(new_path)
|
||||||
|
end
|
||||||
|
if File.exist?(configuration)
|
||||||
|
conf_path = File.join(@path, PROJECTS_STRUCTURE[:CONFIGS], project_name)
|
||||||
|
FileUtils.cp(configuration, conf_path)
|
||||||
|
@error = @db.proj_create(project_name, description)
|
||||||
|
if @error.nil?
|
||||||
|
created = true
|
||||||
|
end
|
||||||
|
else
|
||||||
|
ret_val = 1
|
||||||
|
@error = "Конфигурация #{configuration} не существует"
|
||||||
|
end
|
||||||
|
unless created
|
||||||
|
FileUtils.rm_rf(fname, secure: true)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
ret_val
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
49
views/prjcrt.erb
Normal file
49
views/prjcrt.erb
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
<%= erb :header %>
|
||||||
|
<script src="/js/jquery.dropdown.min.js"></script>
|
||||||
|
<% unless @error_data.nil? %>
|
||||||
|
<div class="container">
|
||||||
|
<div class="alert alert-warning alert-dismissible fade show" role="alert"><span><%= @error_data %></span><button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Закрыть"></button></div>
|
||||||
|
</div>
|
||||||
|
<% end %>
|
||||||
|
<div class="container">
|
||||||
|
<form action="/prjcreate" method="post">
|
||||||
|
<div class="mb-3">
|
||||||
|
<label for="projname" class="form-label">Название проекта (англиские буквы, _, .)</label>
|
||||||
|
<input type="text" class="form-control" id="projname" name="projname" value="<%= @old_name %>">
|
||||||
|
</div>
|
||||||
|
<div class="mb-3">
|
||||||
|
<label for="description" class="form-label">Описание проекта</label>
|
||||||
|
<textarea class="form-control" id="description" name="description" rows="3"><%= @old_description %></textarea>
|
||||||
|
</div>
|
||||||
|
<div class="mb-3">
|
||||||
|
<label for="conflist" class="form-label">Выберите конфигурацию окружения сборки для проекта</label>
|
||||||
|
<div class="conflist">
|
||||||
|
<select class="form-control" id="conflist" name="conflist">
|
||||||
|
<% @local_list.each do |item| %>
|
||||||
|
<% if !@old_list.nil? && @old_list == item[2] %>
|
||||||
|
<option value="<%= item[2] %>" selected><%= item[1] %></option>
|
||||||
|
<% else %>
|
||||||
|
<option value="<%= item[2] %>"><%= item[1] %></option>
|
||||||
|
<% end %>
|
||||||
|
<% end %>
|
||||||
|
<% @global_list.each do |item| %>
|
||||||
|
<% if !@old_list.nil? && @old_list == item[2] %>
|
||||||
|
<option value="<%= item[2] %>" selected><%= item[1] %></option>
|
||||||
|
<% else %>
|
||||||
|
<option value="<%= item[2] %>"><%= item[1] %></option>
|
||||||
|
<% end %>
|
||||||
|
<% end %>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="mb-3 text-center">
|
||||||
|
<button type="submit" class="btn btn-primary">Создать</button>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
<script>
|
||||||
|
$('.conflist').dropdown({
|
||||||
|
searchNoData: '<li style="color:#ddd">Нет данных</li>',
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
<%= erb :footer %>
|
||||||
Reference in New Issue
Block a user