pkgsvr_port = svr_result[1]
BuildServerController.add_distribution( option[:name], option[:dist], pkgsvr_url, pkgsvr_addr, pkgsvr_port, option[:passwd] )
+ when "clone-dist"
+ svr_result = Utils.parse_server_addr(option[:domain])
+ if svr_result.nil? or svr_result.length != 2 then
+ puts "Server address is incorrect. (#{option[:domain]})"
+ puts "Tune as following format."
+ puts " <ip>:<port>"
+ exit 1
+ end
+ pkgsvr_url = option[:url]
+ pkgsvr_addr = svr_result[0]
+ pkgsvr_port = svr_result[1]
+ BuildServerController.clone_distribution( option[:name], option[:origin_dist], option[:target_dist], pkgsvr_url, pkgsvr_addr, pkgsvr_port, option[:passwd] )
+
when "remove-dist"
BuildServerController.remove_distribution( option[:name], option[:dist] )
end
end
+ # clone distribution
+ def self.clone_distribution( id, origin_dist_name, target_dist_name, pkgsvr_url, pkgsvr_ip, pkgsvr_port, pkgsvr_password )
+ server = get_server(id)
+
+ if not server.has_db? then
+ puts BuildServerException.get_message("ERR021")
+ return false
+ end
+ migrate_db(server)
+
+ # add
+ if server.distmgr.clone_distribution( origin_dist_name, target_dist_name, pkgsvr_url, pkgsvr_ip, pkgsvr_port, pkgsvr_password ) then
+ puts "Distribution is cloned successfully!"
+ return true
+ else
+ puts "Check distribution (Not found origin distribution or Target distribution is already exists) "
+ return false
+ end
+ end
+
+
# remove distribution
def self.remove_distribution( id, dist_name )
ADD_OS= "build-svr add-os -n <server name> -o <os>"
REMOVE_OS="build-svr remove-os -n <server name> -o <os>"
ADD_DIST= "build-svr add-dist -n <server name> -D <distribution name> -u <package server url> -d <package server address> [-w <password>]"
+ CLONE_DIST= "build-svr clone-dist -n <server name> -O <origin distribution name> -T <target distribution name> -u <package server url> -d <package server address> [-w <password>]"
REMOVE_DIST="build-svr remove-dist -n <server name> -D <distribution name>"
LOCK_DIST="build-svr lock-dist -n <server name> -D <distribution name>"
UNLOCK_DIST="build-svr unlock-dist -n <server name> -D <distribution name>"
raise ArgumentError, "Usage: " + BuildServerUsage::ADD_DIST
end
+ when "clone-dist"
+ if options[:name].nil? or options[:name].empty? or
+ options[:origin_dist].nil? or options[:origin_dist].empty? or
+ options[:target_dist].nil? or options[:target_dist].empty? or
+ options[:url].nil? or options[:url].empty? or
+ options[:domain].nil? or options[:domain].empty? then
+ raise ArgumentError, "Usage: " + BuildServerUsage::ADD_DIST
+ end
+
when "remove-dist"
if options[:name].nil? or options[:name].empty? or
options[:dist].nil? or options[:dist].empty? then
+ "\t" + "add-os Add supported OS." + "\n" \
+ "\t" + "remove-os Remove supported OS." + "\n" \
+ "\t" + "add-dist Add distribution." + "\n" \
+ + "\t" + "clone-dist Clone distribution." + "\n" \
+ "\t" + "remove-dist Remove distribution." + "\n" \
+ "\t" + "lock-dist Lock distribution." + "\n" \
+ "\t" + "unlock-dist Unlock distribution." + "\n" \
+ "\t" + BuildServerUsage::ADD_OS + "\n" \
+ "\t" + BuildServerUsage::REMOVE_OS + "\n" \
+ "\t" + BuildServerUsage::ADD_DIST + "\n" \
+ + "\t" + BuildServerUsage::CLONE_DIST + "\n" \
+ "\t" + BuildServerUsage::REMOVE_DIST + "\n" \
+ "\t" + BuildServerUsage::LOCK_DIST + "\n" \
+ "\t" + BuildServerUsage::UNLOCK_DIST + "\n" \
options[:dist] = dist
end
+ options[:origin_dist] = ""
+ opts.on( '-O', '--origin-dist <origin distribution name>', 'origin distribution name' ) do |dist|
+ options[:origin_dist] = dist
+ end
+
+ options[:target_dist] = ""
+ opts.on( '-T', '--target-dist <target distribution name>', 'target distribution name' ) do |dist|
+ options[:target_dist] = dist
+ end
+
options[:passwd] = ""
opts.on( '-w', '--passwd <password>', 'password for managing project' ) do|passwd|
cmd.eql? "stop" or cmd.eql? "migrate" or
cmd.eql? "add-svr" or cmd.eql? "remove-svr" or
cmd.eql? "add-os" or cmd.eql? "remove-os" or
- cmd.eql? "add-dist" or cmd.eql? "remove-dist" or
+ cmd.eql? "add-dist" or cmd.eql? "clone-dist" or
+ cmd.eql? "remove-dist" or
cmd.eql? "lock-dist" or cmd.eql? "unlock-dist" or
cmd.eql? "add-sync" or cmd.eql? "remove-sync" or
cmd.eql? "add-prj" or cmd.eql? "remove-prj" or
$LOAD_PATH.unshift File.dirname(File.dirname(__FILE__))+"/common"
class CommonProject
- attr_accessor :name, :type, :os_list, :dist_name, :path, :status, :prj_id
+ attr_accessor :prj_id, :name, :type, :os_list, :dist_name, :path, :status
# initialize
def initialize( name, type, server, os_list, dist_name="BASE", status="OPEN" )
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}\""
+
+ #Get project list
+ projects = @server.prjmgr.get_all_projects()
+
+ #Add project
+ projects.each do |prj|
+ if prj.type.eql? "GIT" then
+ @server.prjmgr.add_git_project(prj.name, prj.repository, prj.branch, prj.os_list, target_name)
+
+ source = prj.get_latest_source_info(db)
+ if not source.nil? then
+ new_prj = @server.prjmgr.get_project(prj.name, target_name)
+ db.do "INSERT INTO sources(project_id, pkg_ver,location)
+ VALUES(#{new_prj.prj_id},'#{source["pkg_ver"]}','#{source["location"]}')"
+ end
+ elsif prj.type.eql? "BINARY" then
+ @server.prjmgr.add_binary_project(prj.name, prj.pkg_name, prj.os_list, target_name)
+ 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.errstr
+ end
+ end
+ return result
+ end
+
+
# remove
#name remove_distribution(name)
#return ture when remove distribution successed
end
end
- def get_latest_commit_id(db)
- source_info = db.select_one("SELECT * FROM sources WHERE project_id =#{@prj_id} ORDER BY id DESC")
- return source_info.location
+ def get_latest_source_info(db)
+ source_info = nil
+ data = db.select_one("SELECT * FROM sources WHERE project_id =#{@prj_id} ORDER BY id DESC")
+ if not data.nil? then
+ source_info = {"pkg_ver" => data[2], "location" => data[3]}
+ end
+ return source_info
end
+
end