@ -269,7 +269,7 @@ class ProjectsActions
spec_file
spec_file
end
end
def build_projects_git ( prj_id , git_id , counter_file )
def build_projects_git ( prj_id , git_id , counter_file , build_lock )
bld_id = 0
bld_id = 0
build_ok = true
build_ok = true
proj_path = get_project_path ( prj_id )
proj_path = get_project_path ( prj_id )
@ -283,20 +283,16 @@ class ProjectsActions
File . open ( lockf_path , File :: RDWR | File :: CREAT ) do | f |
File . open ( lockf_path , File :: RDWR | File :: CREAT ) do | f |
result = f . flock ( File :: LOCK_EX | File :: LOCK_NB )
result = f . flock ( File :: LOCK_EX | File :: LOCK_NB )
if result == false
if result == false
# Файл заблокирован считать id и вывести сведения о сборке
# Файл заблокирован считать id и вывести сведения о сборке
build_ok = false
build_ok = false
build_id = f . gets
build_id = f . gets
unless build_id . nil?
build_id = build_id . strip . to_i unless build_id . nil?
build_id = build_id . strip . to_i
if build_id . positive?
end
if build_id > 0
build_info = @db . get_build_task_process_log ( build_id )
build_info = @db . get_build_task_process_log ( build_id )
unless build_info . nil?
bld_id = build_info [ :id ] unless build_info . nil?
bld_id = build_info [ :id ]
end
end
end
else
else
# Сборка завершилась, но каталог не подчистился
# Сборка завершилась, но каталог не подчистился
FileUtils . rm_rf ( prepare_path )
FileUtils . rm_rf ( prepare_path )
f . flock ( File :: LOCK_UN )
f . flock ( File :: LOCK_UN )
build_ok = true
build_ok = true
@ -306,17 +302,17 @@ class ProjectsActions
#Верная ситуация
#Верная ситуация
if build_ok
if build_ok
build_path = File . join ( proj_path , PROJECTS_STRUCTURE [ :LOGS ] , git_name [ :reponame ] )
Dir . mkdir ( prepare_path )
Dir . mkdir ( prepare_path )
lockf_path = File . join ( prepare_path , " lock " )
lockf_path = File . join ( prepare_path , " lock " )
File . open ( lockf_path , File :: RDWR | File :: CREAT ) do | f |
File . open ( lockf_path , File :: RDWR | File :: CREAT ) do | f |
f . flock ( File :: LOCK_EX )
f . flock ( File :: LOCK_EX )
f . rewind
f . rewind
#Начинаем сборку
#Начинаем сборку
build_path = File . join ( proj_path , PROJECTS_STRUCTURE [ :LOGS ] , git_name [ :reponame ] )
repo_path = File . join ( proj_path , PROJECTS_STRUCTURE [ :REPO ] )
git_source = File . join ( proj_path , PROJECTS_STRUCTURE [ :SRC ] , git_name [ :reponame ] )
@db . create_build_task ( prj_id , git_id , build_path )
@db . create_build_task ( prj_id , git_id , build_path )
build_id = @db . last_id
build_id = @db . last_id
repo_path = File . join ( proj_path , PROJECTS_STRUCTURE [ :REPO ] )
git_source = File . join ( proj_path , PROJECTS_STRUCTURE [ :SRC ] , git_name [ :reponame ] )
f . puts ( build_id )
f . puts ( build_id )
f . flush
f . flush
proj_info = get_project ( prj_id )
proj_info = get_project ( prj_id )
@ -325,7 +321,8 @@ class ProjectsActions
mock = MockManager . new ( prepare_path , get_project_config ( prj_id ) , counter_file , @db , build_path , repo_path , git_source , build_id , prep_script , spec_file , repo_lock , git_id , tmp_bld )
mock = MockManager . new ( prepare_path , get_project_config ( prj_id ) , counter_file , @db , build_path , repo_path , git_source , build_id , prep_script , spec_file , repo_lock , git_id , tmp_bld )
bld_id = build_id
bld_id = build_id
@db . update_build_task_error_log ( build_id , mock . get_build_process_log )
@db . update_build_task_error_log ( build_id , mock . get_build_process_log )
mock . build_task
@db . update_build_task_status ( build_id , 3 )
mock . build_task ( build_lock )
end
end
end
end
bld_id
bld_id