Added projects. Part 6

master
alexey 1 month ago
parent 77f9fa7da2
commit c61763ba56

1
.gitignore vendored

@ -1,4 +1,5 @@
vendor
repo
db/*.sqlite3
projects
.ruby-lsp

@ -370,7 +370,7 @@ get "/prjedit/:id" do
@proj_descr = prj_info[:descr]
@proj_id = prj_info[:id]
repo_lst = repo.getrepos
proj_repo_list = prj.get_project_gits(prj_info[:id])
proj_repo_list = prj.get_project_gits(prj_info[:id], repo)
@repo_list = repo_lst.reject do |item|
fnd = false
proj_repo_list.each do |item2|
@ -416,14 +416,54 @@ post "/prjagit/:id" do
if fnd
session[:prj_modal_info] = "Ошибка"
session[:prj_modal_text] = "Данный git-репозиторий уже добавлен к проекту"
redirect back
else
prj.add_git_to_project(prj_info[:id], git_info[:id])
err = prj.add_git_to_project(prj_info[:id], git_info[:id], repo, git_info[:reponame])
if err.nil?
session[:prj_modal_info] = nil
session[:prj_modal_text] = nil
else
session[:prj_modal_info] = "Ошибка добавления git проекта"
session[:prj_modal_text] = err
end
end
end
end
end
end
redirect back
end
get "/prjrgit/:id/:git_id" do
prj = ProjectsActions.new(cfg.get_projects_path, db)
if prj.path.nil?
print_error_page(503, "Путь к проектам не существует")
else
repo = GitRepo.new(cfg.get_repo, db)
if repo.path.nil?
print_error_page(503, "Путь к репозиториям не существует")
else
prj_info = prj.get_project(params["id"])
if prj_info.nil?
print_error_page(503, "Путь к проектам не существует")
else
proj_repo_list = prj.get_project_gits(prj_info[:id])
git_info = repo.get_repo_short_info_by_id(params["git_id"].to_i)
if git_info.nil?
print_error_page(503, "Репозиторий исчез")
else
err = prj.renew_git_to_project(prj_info[:id], git_info[:id], repo, git_info[:reponame])
if err.nil?
session[:prj_modal_info] = nil
session[:prj_modal_text] = nil
else
session[:prj_modal_info] = "Ошибка обновления git проекта"
session[:prj_modal_text] = err
end
end
end
end
end
redirect back
end
not_found do

@ -165,7 +165,11 @@ class GitRepo
if repo.empty?
@error = "Репозиторий пустой, нельзя добавить в проект пустой репозиторий"
else
#TODO clone repo
if File.exist?(path)
FileUtils.rm_rf(path, secure: true)
end
Dir.mkdir(path)
Rugged::Repository.clone_at(repo.path, path)
end
else
@error = "Файла репозитория не существует"
@ -176,4 +180,18 @@ class GitRepo
end
@error
end
def is_repos_sync(repo_name, prj_repo_path)
res = false
repo = Rugged::Repository.new(prj_repo_path)
File.open("locks/gitcreate", "r") do |f|
f.flock(File::LOCK_SH)
git_path = File.join(@path, repo_name + ".git")
bare_repo = Rugged::Repository.new(git_path)
pp bare_repo.head
pp repo.head
res = (bare_repo.head.oid == repo.head.oid)
end
res
end
end

@ -7,6 +7,7 @@ PROJECTS_STRUCTURE = {
:CONFIGS => "configs",
:SRCPRP => "srcprp",
:SIGNED => "signed",
:SRC => "src",
}
class ProjectsActions
@ -46,6 +47,18 @@ class ProjectsActions
prj
end
def get_project_path(id)
@error = nil
fname = nil
prj = @db.proj(id)
if prj.nil?
@error = "Проекта с id = #{id} не существует"
else
fname = File.expand_path("#{prj[:projname]}.prj", @path)
end
fname
end
def create_project(name, description, configuration)
@error = nil
ret_val = 0
@ -87,11 +100,43 @@ class ProjectsActions
ret_val
end
def get_project_gits(id)
@db.get_gits_for_projects(id)
def get_project_gits(id, repo)
res = []
File.open("locks/prjcreate", "r") do |f|
f.flock(File::LOCK_EX)
res = @db.get_gits_for_projects(id)
res_sync = res.map do |item|
prj_p = get_project_path(id)
path = File.join(prj_p, PROJECTS_STRUCTURE[:SRC], item[:reponame])
item[:is_repo_synced] = repo.is_repos_sync(item[:reponame], path)
item
end
end
res
end
def add_git_to_project(prj_id, git_id, repo, git_name)
path = get_project_path(prj_id)
if @error.nil?
path = File.join(path, PROJECTS_STRUCTURE[:SRC], git_name)
err = repo.clone_repo_master(git_id, path)
if err.nil?
@db.save_git_project(prj_id, git_id)
end
else
err = @error
end
err
end
def add_git_to_project(prj_id, git_id)
@db.save_git_project(prj_id, git_id)
def renew_git_to_project(prj_id, git_id, repo, git_name)
path = get_project_path(prj_id)
if @error.nil?
path = File.join(path, PROJECTS_STRUCTURE[:SRC], git_name)
err = repo.clone_repo_master(git_id, path)
else
err = @error
end
err
end
end

@ -64,13 +64,20 @@
<div class="p-2 border border-primary rounded-2">
<% @proj_repo.each do |item| %>
<div class="row justify-content-between border-bottom border-light-subtle m-2">
<div class="col-10">
<div class="col-9">
<a href="/prjgitf/<%= ERB::Util.url_encode(@proj_id) %>/<%= ERB::Util.url_encode(item[:id]) %>" class="p-2"><%= item[:reponame] %></a>
</div>
<div class="col-1">
<a href="/prjdgit/<%= ERB::Util.url_encode(@proj_id) %>/<%= ERB::Util.url_encode(item[:id]) %>" class="p-2"><i class="bi bi-trash"></i></a>
</div>
<div class="col-1"><a href="/gitbld/<%= ERB::Util.url_encode(@proj_id) %>/<%= ERB::Util.url_encode(item[:id]) %>" class="p-2"><i class="bi bi-play-fill"></i></a></div>
<% unless item[:is_repo_synced] %>
<div class="col-1">
<a href="/prjrgit/<%= ERB::Util.url_encode(@proj_id) %>/<%= ERB::Util.url_encode(item[:id]) %>" class="p-2"><i class="bi bi-arrow-clockwise"></i></a>
</div>
<% end %>
<div class="col-1">
<a href="/gitbld/<%= ERB::Util.url_encode(@proj_id) %>/<%= ERB::Util.url_encode(item[:id]) %>" class="p-2"><i class="bi bi-play-fill"></i></a>
</div>
</div>
<% end %>
</div>

Loading…
Cancel
Save