From: Sungmin Kim Date: Wed, 28 May 2014 05:53:10 +0000 (+0900) Subject: Add copy access information in distribution clone. X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=4bbb80469ceaaa89d4b4580f0087fe73b81dddb3;p=sdk%2Ftools%2Fsdk-build.git Add copy access information in distribution clone. Signed-off-by: Sungmin Kim Change-Id: Id41ddb6fab7f208137b2c05f85d9b4555fce81d2 --- diff --git a/package/changelog b/package/changelog index 97ffe41..17daa6d 100644 --- a/package/changelog +++ b/package/changelog @@ -1,3 +1,6 @@ +* 2.1.64 +- Copy project access information in clone distribution +== Sungmin kim 2014-05-28 * 2.1.63 - Fixed search job with project name matching. == Sungmin kim 2014-04-14 diff --git a/package/pkginfo.manifest b/package/pkginfo.manifest index 6ca59bb..8b0cd1d 100644 --- a/package/pkginfo.manifest +++ b/package/pkginfo.manifest @@ -1,5 +1,5 @@ Source : dibs -Version :2.1.63 +Version :2.1.64 Maintainer : taejun ha, jiil hyoun , donghyuk yang , donghee yang , sungmin kim Package : tizen-dibs-test diff --git a/src/build_server/BuildServerController.rb b/src/build_server/BuildServerController.rb index 29b31c0..1c1a218 100644 --- a/src/build_server/BuildServerController.rb +++ b/src/build_server/BuildServerController.rb @@ -395,7 +395,7 @@ class BuildServerController puts "Distribution is cloned successfully!" return true else - puts "Check distribution (Not found origin distribution or Target distribution is already exists) " + puts "Fail clone distribution. check the log file" return false end end diff --git a/src/build_server/DistributionManager.rb b/src/build_server/DistributionManager.rb index d16158f..d07e779 100644 --- a/src/build_server/DistributionManager.rb +++ b/src/build_server/DistributionManager.rb @@ -35,189 +35,193 @@ require "RegisterPackageJob.rb" require "packageServer.rb" class PackageDistribution - attr_accessor :name, :pkgsvr_url, :pkgsvr_ip, :pkgsvr_port, :pkgsvr_password, :status, :description, :id - - def initialize( name, pkgsvr_url, pkgsvr_ip, pkgsvr_port, pkgsvr_password, status ) - @id = -1 - @name = name - @pkgsvr_url = pkgsvr_url - @pkgsvr_ip = pkgsvr_ip - @pkgsvr_port = pkgsvr_port - @pkgsvr_password = pkgsvr_password - @status = status - @description = "" - end - - - def self.create_table(db, inc, post_fix) - db.do "CREATE TABLE distributions ( - id INTEGER PRIMARY KEY #{inc}, - name VARCHAR(32) NOT NULL UNIQUE, - pkgsvr_url VARCHAR(256), - pkgsvr_addr VARCHAR(64), - pkgsvr_password VARCHAR(64), - status VARCHAR(32) NOT NULL DEFAULT 'OPEN', - description VARCHAR(256) ) #{post_fix}" - end - - - def self.load(name, db) - row = db.select_one("SELECT * FROM distributions WHERE name='#{name}'") - return ( row.nil? ) ? nil : load_row(row) - end - - - def unload(db) - #TODO remove sync_pkg_server - #TODO remove projects - #TODO remove jobs - db.do("DELETE FROM distributions WHERE name='#{@name}'") - end - - - def self.load_all(db) - result = [] - db.select_all("SELECT * FROM distributions") do |row | - result.push load_row(row) - end - return result - end - - - def self.load_first(db) - row = db.select_one("SELECT * FROM distributions ORDER BY id") - return ( row.nil? ) ? nil : load_row(row) - end - - - def self.load_row(row) - pkgsvr_ip = row['pkgsvr_addr'].split(":")[0] - pkgsvr_port = row['pkgsvr_addr'].split(":")[1].to_i - new_obj = new(row['name'], row['pkgsvr_url'], pkgsvr_ip, pkgsvr_port, row['pkgsvr_password'], row['status']) - new_obj.description = row['description'] - new_obj.id = row['id'] - - return new_obj - end - - - def save(db) - dist_addr = @pkgsvr_ip + ":" + @pkgsvr_port.to_s - row = db.select_one("SELECT * FROM distributions WHERE name='#{@name}'") - if row.nil? then - db.do "INSERT INTO distributions(name, pkgsvr_url, pkgsvr_addr, pkgsvr_password, status, description) VALUES ('#{@name}','#{@pkgsvr_url}','#{dist_addr}','#{@pkgsvr_password}','#{@status}','#{@description}')" - else - db.do "UPDATE distributions SET pkgsvr_url='#{@pkgsvr_url}', pkgsvr_addr='#{dist_addr}', pkgsvr_password='#{@pkgsvr_password}', status='#{@status}', description='#{@description}' WHERE name='#{@name}'" - end - end - - - def self.get_distribution_id(db, dist_name) - row = db.select_one("SELECT * FROM distributions WHERE name='#{dist_name}'") - return ( row.nil? ) ? "NULL" : row['id'] - end + attr_accessor :name, :pkgsvr_url, :pkgsvr_ip, :pkgsvr_port, :pkgsvr_password, :status, :description, :id + + def initialize( name, pkgsvr_url, pkgsvr_ip, pkgsvr_port, pkgsvr_password, status ) + @id = -1 + @name = name + @pkgsvr_url = pkgsvr_url + @pkgsvr_ip = pkgsvr_ip + @pkgsvr_port = pkgsvr_port + @pkgsvr_password = pkgsvr_password + @status = status + @description = "" + end + + + def self.create_table(db, inc, post_fix) + db.do "CREATE TABLE distributions ( + id INTEGER PRIMARY KEY #{inc}, + name VARCHAR(32) NOT NULL UNIQUE, + pkgsvr_url VARCHAR(256), + pkgsvr_addr VARCHAR(64), + pkgsvr_password VARCHAR(64), + status VARCHAR(32) NOT NULL DEFAULT 'OPEN', + description VARCHAR(256) ) #{post_fix}" + end + + + def self.load(name, db) + row = db.select_one("SELECT * FROM distributions WHERE name='#{name}'") + return ( row.nil? ) ? nil : load_row(row) + end + + + def unload(db) + #TODO remove sync_pkg_server + #TODO remove projects + #TODO remove jobs + db.do("DELETE FROM distributions WHERE name='#{@name}'") + end + + + def self.load_all(db) + result = [] + db.select_all("SELECT * FROM distributions") do |row | + result.push load_row(row) + end + return result + end + + + def self.load_first(db) + row = db.select_one("SELECT * FROM distributions ORDER BY id") + return ( row.nil? ) ? nil : load_row(row) + end + + + def self.load_row(row) + pkgsvr_ip = row['pkgsvr_addr'].split(":")[0] + pkgsvr_port = row['pkgsvr_addr'].split(":")[1].to_i + new_obj = new(row['name'], row['pkgsvr_url'], pkgsvr_ip, pkgsvr_port, row['pkgsvr_password'], row['status']) + new_obj.description = row['description'] + new_obj.id = row['id'] + + return new_obj + end + + + def save(db) + dist_addr = @pkgsvr_ip + ":" + @pkgsvr_port.to_s + row = db.select_one("SELECT * FROM distributions WHERE name='#{@name}'") + if row.nil? then + db.do "INSERT INTO distributions(name, pkgsvr_url, pkgsvr_addr, pkgsvr_password, status, description) VALUES ('#{@name}','#{@pkgsvr_url}','#{dist_addr}','#{@pkgsvr_password}','#{@status}','#{@description}')" + else + db.do "UPDATE distributions SET pkgsvr_url='#{@pkgsvr_url}', pkgsvr_addr='#{dist_addr}', pkgsvr_password='#{@pkgsvr_password}', status='#{@status}', description='#{@description}' WHERE name='#{@name}'" + end + end + + + def self.get_distribution_id(db, dist_name) + row = db.select_one("SELECT * FROM distributions WHERE name='#{dist_name}'") + return ( row.nil? ) ? "NULL" : row['id'] + end end class DistributionManager - # initialize - def initialize( server ) - @server = server - end - - - # get default distribution - def get_default_distribution_name() - dist = get_first_distribution() - return ( dist.nil? ) ? nil : dist.name - end - - - def get_default_pkgsvr_url() - dist = get_first_distribution() - return ( dist.nil? ) ? "" : dist.pkgsvr_url - end - - - # get distribution - #name get_distribution(name) - #return PackageDistribution - #return nil when package distribution not exit or DB connection error - def get_distribution(name) - # conntect DB - result = nil - begin - @server.get_db_connection() do |db| - result = get_distribution_internal(name, db) - end - rescue BuildServerException => e - if not @server.log.nil? then - @server.log.error e.message - end - rescue => e - if not @server.log.nil? then - @server.log.error e.errstr - end - end - return result - end - - - def get_distribution_internal(name, db) - return PackageDistribution.load(name, db) - end - - - # add - #name add_distribution(name, pkgsvr_url, pkgsvr_ip, pkgsvr_port, pkgsvr_password) - #return true when add distribution successed - #return false when distribution already exist or DB connection error - def add_distribution(name, pkgsvr_url, pkgsvr_ip, pkgsvr_port, pkgsvr_password) - result = false - begin - @server.get_db_connection() do |db| - if not get_distribution_internal(name, db).nil? then - @server.log.info "The distribution \"#{name}\" already exists on server" - @server.log.error "Adding distribution failed!" - else - new_dist = PackageDistribution.new(name, pkgsvr_url, pkgsvr_ip, pkgsvr_port, pkgsvr_password, "OPEN") - new_dist.save(db) - result = true - @server.log.info "Added a new distribution \"#{name}\"" - end - end - rescue BuildServerException => e - if not @server.log.nil? then - @server.log.error e.message - end - rescue => e - if not @server.log.nil? then - @server.log.error e.errstr - end - end - return result - end - - - # clone - #name clone_distribution(origin_name, target_name, pkgsvr_url, pkgsvr_ip, pkgsvr_port, pkgsvr_password) - #return true when add distribution successed - #return false when distribution already exist or DB connection error - def clone_distribution(origin_name, target_name, pkgsvr_url, pkgsvr_ip, pkgsvr_port, pkgsvr_password) - result = false - begin - @server.get_db_connection() do |db| - if get_distribution_internal(origin_name, db).nil? then - @server.log.info "The distribution \"#{origin_name}\" is not exists on server" - @server.log.error "Clone distribution failed!" - elsif not get_distribution_internal(target_name, db).nil? then - @server.log.info "The distribution \"#{target_name}\" already exists on server" - @server.log.error "Clone distribution failed!" - else - new_dist = PackageDistribution.new(target_name, pkgsvr_url, pkgsvr_ip, pkgsvr_port, pkgsvr_password, "OPEN") - new_dist.save(db) - @server.log.info "Added a new distribution \"#{target_name}\"" + # initialize + def initialize( server ) + @server = server + end + + + # get default distribution + def get_default_distribution_name() + dist = get_first_distribution() + return ( dist.nil? ) ? nil : dist.name + end + + + def get_default_pkgsvr_url() + dist = get_first_distribution() + return ( dist.nil? ) ? "" : dist.pkgsvr_url + end + + + # get distribution + #name get_distribution(name) + #return PackageDistribution + #return nil when package distribution not exit or DB connection error + def get_distribution(name) + # conntect DB + result = nil + begin + @server.get_db_connection() do |db| + result = get_distribution_internal(name, db) + end + rescue BuildServerException => e + if not @server.log.nil? then + @server.log.error e.message + end + rescue => e + if not @server.log.nil? then + @server.log.error e.errstr + end + end + return result + end + + + def get_distribution_internal(name, db) + return PackageDistribution.load(name, db) + end + + + # add + #name add_distribution(name, pkgsvr_url, pkgsvr_ip, pkgsvr_port, pkgsvr_password) + #return true when add distribution successed + #return false when distribution already exist or DB connection error + def add_distribution(name, pkgsvr_url, pkgsvr_ip, pkgsvr_port, pkgsvr_password) + result = false + begin + @server.get_db_connection() do |db| + if not get_distribution_internal(name, db).nil? then + @server.log.info "The distribution \"#{name}\" already exists on server" + @server.log.error "Adding distribution failed!" + else + new_dist = PackageDistribution.new(name, pkgsvr_url, pkgsvr_ip, pkgsvr_port, pkgsvr_password, "OPEN") + new_dist.save(db) + result = true + @server.log.info "Added a new distribution \"#{name}\"" + end + end + rescue BuildServerException => e + if not @server.log.nil? then + @server.log.error e.message + end + rescue => e + if not @server.log.nil? then + @server.log.error e.errstr + end + end + return result + end + + + # clone + #name clone_distribution(origin_name, target_name, pkgsvr_url, pkgsvr_ip, pkgsvr_port, pkgsvr_password) + #return true when add distribution successed + #return false when distribution already exist or DB connection error + def clone_distribution(origin_name, target_name, pkgsvr_url, pkgsvr_ip, pkgsvr_port, pkgsvr_password) + result = false + begin + @server.get_db_connection() do |db| + if get_distribution_internal(origin_name, db).nil? then + puts "The distribution \"#{origin_name}\" is not exists on server" + puts "Clone distribution failed!" + @server.log.info "The distribution \"#{origin_name}\" is not exists on server" + @server.log.error "Clone distribution failed!" + elsif not get_distribution_internal(target_name, db).nil? then + puts "The distribution \"#{target_name}\" already exists on server" + puts "Clone distribution failed!" + @server.log.info "The distribution \"#{target_name}\" already exists on server" + @server.log.error "Clone distribution failed!" + else + new_dist = PackageDistribution.new(target_name, pkgsvr_url, pkgsvr_ip, pkgsvr_port, pkgsvr_password, "OPEN") + new_dist.save(db) + @server.log.info "Added a new distribution \"#{target_name}\"" #Get project list projects = @server.prjmgr.get_projects_in_distribution(origin_name) @@ -229,142 +233,157 @@ class DistributionManager elsif prj.type.eql? "BINARY" then @server.prjmgr.add_binary_project(prj.name, prj.pkg_name, prj.os_list, target_name) end + + new_prj = @server.prjmgr.get_project(prj.name, target_name) # copy source info source_cnt = db.select_one("SELECT count(*) val FROM sources WHERE project_id =#{prj.prj_id}")[0] if( source_cnt > 0 ) - new_prj = @server.prjmgr.get_project(prj.name, target_name) - db.do "INSERT INTO sources(project_id, pkg_ver,location) - SELECT #{new_prj.prj_id}, pkg_ver, location FROM sources WHERE project_id = #{prj.prj_id}" + db.do "INSERT INTO sources(project_id, pkg_ver,location) + SELECT #{new_prj.prj_id}, pkg_ver, location FROM sources WHERE project_id = #{prj.prj_id}" + end + + # copy access info + rows = db.select_all("SELECT * FROM group_project_accesses WHERE project_id = #{prj.prj_id}") + if rows.nil? then + next + end + rows.each do |row| + group_id = row['group_id'] + if group_id == 1 then + next + end + db.do "INSERT INTO group_project_accesses (group_id, project_id, build) + VALUES (#{group_id}, #{new_prj.prj_id}, 'TRUE')" end end - result = true - end - end - rescue BuildServerException => e - if not @server.log.nil? then - @server.log.error e.message - end - rescue => e - if not @server.log.nil? then - @server.log.error e.message - end - end - return result - end - - - # remove - #name remove_distribution(name) - #return ture when remove distribution successed - #return false when distribution not exist or DB connection error or DB conncetion error - def remove_distribution(name) - result = false - begin - @server.get_db_connection() do |db| - dist = get_distribution_internal(name, db) - if dist.nil? then - @server.log.error "The distribution \"#{name}\" does not exists on server" - @server.log.error "Removing distribution failed!" - else - dist.unload(db) - result = true - @server.log.info "Removed the distribution \"#{name}\"" - end - end - rescue BuildServerException => e - if not @server.log.nil? then - @server.log.error e.message - end - rescue => e - if not @server.log.nil? then - @server.log.error e.errstr - end - end - - return result - end - - - #name get_first_distribution() - #return PackageDistribution - #return nil when no distribution exist or DB connection error - def get_first_distribution() - result = nil - begin - @server.get_db_connection() do |db| - result = PackageDistribution.load_first(db) - end - rescue BuildServerException => e - if not @server.log.nil? then - @server.log.error e.message - end - rescue => e - if not @server.log.nil? then - @server.log.error e.errstr - end - end - - return result - end - - - #name get_all_distributions() - #return PackageDistribution list - #return [] when no PackageDistribution exist or DB connection error - def get_all_distributions() - result = [] - begin - @server.get_db_connection() do |db| - result = PackageDistribution.load_all(db) - end - rescue BuildServerException => e - if not @server.log.nil? then - @server.log.error e.message - end - rescue => e - if not @server.log.nil? then - @server.log.error e.errstr - end - end - - return result - end - - - #name set_distribution_lock(name, value=true) - #return true when distribution lock setted - #return false when distribution lock not exist or DB connection error - def set_distribution_lock(name, value=true) - result = false - begin - @server.get_db_connection() do |db| - # check already exist - dist = get_distribution_internal(name, db) - if dist.nil? then return false end - - dist.status = (value)? "CLOSE" : "OPEN" - dist.save(db) - end - if value then - @server.log.info "The distribution \"#{name}\" is locked!" - else - @server.log.info "The distribution \"#{name}\" is unlocked!" - end - result = true - rescue BuildServerException => e - if not @server.log.nil? then - @server.log.error e.message - end - rescue => e - if not @server.log.nil? then - @server.log.error e.errstr - end - end - - return result - end - - #END + result = true + end + end + rescue BuildServerException => e + if not @server.log.nil? then + @server.log.error e.message + end + rescue => e + if not @server.log.nil? then + @server.log.error e.message + end + end + return result + end + + + # remove + #name remove_distribution(name) + #return ture when remove distribution successed + #return false when distribution not exist or DB connection error or DB conncetion error + def remove_distribution(name) + result = false + begin + @server.get_db_connection() do |db| + dist = get_distribution_internal(name, db) + if dist.nil? then + @server.log.error "The distribution \"#{name}\" does not exists on server" + @server.log.error "Removing distribution failed!" + else + dist.unload(db) + result = true + @server.log.info "Removed the distribution \"#{name}\"" + end + end + rescue BuildServerException => e + if not @server.log.nil? then + @server.log.error e.message + end + rescue => e + if not @server.log.nil? then + @server.log.error e.errstr + end + end + + return result + end + + + #name get_first_distribution() + #return PackageDistribution + #return nil when no distribution exist or DB connection error + def get_first_distribution() + result = nil + begin + @server.get_db_connection() do |db| + result = PackageDistribution.load_first(db) + end + rescue BuildServerException => e + if not @server.log.nil? then + @server.log.error e.message + end + rescue => e + if not @server.log.nil? then + @server.log.error e.errstr + end + end + + return result + end + + + #name get_all_distributions() + #return PackageDistribution list + #return [] when no PackageDistribution exist or DB connection error + def get_all_distributions() + result = [] + begin + @server.get_db_connection() do |db| + result = PackageDistribution.load_all(db) + end + rescue BuildServerException => e + if not @server.log.nil? then + @server.log.error e.message + end + rescue => e + if not @server.log.nil? then + @server.log.error e.errstr + end + end + + return result + end + + + #name set_distribution_lock(name, value=true) + #return true when distribution lock setted + #return false when distribution lock not exist or DB connection error + def set_distribution_lock(name, value=true) + result = false + begin + @server.get_db_connection() do |db| + # check already exist + dist = get_distribution_internal(name, db) + if dist.nil? then return false end + + dist.status = (value)? "CLOSE" : "OPEN" + dist.save(db) + end + if value then + @server.log.info "The distribution \"#{name}\" is locked!" + else + @server.log.info "The distribution \"#{name}\" is unlocked!" + end + result = true + rescue BuildServerException => e + if not @server.log.nil? then + @server.log.error e.message + end + rescue => e + if not @server.log.nil? then + @server.log.error e.errstr + end + end + + return result + end + + #END end