Added projects. Part 6
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1,4 +1,5 @@
|
|||||||
vendor
|
vendor
|
||||||
repo
|
repo
|
||||||
db/*.sqlite3
|
db/*.sqlite3
|
||||||
|
projects
|
||||||
.ruby-lsp
|
.ruby-lsp
|
||||||
46
app.rb
46
app.rb
@@ -370,7 +370,7 @@ get "/prjedit/:id" do
|
|||||||
@proj_descr = prj_info[:descr]
|
@proj_descr = prj_info[:descr]
|
||||||
@proj_id = prj_info[:id]
|
@proj_id = prj_info[:id]
|
||||||
repo_lst = repo.getrepos
|
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|
|
@repo_list = repo_lst.reject do |item|
|
||||||
fnd = false
|
fnd = false
|
||||||
proj_repo_list.each do |item2|
|
proj_repo_list.each do |item2|
|
||||||
@@ -416,14 +416,54 @@ post "/prjagit/:id" do
|
|||||||
if fnd
|
if fnd
|
||||||
session[:prj_modal_info] = "Ошибка"
|
session[:prj_modal_info] = "Ошибка"
|
||||||
session[:prj_modal_text] = "Данный git-репозиторий уже добавлен к проекту"
|
session[:prj_modal_text] = "Данный git-репозиторий уже добавлен к проекту"
|
||||||
redirect back
|
|
||||||
else
|
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
|
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
|
end
|
||||||
|
|
||||||
not_found do
|
not_found do
|
||||||
|
|||||||
@@ -165,7 +165,11 @@ class GitRepo
|
|||||||
if repo.empty?
|
if repo.empty?
|
||||||
@error = "Репозиторий пустой, нельзя добавить в проект пустой репозиторий"
|
@error = "Репозиторий пустой, нельзя добавить в проект пустой репозиторий"
|
||||||
else
|
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
|
end
|
||||||
else
|
else
|
||||||
@error = "Файла репозитория не существует"
|
@error = "Файла репозитория не существует"
|
||||||
@@ -176,4 +180,18 @@ class GitRepo
|
|||||||
end
|
end
|
||||||
@error
|
@error
|
||||||
end
|
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
|
end
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ PROJECTS_STRUCTURE = {
|
|||||||
:CONFIGS => "configs",
|
:CONFIGS => "configs",
|
||||||
:SRCPRP => "srcprp",
|
:SRCPRP => "srcprp",
|
||||||
:SIGNED => "signed",
|
:SIGNED => "signed",
|
||||||
|
:SRC => "src",
|
||||||
}
|
}
|
||||||
|
|
||||||
class ProjectsActions
|
class ProjectsActions
|
||||||
@@ -46,6 +47,18 @@ class ProjectsActions
|
|||||||
prj
|
prj
|
||||||
end
|
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)
|
def create_project(name, description, configuration)
|
||||||
@error = nil
|
@error = nil
|
||||||
ret_val = 0
|
ret_val = 0
|
||||||
@@ -87,11 +100,43 @@ class ProjectsActions
|
|||||||
ret_val
|
ret_val
|
||||||
end
|
end
|
||||||
|
|
||||||
def get_project_gits(id)
|
def get_project_gits(id, repo)
|
||||||
@db.get_gits_for_projects(id)
|
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
|
end
|
||||||
|
|
||||||
def add_git_to_project(prj_id, git_id)
|
def add_git_to_project(prj_id, git_id, repo, git_name)
|
||||||
@db.save_git_project(prj_id, git_id)
|
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
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -64,13 +64,20 @@
|
|||||||
<div class="p-2 border border-primary rounded-2">
|
<div class="p-2 border border-primary rounded-2">
|
||||||
<% @proj_repo.each do |item| %>
|
<% @proj_repo.each do |item| %>
|
||||||
<div class="row justify-content-between border-bottom border-light-subtle m-2">
|
<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>
|
<a href="/prjgitf/<%= ERB::Util.url_encode(@proj_id) %>/<%= ERB::Util.url_encode(item[:id]) %>" class="p-2"><%= item[:reponame] %></a>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-1">
|
<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>
|
<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>
|
||||||
<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>
|
</div>
|
||||||
<% end %>
|
<% end %>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user