Added projects. Part 6
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1,4 +1,5 @@
|
||||
vendor
|
||||
repo
|
||||
db/*.sqlite3
|
||||
projects
|
||||
.ruby-lsp
|
||||
46
app.rb
46
app.rb
@@ -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)
|
||||
@db.save_git_project(prj_id, git_id)
|
||||
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 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>
|
||||
|
||||
Reference in New Issue
Block a user