Add copy access information in distribution clone. 10/21810/1
authorSungmin Kim <dev.sungmin.kim@samsung.com>
Wed, 28 May 2014 05:53:10 +0000 (14:53 +0900)
committerSungmin Kim <dev.sungmin.kim@samsung.com>
Wed, 28 May 2014 05:53:10 +0000 (14:53 +0900)
Signed-off-by: Sungmin Kim <dev.sungmin.kim@samsung.com>
Change-Id: Id41ddb6fab7f208137b2c05f85d9b4555fce81d2

package/changelog
package/pkginfo.manifest
src/build_server/BuildServerController.rb
src/build_server/DistributionManager.rb

index 97ffe41a3c724e88def7b93215da7d83ce0d4941..17daa6d50435fa57ba267efb94f761b992ed5d8b 100644 (file)
@@ -1,3 +1,6 @@
+* 2.1.64
+- Copy project access information in clone distribution
+== Sungmin kim <dev.sungmin.kim@samsung.com> 2014-05-28
 * 2.1.63
 - Fixed search job with project name matching.
 == Sungmin kim <dev.sungmin.kim@samsung.com> 2014-04-14
index 6ca59bb094240a17e4c521ae5bfd1a0ada76ae8d..8b0cd1d232e94b201563b7a58b5f14a3c6784385 100644 (file)
@@ -1,5 +1,5 @@
 Source : dibs
-Version :2.1.63
+Version :2.1.64
 Maintainer : taejun ha<taejun.ha@samsung.com>, jiil hyoun <jiil.hyoun@samsung.com>, donghyuk yang <donghyouk.yang@samsung.com>, donghee yang <donghee.yang@samsung.com>, sungmin kim <dev.sungmin.kim@samsung.com, jonghwan park <jonghwan2.park@samsung.com>
 
 Package : tizen-dibs-test
index 29b31c0300e5cb76ea1cd95c191a1a7a6255bba9..1c1a218ba7b27ed83251aefcba743a272e0da6ac 100644 (file)
@@ -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
index d16158fd00d3a03606a5e7f5f1eccc97dcf86bf4..d07e779613c83c841560977040759d4dbed4c24c 100644 (file)
@@ -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