attr_accessor :remote_pkg_servers
attr_accessor :pkg_sync_period
attr_accessor :changelog_check
-
+ attr_accessor :db_dsn, :db_user, :db_passwd
CONFIG_ROOT = "#{Utils::HOME}/.build_tools/build_server"
HOST_OS = Utils::HOST_OS
@pkg_sync_period=600
@upgrade = false
@changelog_check = false
+
+ #DB settring
+ @db_dsn = "SQLite3:#{BuildServer::CONFIG_ROOT}/#{@id}/server.db"
+ @db_user = nil
+ @db_passwd = nil
end
def create_db()
result = true
# create DB
- sqlite_db_file = "DBI:SQLite3:#{BuildServer::CONFIG_ROOT}/#{@id}/server.db"
begin
- db = DBI.connect(sqlite_db_file)
+ #DB open
+ db = DBI.connect("DBI:#{@db_dsn}", @db_user, @db_passwd)
+ case @db_dsn
+ when /^SQLite3:/ then inc="AUTOINCREMENT"
+ when /^Mysql:/ then inc="AUTO_INCREMENT"
+ else inc="AUTOINCREMENT"
+ end
+
# create table
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 remote_build_servers(id INTEGER PRIMARY KEY #{inc}, svr_addr VARCHAR(64))"
+ db.do "CREATE TABLE IF NOT EXISTS sync_pkg_servers(id INTEGER PRIMARY KEY #{inc}, 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 projects(id INTEGER PRIMARY KEY #{inc}, 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))"
+ db.do "CREATE TABLE IF NOT EXISTS users(user_id INTEGER PRIMARY KEY #{inc}, 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 #{inc}, group_name VARCHAR(256))"
rescue DBI::DatabaseError => e
puts "DB Creation failed!"
puts e.errstr
# distribution
@distmgr.save_db()
- sqlite_db_file = "DBI:SQLite3:#{BuildServer::CONFIG_ROOT}/#{@id}/server.db"
begin
# open DB
- db = DBI.connect(sqlite_db_file)
+ db = DBI.connect("DBI:#{@db_dsn}", @db_user ,@db_passwd)
# remote_build_servers
db.do "DELETE FROM remote_build_servers"
# distribution
@distmgr.load_db()
- sqlite_db_file = "DBI:SQLite3:#{BuildServer::CONFIG_ROOT}/#{@id}/server.db"
begin
# open DB
- db = DBI.connect(sqlite_db_file)
+ db = DBI.connect("DBI:#{@db_dsn}", @db_user, @db_passwd)
#db.results_as_hash = true
# remote_build_servers
server.ftp_passwd = value
when "CHANGELOG_CHECK"
server.changelog_check = value
+ when "DB_DSN"
+ case value
+ when /^SQLite3:(.*)/i then
+ if $1.strip.empty? then db_dsn = "SQLite3:#{BuildServer::CONFIG_ROOT}/#{@id}/server.db"
+ else db_dsn = "SQLite3:#{$1.strip}"
+ end
+ when /^Mysql:(.*)/i then
+ db_dsn = "Mysql:#{$1}"
+ else
+ db_dsn = "SQLite3:#{BuildServer::CONFIG_ROOT}/#{@id}/server.db"
+ end
+ server.db_dsn = db_dsn
+ when "DB_USER"
+ server.db_user = value if not value.empty?
+ when "DB_PASSWORD"
+ server.db_passwd = value if not value.empty?
else
puts "Wrong attribute name!"
result = false
puts server.ftp_passwd
when "CHANGELOG_CHECK"
puts server.changelog_check
+ when "DB_DSN"
+ puts server.db_dsn
+ when "DB_USER"
+ puts server.db_user
+ when "DB_PASSWORD"
+ puts server.db_passwd
else
puts "Wrong attribute name!"
result = false
end
f.puts "PKG_SYNC_PERIOD=#{server.pkg_sync_period}"
f.puts "CHANGELOG_CHECK=#{server.changelog_check}"
+ f.puts "#only supports \"Mysql\" and \"SQLite3\""
+ f.puts "DB_DSN=#{server.db_dsn}"
+ f.puts "DB_USER=#{server.db_user}"
+ f.puts "DB_PASSWORD=#{server.db_passwd}"
end
# save to server.db
ftp_passwd=nil
pkg_sync_period=600
changelog_check=false
+ db_dsn="SQLite3:#{BuildServer::CONFIG_ROOT}/#{id}/server.db"
+ db_user=nil
+ db_passwd=nil
# read configuration
server_dir = "#{BuildServer::CONFIG_ROOT}/#{id}"
File.open( "#{server_dir}/server.cfg", "r" ) do |f|
f.each_line do |l|
+ if l.strip.start_with?("#") then next end
idx = l.index("=") + 1
length = l.length - idx
pkg_sync_period = l[idx,length].strip.to_i
elsif l.start_with?("CHANGELOG_CHECK=")
changelog_check = true if l[idx,length].strip =~ /true/i
+ elsif l.start_with?("DB_DSN=")
+ case l[idx,length].strip
+ when /^SQLite3:(.*)/i then
+ if $1.strip.empty? then db_dsn = "SQLite3:#{BuildServer::CONFIG_ROOT}/#{@id}/server.db"
+ else db_dsn = "SQLite3:#{$1.strip}"
+ end
+ when /^Mysql:(.*)/i then
+ db_dsn = "Mysql:#{$1}"
+ else
+ db_dsn = "SQLite3:#{BuildServer::CONFIG_ROOT}/#{@id}/server.db"
+ end
+ elsif l.start_with?("DB_USER=")
+ db_user = l[idx,length].strip if not l[idx,length].strip.empty?
+ elsif l.start_with?("DB_PASSWORD=")
+ db_passwd = l[idx,length].strip if not l[idx,length].strip.empty?
else
next
end
# change log setting
obj.changelog_check = changelog_check
+ # DB settring
+ obj.db_dsn = db_dsn if not db_dsn.nil?
+ obj.db_user = db_user
+ obj.db_passwd = db_passwd
+
# save config
write_server_config( obj )
# save
def save_db()
result = true
- sqlite_db_file = "DBI:SQLite3:#{BuildServer::CONFIG_ROOT}/#{@server.id}/server.db"
begin
# open DB
- db = DBI.connect(sqlite_db_file)
+ db = DBI.connect("DBI:#{@server.db_dsn}", @server.db_user, @server.db_passwd)
# distributions
db.do "DELETE FROM distributions"
result = true
@distributions = []
- sqlite_db_file = "DBI:SQLite3:#{BuildServer::CONFIG_ROOT}/#{@server.id}/server.db"
begin
# open DB
- db = DBI.connect(sqlite_db_file)
+ db = DBI.connect("DBI:#{@server.db_dsn}", @server.db_user, @server.db_passwd)
begin
db.do('ALTER TABLE distributions ADD COLUMN status VARCHAR(32) DEFAULT "OPEN"')
rescue DBI::DatabaseError => e
# do nothing
end
-
+
# distributions
rs = db.execute "SELECT * FROM distributions"
rs.fetch_hash do |row|
# save
def save_db()
result = true
- sqlite_db_file = "DBI:SQLite3:#{BuildServer::CONFIG_ROOT}/#{@server.id}/server.db"
begin
# open #
- db = DBI.connect(sqlite_db_file)
+ db = DBI.connect("DBI:#{@server.db_dsn}", @server.db_user, @server.db_passwd)
# delete all rows
db.do "DELETE FROM projects"
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()")[0]
+ case @server.db_dsn
+ when /^SQLite3:/ then prj_id = db.select_one("select last_insert_rowid()")[0]
+ when /^Mysql:/ then prj_id = db.func(:insert_id)
+ else prj_id = db.select_one("select last_insert_rowid()")[0]
+ end
+
prj.os_list.each do |os|
db.do "INSERT INTO project_os VALUES('#{prj_id}','#{os}')"
end
result = true
@projects = []
- sqlite_db_file = "DBI:SQLite3:#{BuildServer::CONFIG_ROOT}/#{@server.id}/server.db"
begin
# open DB
- db = DBI.connect(sqlite_db_file)
+ db = DBI.connect("DBI:#{@server.db_dsn}", @server.db_user, @server.db_passwd)
# distributions
rs = db.execute "SELECT * FROM projects"