# initialize
def initialize( name, server, os_list, dist_name, pkg_name = nil )
- super(name, "BINARY", server, os_list, dist_name)
+ super(name, "BINARY", server, os_list, dist_name, "OPEN")
@pkg_name = pkg_name
end
prj_id = row['id']
prj_name = row['name']
prj_passwd = row['password']
+ prj_status = row['status']
new_project = BinaryUploadProject.new(prj_name, server, prj_os_list, dist_name)
if not prj_passwd.empty? then new_project.passwd = prj_passwd end
new_project.set_project_id( prj_id )
new_project.set_source_info( source_info )
new_project.set_package_info( package_info )
+ new_project.set_project_status( prj_status )
row=db.select_one("SELECT * FROM project_bins WHERE project_id=#{prj_id}")
if row.nil? then return nil end
@db_dsn = "SQLite3:#{BuildServer::CONFIG_ROOT}/#{@id}/server.db"
@db_user = nil
@db_passwd = nil
- @db_version = 2
+ @db_version = 3
@sqlite3_db_mutex = Mutex.new
#DB upgrade SQL command
if @db_dsn =~ /^Mysql/i then
@db_migrate[1]=["ALTER TABLE jobs CHANGE COLUMN id id INTEGER AUTO_INCREMENT NOT NULL",
"ALTER TABLE distributions ADD pkgsvr_password VARCHAR(64)"]
+ @db_migrate[2]=["ALTER TABLE projects ADD COLUMN status VARCHAR(32) NOT NULL DEFAULT 'OPEN'"]
else
@db_migrate[1]=["ALTER TABLE distributions ADD pkgsvr_password VARCHAR(64)"]
+ @db_migrate[2]=["ALTER TABLE projects ADD COLUMN status VARCHAR(32) NOT NULL DEFAULT 'OPEN'"]
end
end
"ERR014" => "Job cancel failed!",
"ERR015" => "Server password not matched!",
"ERR016" => "Can't received register file!",
+ "ERR017" => "Project locked!",
"ERR900" => "Cancel event received!",
"ERR901" => "Job already upload status. Cancel failed!"
$LOAD_PATH.unshift File.dirname(File.dirname(__FILE__))+"/common"
class CommonProject
- attr_accessor :name, :type, :passwd, :os_list, :dist_name, :path
+ attr_accessor :name, :type, :passwd, :os_list, :dist_name, :path, :status
# initialize
- def initialize( name, type, server, os_list, dist_name="BASE" )
+ def initialize( name, type, server, os_list, dist_name="BASE", status="OPEN" )
@prj_id = -1
@name = name
@type = type
@os_list = os_list
@server = server
@dist_name = dist_name
+ @status = status
@source_info = {}
@package_info = {}
if @dist_name == "BASE" then
return @prj_id
end
+ def set_project_status(status)
+ @status = status
+ end
+
+ def get_project_status()
+ return @status
+ end
+
def self.create_table(db, inc, post_fix)
db.do "CREATE TABLE projects (
id INTEGER PRIMARY KEY #{inc},
name VARCHAR(32) NOT NULL,
ptype VARCHAR(32) NOT NULL,
password VARCHAR(32),
+ status VARCHAR(32) NOT NULL DEFAULT 'OPEN',
CONSTRAINT fk_projects_users1 FOREIGN KEY ( user_id ) REFERENCES users ( id ),
CONSTRAINT fk_projects_distributions1 FOREIGN KEY ( distribution_id ) REFERENCES distributions ( id ) )#{post_fix}"
if @prj_id == -1 then
row = db.select_one("SELECT * FROM distributions WHERE name='#{@dist_name}'")
dist_id = row['id']
- db.do "INSERT INTO projects (distribution_id,name,ptype,password)
- VALUES (#{dist_id},'#{@name}','#{@type}','#{@passwd}')"
+ db.do "INSERT INTO projects (distribution_id,name,ptype,password,status)
+ VALUES (#{dist_id},'#{@name}','#{@type}','#{@passwd}','#{@status}')"
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
row = db.select_one("SELECT * FROM distributions WHERE name='#{@dist_name}'")
dist_id = row['id']
- db.do "UPDATE projects SET ptype='#{@type}',password='#{@passwd}' WHERE name='#{@name}' and distribution_id=#{dist_id})"
+ db.do "UPDATE projects SET ptype='#{@type}',password='#{@passwd}',status='#{@status}' WHERE name='#{@name}' and distribution_id=#{dist_id})"
db.do "DELETE FROM project_os WHERE project_id=#{@prj_id}"
@os_list.each do |os|
row = db.select_one("SELECT * FROM supported_os WHERE name='#{os}'")
# initialize
def initialize( name, server, os_list, dist_name, repos = nil, branch = nil )
- super(name, "GIT", server, os_list, dist_name)
+ super(name, "GIT", server, os_list, dist_name, "OPEN")
@repository = repos
@branch = branch
end
prj_id = row['id']
prj_name = row['name']
prj_passwd = row['password']
+ prj_status = row['status']
new_project = GitBuildProject.new(prj_name, server, prj_os_list, dist_name)
if not prj_passwd.empty? then new_project.passwd = prj_passwd end
new_project.set_project_id( prj_id )
new_project.set_source_info( source_info )
new_project.set_package_info( package_info )
+ new_project.set_project_status( prj_status )
row=db.select_one("SELECT * FROM project_gits WHERE project_id=#{prj_id}")
if row.nil? then return nil end
# check project
prj = check_project_exist(prj_name, dist_name, req)
+ # check project status
+ if prj.status != "OPEN" then
+ raise BuildServerException.new("ERR017"), "#{project_name} on #{dist_name}. project is [[#{project.status}]]"
+ end
+
# check passwd
check_project_password(prj, passwd, req)
# check distribution
check_distribution(dist_name, req)
+ # check project
+ prj = check_project_for_package_file_name(filename, dist_name, req)
+
+ # check project status
+ if prj.status != "OPEN" then
+ raise BuildServerException.new("ERR017"), "#{prj.name} on #{dist_name}. project is [[#{prj.status}]]"
+ end
+
new_job = @parent_server.jobmgr.create_new_register_job( file_path, dist_name )
new_job.create_logger( req )
# check project
prj = check_project_for_package_file_name(filename, dist_name, req)
+ # check project status
+ if prj.status != "OPEN" then
+ raise BuildServerException.new("ERR017"), "#{prj.name} on #{dist_name}. project is [[#{prj.status}]]"
+ end
+
# check user email
user_id = @parent_server.check_user_id_from_email( user_email )
if user_id == -1 then
end
end
-
private
def check_supported_os(os_list, req)