- Добавлена поддержка ожидания сборки
- Изменен порядок сортировки новых пакетов в repoview
This commit is contained in:
@@ -71,6 +71,14 @@ class IniConfig
|
||||
end
|
||||
end
|
||||
|
||||
def get_build_lock_path()
|
||||
unless @config["build"]["path"].nil?
|
||||
@config["build"]["path"].to_s
|
||||
else
|
||||
"locks/build"
|
||||
end
|
||||
end
|
||||
|
||||
def get_items_per_page()
|
||||
unless @config["pages"]["items_per_page"].nil?
|
||||
res = @config["pages"]["items_per_page"].to_i
|
||||
|
||||
@@ -249,6 +249,10 @@ class DBase
|
||||
BuildTask.where(id: build_id.to_i).update(result: status.to_i)
|
||||
end
|
||||
|
||||
def get_build_task_status(build_id)
|
||||
BuildTask.where(id: build_id.to_i).first
|
||||
end
|
||||
|
||||
def update_build_task_error_log(build_id, path)
|
||||
BuildTask.where(id: build_id.to_i).update(errlogpath: path)
|
||||
end
|
||||
@@ -384,4 +388,8 @@ class DBase
|
||||
def delete_git_by_id(id)
|
||||
Repos.where(id: id.to_i).delete
|
||||
end
|
||||
|
||||
def cancel_hang_builds()
|
||||
BuildTask.where(result: [0, 3]).update(result: 4)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -267,7 +267,7 @@ class MockManager
|
||||
end
|
||||
end
|
||||
|
||||
def build_task()
|
||||
def build_task(build_lock)
|
||||
@error = false
|
||||
@db.before_fork
|
||||
spock = Spork.spork(:logger => log) do
|
||||
@@ -275,33 +275,48 @@ class MockManager
|
||||
old_stdout = $stdout.dup
|
||||
$stdout = File.open(@process_log, "w")
|
||||
@log = Logger.new($stdout)
|
||||
if @spec == ""
|
||||
@error = true
|
||||
@log.error("Не могу найти spec файл")
|
||||
end
|
||||
begin
|
||||
prepare_structure if @error == false
|
||||
prepare_src if @error == false
|
||||
prepare_source if @error == false
|
||||
prepare_src_rpm if @error == false
|
||||
build_rpm if @error == false
|
||||
save_logs
|
||||
save_rpms if @error == false
|
||||
rescue => e
|
||||
@error = true
|
||||
puts e
|
||||
end
|
||||
$stdout = old_stdout
|
||||
@log.close
|
||||
save_prg_log
|
||||
clean_build
|
||||
if @error
|
||||
@db.update_build_task_status(@build_id, 1)
|
||||
else
|
||||
@db.update_build_task_status(@build_id, 2)
|
||||
|
||||
File.open(build_lock,"wb") do |global_lock|
|
||||
global_lock.flock(File::LOCK_EX)
|
||||
global_lock.rewind
|
||||
build_info = @db.get_build_task_status(build_id)
|
||||
unless build_info.nil?
|
||||
if build_info[:result].to_i == 4
|
||||
return
|
||||
end
|
||||
end
|
||||
@db.update_build_task_status(@build_id, 0)
|
||||
|
||||
if @spec == ""
|
||||
@error = true
|
||||
@log.error("Не могу найти spec файл")
|
||||
end
|
||||
begin
|
||||
prepare_structure if @error == false
|
||||
prepare_src if @error == false
|
||||
prepare_source if @error == false
|
||||
prepare_src_rpm if @error == false
|
||||
build_rpm if @error == false
|
||||
save_logs
|
||||
save_rpms if @error == false
|
||||
rescue => e
|
||||
@error = true
|
||||
puts e
|
||||
end
|
||||
$stdout = old_stdout
|
||||
@log.close
|
||||
save_prg_log
|
||||
clean_build
|
||||
if @error
|
||||
@db.update_build_task_status(@build_id, 1)
|
||||
else
|
||||
@db.update_build_task_status(@build_id, 2)
|
||||
end
|
||||
global_lock.flock(File::LOCK_UN)
|
||||
|
||||
end
|
||||
end
|
||||
@db.after_fork
|
||||
spock
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
@@ -269,7 +269,7 @@ class ProjectsActions
|
||||
spec_file
|
||||
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
|
||||
build_ok = true
|
||||
proj_path = get_project_path(prj_id)
|
||||
@@ -283,20 +283,16 @@ class ProjectsActions
|
||||
File.open(lockf_path, File::RDWR | File::CREAT) do |f|
|
||||
result = f.flock(File::LOCK_EX | File::LOCK_NB)
|
||||
if result == false
|
||||
#Файл заблокирован считать id и вывести сведения о сборке
|
||||
# Файл заблокирован считать id и вывести сведения о сборке
|
||||
build_ok = false
|
||||
build_id = f.gets
|
||||
unless build_id.nil?
|
||||
build_id = build_id.strip.to_i
|
||||
end
|
||||
if build_id > 0
|
||||
build_id = build_id.strip.to_i unless build_id.nil?
|
||||
if build_id.positive?
|
||||
build_info = @db.get_build_task_process_log(build_id)
|
||||
unless build_info.nil?
|
||||
bld_id = build_info[:id]
|
||||
end
|
||||
bld_id = build_info[:id] unless build_info.nil?
|
||||
end
|
||||
else
|
||||
#Сборка завершилась, но каталог не подчистился
|
||||
# Сборка завершилась, но каталог не подчистился
|
||||
FileUtils.rm_rf(prepare_path)
|
||||
f.flock(File::LOCK_UN)
|
||||
build_ok = true
|
||||
@@ -306,17 +302,17 @@ class ProjectsActions
|
||||
|
||||
#Верная ситуация
|
||||
if build_ok
|
||||
build_path = File.join(proj_path, PROJECTS_STRUCTURE[:LOGS], git_name[:reponame])
|
||||
Dir.mkdir(prepare_path)
|
||||
lockf_path = File.join(prepare_path, "lock")
|
||||
File.open(lockf_path, File::RDWR | File::CREAT) do |f|
|
||||
f.flock(File::LOCK_EX)
|
||||
f.rewind
|
||||
#Начинаем сборку
|
||||
build_path = File.join(proj_path, PROJECTS_STRUCTURE[:LOGS], git_name[:reponame])
|
||||
#Начинаем сборку
|
||||
@db.create_build_task(prj_id, git_id, build_path)
|
||||
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])
|
||||
@db.create_build_task(prj_id, git_id, build_path)
|
||||
build_id = @db.last_id
|
||||
f.puts(build_id)
|
||||
f.flush
|
||||
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)
|
||||
bld_id = build_id
|
||||
@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
|
||||
bld_id
|
||||
|
||||
@@ -142,9 +142,9 @@ class RepoManager
|
||||
if nresult.key?("SRPMS")
|
||||
last_update_src = nresult["SRPMS"].map do |record|
|
||||
{ fname: record[:fname], stat: record[:stat] }
|
||||
end.sort_by! do |item|
|
||||
[item[:stat], -item[:fname].downcase.ord]
|
||||
end.map do |record|
|
||||
end.sort_by do |item|
|
||||
[item[:stat], item[:fname].downcase.ord]
|
||||
end.reverse.map do |record|
|
||||
if record[:stat].nil?
|
||||
["нет даты", record[:fname]]
|
||||
else
|
||||
|
||||
Reference in New Issue
Block a user