=end
require 'fileutils'
-require 'sqlite3'
+require 'dbi'
$LOAD_PATH.unshift File.dirname(__FILE__)
require "CommonProject.rb"
require "RegisterPackageJob.rb"
def include_package?(name, version=nil, os=nil)
- if name == @pkg_name then
- return true
- else
- return false
- end
+ return (name == @pkg_name)
end
f.puts "TYPE=BINARY"
f.puts "PACKAGE_NAME=#{@pkg_name}"
end
+ return true
end
if l.start_with?("PACKAGE_NAME=")
pkg_name = l[idx,length].strip
else
- next
- end
+ next
+ end
end
end
@pkg_name = pkg_name
+ return true
end
end
require 'rubygems'
require 'fileutils'
-require 'sqlite3'
+require 'dbi'
$LOAD_PATH.unshift File.dirname(__FILE__)
require "SocketJobRequestListener.rb"
require "RemoteBuildJob.rb"
def create_db()
+ result = true
# create DB
- db_file = "#{BuildServer::CONFIG_ROOT}/#{@id}/server.db"
+ sqlite_db_file = "DBI:SQLite3:#{BuildServer::CONFIG_ROOT}/#{@id}/server.db"
begin
- db = SQLite3::Database.new db_file
+ db = DBI.connect(sqlite_db_file)
# create table
- db.execute "CREATE TABLE IF NOT EXISTS distributions(name VARCHAR(32) PRIMARY KEY, pkgsvr_url VARCHAR(256), pkgsvr_addr VARCHAR(64))"
- db.execute "CREATE TABLE IF NOT EXISTS remote_build_servers(id INTEGER PRIMARY KEY, svr_addr VARCHAR(64))"
- db.execute "CREATE TABLE IF NOT EXISTS sync_pkg_servers(id INTEGER PRIMARY KEY, pkgsvr_url VARCHAR(256), period INTEGER, dist_name VARCHAR(32))"
- db.execute "CREATE TABLE IF NOT EXISTS supported_os(name VARCHAR(32) PRIMARY KEY)"
- db.execute "CREATE TABLE IF NOT EXISTS projects(id INTEGER PRIMARY KEY, name VARCHAR(32), type VARCHAR(32), password VARCHAR(32), dist_name VARCHAR(32))"
- db.execute "CREATE TABLE IF NOT EXISTS project_os(prj_id INTEGER, os_name VARCHAR(32))"
- db.execute "CREATE TABLE IF NOT EXISTS users(user_id INTEGER PRIMARY KEY, email VARCHAR(256), password VARCHAR(256), password_salt VARCHAR(256), user_name VARCHAR(256), group_id VARCHAR(256))"
- db.execute "CREATE TABLE IF NOT EXISTS groups(group_id INTEGER PRIMARY KEY, group_name VARCHAR(256))"
- rescue SQLite3::Exception => e
+ db.do "CREATE TABLE IF NOT EXISTS distributions(name VARCHAR(32) PRIMARY KEY, pkgsvr_url VARCHAR(256), pkgsvr_addr VARCHAR(64))"
+ db.do "CREATE TABLE IF NOT EXISTS remote_build_servers(id INTEGER PRIMARY KEY AUTOINCREMENT, svr_addr VARCHAR(64))"
+ db.do "CREATE TABLE IF NOT EXISTS sync_pkg_servers(id INTEGER PRIMARY KEY AUTOINCREMENT, pkgsvr_url VARCHAR(256), period INTEGER, dist_name VARCHAR(32))"
+ db.do "CREATE TABLE IF NOT EXISTS supported_os(name VARCHAR(32) PRIMARY KEY)"
+ db.do "CREATE TABLE IF NOT EXISTS projects(id INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR(32), type VARCHAR(32), password VARCHAR(32), dist_name VARCHAR(32))"
+ db.do "CREATE TABLE IF NOT EXISTS project_os(prj_id INTEGER, os_name VARCHAR(32))"
+ db.do "CREATE TABLE IF NOT EXISTS users(user_id INTEGER PRIMARY KEY AUTOINCREMENT, email VARCHAR(256), password VARCHAR(256), password_salt VARCHAR(256), user_name VARCHAR(256), group_id VARCHAR(256))"
+ db.do "CREATE TABLE IF NOT EXISTS groups(group_id INTEGER PRIMARY KEY AUTOINCREMENT, group_name VARCHAR(256))"
+ rescue DBI::DatabaseError => e
puts "DB Creation failed!"
- puts e
+ puts e.errstr
+ result = false
ensure
- db.close if db
+ db.disconnect if db
end
+ return result
end
# save
def save_db()
+ result = true
# distribution
@distmgr.save_db()
- db_file = "#{BuildServer::CONFIG_ROOT}/#{@id}/server.db"
+ sqlite_db_file = "DBI:SQLite3:#{BuildServer::CONFIG_ROOT}/#{@id}/server.db"
begin
# open DB
- db = SQLite3::Database.open db_file
+ db = DBI.connect(sqlite_db_file)
# remote_build_servers
- db.execute "DELETE FROM remote_build_servers"
- idx = 0
+ db.do "DELETE FROM remote_build_servers"
@friend_servers.each { |svr|
- db.execute "INSERT INTO remote_build_servers VALUES('#{idx}','#{svr.ip}:#{svr.port}')"
- idx += 1
+ db.do "INSERT INTO remote_build_servers (svr_addr) VALUES('#{svr.ip}:#{svr.port}')"
}
-
+
# sync_pkg_servers
- db.execute "DELETE FROM sync_pkg_servers"
- idx = 0
+ db.do "DELETE FROM sync_pkg_servers"
@remote_pkg_servers.each { |svr|
- db.execute "INSERT INTO sync_pkg_servers VALUES('#{idx}','#{svr[0]}','#{@pkg_sync_period}','#{svr[1]}')"
- idx += 1
+ db.do "INSERT INTO sync_pkg_servers (pkgsvr_url,period,dist_name) VALUES('#{svr[0]}','#{@pkg_sync_period}','#{svr[1]}')"
}
# supported_os
- db.execute "DELETE FROM supported_os"
+ db.do "DELETE FROM supported_os"
@supported_os_list.each { |os|
- db.execute "INSERT INTO supported_os VALUES('#{os}')"
+ db.do "INSERT INTO supported_os VALUES('#{os}')"
}
-
- rescue SQLite3::Exception => e
+
+ rescue DBI::DatabaseError => e
puts "DB update failed!"
- puts e
+ puts e.errstr
+ result = false
ensure
- db.close if db
+ db.disconnect if db
end
+
+ return result
end
# load
def load_db()
+ result = true
# distribution
@distmgr.load_db()
- db_file = "#{BuildServer::CONFIG_ROOT}/#{@id}/server.db"
+ sqlite_db_file = "DBI:SQLite3:#{BuildServer::CONFIG_ROOT}/#{@id}/server.db"
begin
# open DB
- db = SQLite3::Database.open db_file
- db.results_as_hash = true
+ db = DBI.connect(sqlite_db_file)
+ #db.results_as_hash = true
# remote_build_servers
@friend_servers = []
- stm = db.prepare "SELECT * FROM remote_build_servers"
- rs = stm.execute
- rs.each { |row|
+ sth = db.execute "SELECT * FROM remote_build_servers"
+ sth.fetch_hash { |row|
add_remote_server(
- row['svr_addr'].split(":")[0],
+ row['svr_addr'].split(":")[0],
row['svr_addr'].split(":")[1].to_i)
}
- stm.close if stm
-
+ sth.finish
# sync_package_servers
@remote_pkg_servers = []
- stm = db.prepare "SELECT * FROM sync_pkg_servers"
- rs = stm.execute
- rs.each { |row|
+ sth = db.execute "SELECT * FROM sync_pkg_servers"
+ sth.fetch_hash { |row|
add_sync_package_server( row['pkgsvr_url'], row['dist_name'] )
@pkg_sync_period = row['period'].to_i
}
- stm.close if stm
+ sth.finish
# supported_os
@supported_os_list = []
- stm = db.prepare "SELECT * FROM supported_os"
- rs = stm.execute
- rs.each { |row|
+ sth = db.execute "SELECT * FROM supported_os"
+ sth.fetch_hash { |row|
add_target_os( row['name'] )
}
- rescue SQLite3::Exception => e
+ sth.finish
+ rescue DBI::DatabaseError => e
puts "DB loading failed!"
- puts e
+ puts e.errstr
+ result = false
ensure
- stm.close if stm
- db.close if db
+ sth.finish if not sth.finished?
+ db.disconnect if db
end
+ return result
end
end
# add
if server.add_remote_server( ip, port ) then
- server.save_db()
- puts "Friend server is added successfully!"
-
- return true
+ if server.save_db() then
+ puts "Friend server is added successfully!"
+ return true
+ else
+ puts "Add friend server to DB is failed!"
+ return false
+ end
else
puts "Friend server already exists in list!"
return false
# add
if server.remove_remote_server( ip, port ) then
- server.save_db()
- puts "Friend server is removed successfully!"
-
- return true
+ if server.save_db() then
+ puts "Friend server is removed successfully!"
+ return true
+ else
+ puts "Remove friend server from DB is failed!"
+ return false
+ end
else
puts "Friend server does not exist in list!"
return false
# add
if server.add_target_os( os_name ) then
- server.save_db()
- puts "Target OS is added successfully!"
- return true
+ if server.save_db() then
+ puts "Target OS is added successfully!"
+ return true
+ else
+ puts "Add target OS to DB is failed!"
+ return false
+ end
else
puts "Target OS already exists in list!"
return false
# add
if server.remove_target_os( os_name ) then
- server.save_db()
- puts "Target OS is removed successfully!"
- return true
+ if server.save_db() then
+ puts "Target OS is removed successfully!"
+ return true
+ else
+ puts "Remove target OS from DB failed!"
+ return false
+ end
else
puts "Target OS does not exist in list!"
return false
# add
if server.distmgr.add_distribution( dist_name, pkgsvr_url, pkgsvr_ip, pkgsvr_port ) then
- server.save_db()
- puts "Distribution is added successfully!"
- return true
+ if server.save_db() then
+ puts "Distribution is added successfully!"
+ return true
+ else
+ puts "Add distribution to DB failed!"
+ return false
+ end
else
puts "Distribution already exists in list!"
return false
# remove
if server.distmgr.remove_distribution( dist_name ) then
- server.save_db()
- puts "Distribution is removed successfully!"
- return true
+ if server.save_db() then
+ puts "Distribution is removed successfully!"
+ return true
+ else
+ puts "Remove distribution from DB is failed!"
+ return false
+ end
else
puts "Distribution does not exist in list!"
return false
# add
if server.add_sync_package_server( url, dist_name ) then
- server.save_db()
- puts "Remote package server is added!"
- return true
+ if server.save_db() then
+ puts "Remote package server is added!"
+ return true
+ else
+ puts "Remove package server from DB is failed!"
+ return false
+ end
else
puts "The server already exists in list!"
return false
# remove
if server.remove_sync_package_server( url, dist_name ) then
- server.save_db()
- puts "Remote package server is removed!"
- return true
+ if server.save_db() then
+ puts "Remote package server is removed!"
+ return true
+ else
+ puts "Remove remote package server from DB is failed!"
+ return false
+ end
else
puts "The server does not exist in list!"
return false
end
return nil
end
-
-
- def set_project_id(id)
- @project_id = id
- end
-
-
- def get_project_id()
- return @project_id
- end
end
# save
def save_db()
- db_file = "#{BuildServer::CONFIG_ROOT}/#{@server.id}/server.db"
+ result = true
+ sqlite_db_file = "DBI:SQLite3:#{BuildServer::CONFIG_ROOT}/#{@server.id}/server.db"
begin
# open DB
- db = SQLite3::Database.open db_file
+ db = DBI.connect(sqlite_db_file)
# distributions
- db.execute "DELETE FROM distributions"
+ db.do "DELETE FROM distributions"
@distributions.each { |dist|
dist_addr = dist.pkgsvr_ip + ":" + dist.pkgsvr_port.to_s
- db.execute "INSERT INTO distributions VALUES('#{dist.name}','#{dist.pkgsvr_url}','#{dist_addr}')"
+ db.do "INSERT INTO distributions VALUES('#{dist.name}','#{dist.pkgsvr_url}','#{dist_addr}')"
}
- rescue SQLite3::Exception => e
+ rescue DBI::DatabaseError => e
puts "DB update failed!"
- puts e
+ puts e.errstr
+ result = false
ensure
- db.close if db
+ db.disconnect if db
end
+ return result
end
# load
def load_db()
+ result = true
@distributions = []
- db_file = "#{BuildServer::CONFIG_ROOT}/#{@server.id}/server.db"
+ sqlite_db_file = "DBI:SQLite3:#{BuildServer::CONFIG_ROOT}/#{@server.id}/server.db"
begin
# open DB
- db = SQLite3::Database.open db_file
- db.results_as_hash = true
+ db = DBI.connect(sqlite_db_file)
# distributions
- stm = db.prepare "SELECT * FROM distributions"
- rs = stm.execute
- rs.each { |row|
+ rs = db.execute "SELECT * FROM distributions"
+ rs.fetch_hash { |row|
pkgsvr_ip = row['pkgsvr_addr'].split(":")[0]
pkgsvr_port = row['pkgsvr_addr'].split(":")[1].to_i
add_distribution_internal(row['name'], row['pkgsvr_url'], pkgsvr_ip, pkgsvr_port)
}
- rescue SQLite3::Exception => e
+ rs.finish
+ rescue DBI::DatabaseError => e
puts "DB loading failed!"
- puts e
+ puts e.errstr
+ result = false
ensure
- stm.close if stm
- db.close if db
+ rs.finish if not rs.finished?
+ db.disconnect if db
end
-
+ return result
end
=end
require 'fileutils'
-require 'sqlite3'
+require 'dbi'
$LOAD_PATH.unshift File.dirname(__FILE__)
require "CommonProject.rb"
require "GitBuildJob.rb"
f.puts "GIT_REPOSITORY=#{@repository}"
f.puts "GIT_BRANCH=#{@branch}"
end
+ return true
end
version = file[0,vlen]
add_package_info( version, "#{pkginfo_dir}/#{file}" )
end
+ return true
end
end
=end
require 'fileutils'
-require 'sqlite3'
+require 'dbi'
$LOAD_PATH.unshift File.dirname(__FILE__)
require "GitBuildProject.rb"
require "BinaryUploadProject.rb"
return get_project(name, dist_name)
end
-
+
# save
def save_db()
- # generate project id if not exist?
- last_id = -1
- @projects.each { |prj|
- if prj.get_project_id() > last_id then last_id = prj.get_project_id() end
- }
- new_id = last_id + 1
- @projects.each { |prj|
- if prj.get_project_id() == -1 then
- prj.set_project_id(new_id)
- new_id += 1
- end
- }
-
- db_file = "#{BuildServer::CONFIG_ROOT}/#{@server.id}/server.db"
+ result = true
+ sqlite_db_file = "DBI:SQLite3:#{BuildServer::CONFIG_ROOT}/#{@server.id}/server.db"
begin
- # open DB
- db = SQLite3::Database.open db_file
- db.results_as_hash = true
-
+ # open #
+ db = DBI.connect(sqlite_db_file)
+
# delete all rows
- db.execute "DELETE FROM projects"
- db.execute "DELETE FROM project_os"
+ db.do "DELETE FROM projects"
+ db.do "DELETE FROM project_os"
# insert project info
@projects.each { |prj|
- prj_id = prj.get_project_id()
# COMMON
- db.execute "INSERT INTO projects VALUES(#{prj_id}, '#{prj.name}', '#{prj.type}', '#{prj.passwd}', '#{prj.dist_name}')"
+ db.do "INSERT INTO projects (name,type,password,dist_name) VALUES('#{prj.name}', '#{prj.type}', '#{prj.passwd}', '#{prj.dist_name}')"
# OS
+ prj_id = db.select_one("select last_insert_rowid()")
prj.os_list.each { |os|
- db.execute "INSERT INTO project_os VALUES('#{prj_id}','#{os}')"
+ db.do "INSERT INTO project_os VALUES('#{prj_id}','#{os}')"
}
- prj.save_db()
+ if not prj.save_db() then raise RuntimeError ,"Save project DB is failed!" end
}
- rescue SQLite3::Exception => e
+ rescue DBI::DatabaseError => e
puts "DB update failed!"
- puts e
+ puts e.errstr
+ result = false
ensure
- db.close if db
+ db.disconnect if db
end
+ return result
end
# load
def load_db()
+ result = true
@projects = []
- db_file = "#{BuildServer::CONFIG_ROOT}/#{@server.id}/server.db"
+ sqlite_db_file = "DBI:SQLite3:#{BuildServer::CONFIG_ROOT}/#{@server.id}/server.db"
begin
# open DB
- db = SQLite3::Database.open db_file
- db.results_as_hash = true
+ db = DBI.connect(sqlite_db_file)
# distributions
- stm = db.prepare "SELECT * FROM projects"
- rs = stm.execute
- stm2 = nil
- rs.each { |row|
+ rs = db.execute "SELECT * FROM projects"
+ rs.fetch_hash { |row|
prj_id = row['id']
prj_name = row['name']
prj_type = row['type']
@server.log.info "Loading project : #{prj_name}"
# os
prj_os_list = []
- stm2 = db.prepare "SELECT os_name FROM project_os WHERE prj_id = #{prj_id}"
- rs2 = stm2.execute
- rs2.each { |row2|
+ rs2 = db.execute "SELECT os_name FROM project_os WHERE prj_id = #{prj_id}"
+ rs2.fetch { |row2|
prj_os_list.push row2[0]
}
- stm2.close if stm2
- stm2 = nil
+ rs2.finish
if prj_type == "GIT" then
new_project = GitBuildProject.new(prj_name, @server, prj_os_list, prj_dist)
else
new_project = BinaryUploadProject.new(prj_name, @server, prj_os_list, prj_dist)
end
- new_project.set_project_id(prj_id)
if not prj_passwd.empty? then
new_project.passwd = prj_passwd
end
- new_project.load_db()
+ if not new_project.load_db() then raise RuntimeError, "Project DB load failed!" end
@projects.push new_project
}
- rescue SQLite3::Exception => e
+ rs.finish
+ rescue DBI::DatabaseError => e
puts "DB loading failed!"
- puts e
+ puts e.errstr
+ result = false
ensure
- stm.close if stm
- stm2.close if stm2
- db.close if db
+ rs.finish if not rs.finished?
+ db.disconnect if db
end
+ return result
end