[Title] Added commands for multi-distribution
authordonghee yang <donghee.yang@samsung.com>
Fri, 5 Oct 2012 07:49:50 +0000 (16:49 +0900)
committerdonghee yang <donghee.yang@samsung.com>
Fri, 5 Oct 2012 07:49:50 +0000 (16:49 +0900)
43 files changed:
build-cli
build-svr
src/build_server/BinaryUploadProject.rb
src/build_server/BuildClientOptionParser.rb
src/build_server/BuildServer.rb
src/build_server/BuildServerController.rb
src/build_server/BuildServerOptionParser.rb
src/build_server/CommonProject.rb
src/build_server/DistributionManager.rb
src/build_server/GitBuildJob.rb
src/build_server/GitBuildProject.rb
src/build_server/JobManager.rb
src/build_server/ProjectManager.rb
src/build_server/RegisterPackageJob.rb
src/build_server/RemoteBuilder.rb
src/build_server/SocketJobRequestListener.rb
test/build-cli-01.testcase
test/build-svr-01.testcase
test/build-svr-02.testcase
test/build-svr-03.testcase
test/build-svr-04.testcase
test/build-svr-13.testcase
test/build-svr-14.testcase
test/build-svr-17.testcase
test/build-svr-20.testcase
test/build-svr2-01.testcase [new file with mode: 0644]
test/build-svr2-02.testcase [new file with mode: 0644]
test/build-svr2-03.testcase [new file with mode: 0644]
test/build-svr2-04.testcase [new file with mode: 0644]
test/build-svr2-05.testcase [new file with mode: 0644]
test/build-svr2-06.testcase [new file with mode: 0644]
test/build-svr2-07.testcase [new file with mode: 0644]
test/build-svr2-08.testcase [new file with mode: 0644]
test/build-svr3-01.testcase [new file with mode: 0644]
test/build-svr3-02.testcase [new file with mode: 0644]
test/build-svr3-03.testcase [new file with mode: 0644]
test/build-svr3-04.testcase [new file with mode: 0644]
test/buildsvr.init
test/buildsvr2.init [new file with mode: 0755]
test/buildsvr3.init [new file with mode: 0755]
test/buildsvr4.init [new file with mode: 0755]
test/pkgsvr4.init [new file with mode: 0755]
test/regression.rb

index 820759847b0adab270e4798445d9bb3dcc99d3e5..11460877c8aad298024d9daae105e7800f121528 100755 (executable)
--- a/build-cli
+++ b/build-cli
@@ -157,7 +157,7 @@ begin
         end
                client = BuildCommClient.create( result[0], result[1], nil, 0 )
                if not client.nil? then
-                       client.send "BUILD|GIT|#{option[:project]}|#{option[:passwd]}|#{option[:os]}|#{option[:async]}|#{option[:noreverse]}"
+                       client.send "BUILD|GIT|#{option[:project]}|#{option[:passwd]}|#{option[:os]}|#{option[:async]}|#{option[:noreverse]}|#{option[:dist]}"
                        client.print_stream
                        client.terminate
                else
@@ -174,7 +174,7 @@ begin
         end
                client = BuildCommClient.create( result[0], result[1], nil, 0 )
                if not client.nil? then
-                       client.send "RESOLVE|GIT|#{option[:project]}|#{option[:passwd]}|#{option[:os]}|#{option[:async]}" 
+                       client.send "RESOLVE|GIT|#{option[:project]}|#{option[:passwd]}|#{option[:os]}|#{option[:async]}|#{option[:dist]}
                        client.print_stream
                        client.terminate
                end
@@ -304,7 +304,7 @@ begin
                        puts "Can't access server #{bs_ip}:#{bs_port}"
                        exit(-1)
                end
-               client.send("REGISTER|BINARY|#{File.basename(option[:package])}|#{option[:passwd]}|#{dock}")
+               client.send("REGISTER|BINARY|#{File.basename(option[:package])}|#{option[:passwd]}|#{dock}|#{option[:dist]}")
                client.print_stream
                client.terminate
 
index 02727cec18b6ac9d5eb53a92ba12a530ef289306..a3ee0211526d7dd67e16e7343129aef944c1d3f4 100755 (executable)
--- a/build-svr
+++ b/build-svr
@@ -50,21 +50,9 @@ if not Utils.check_host_OS() then
        exit 1
 end
 
-# if "--os" is not specified, set it as default 
-if option[:os].nil? then
-    option[:os] = "default"
-end 
-
 begin
        case option[:cmd]
        when "create"
-        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
         ftp_result = Utils.parse_ftpserver_url(option[:fdomain])
         if ftp_result.nil? or ftp_result.length != 4 then
             puts "FTP server url is incorrect. (#{option[:fdomain]})"
@@ -72,19 +60,35 @@ begin
             puts " ftp://<usrename>:<passwd>@<address>:<port>"
             exit 1
         end
-        pkgsvr_addr = svr_result[0]
-        pkgsvr_port = svr_result[1]
         ftpsvr_addr = ftp_result[0]
         ftpsvr_port = ftp_result[1]
         ftpsvr_username = ftp_result[2]
         ftpsvr_passwd = ftp_result[3]
-               BuildServerController.create_server( option[:name], Utils::WORKING_DIR, ftpsvr_addr, ftpsvr_port, ftpsvr_username, ftpsvr_passwd, option[:url], pkgsvr_addr, pkgsvr_port )
+               pkgsvr_url = pkgsvr_addr = pkgsvr_port = nil
+               if not option[:domain].nil? and not option[:url].nil? then
+               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]
+               end
+               BuildServerController.create_server( option[:name], Utils::WORKING_DIR, ftpsvr_addr, ftpsvr_port, ftpsvr_username, ftpsvr_passwd, pkgsvr_url, pkgsvr_addr, pkgsvr_port )
        when "remove"
                BuildServerController.remove_server( option[:name] ) 
        when "start"
                if( option[:child] ) then # Child Process
                        BuildServerController.start_server( option[:name], option[:port] ) 
                else  # Parent Process
+                       # check server config 
+                       if not File.exist? "#{BuildServer::CONFIG_ROOT}/#{option[:name]}/server.cfg" 
+                               raise RuntimeError, "The server \"#{option[:name]}\" does not exist!"
+                       end
+
                        log = Log.new( "#{BuildServer::CONFIG_ROOT}/#{option[:name]}/main.log" )
                        begin
                                while(true)
@@ -117,36 +121,74 @@ begin
                end
        when "stop"
                BuildServerController.stop_server( option[:name] ) 
+
        when "upgrade"
                BuildServerController.upgrade_server( option[:name] ) 
+
        when "add-svr"
-               if not option[:domain].nil? then
-               svr_result = Utils.parse_server_addr(option[:domain])
-               if svr_result.nil? or svr_result.length != 2 then
-               puts "Server address is incorrect. Tune as following format."
-               puts " <ip>:<port>"
-               exit 1
-               end
-               pkgsvr_addr = svr_result[0]
-               pkgsvr_port = svr_result[1]
-                       BuildServerController.add_friend_server( option[:name], pkgsvr_addr, pkgsvr_port ) 
-               elsif not option[:url].nil? then
-                       BuildServerController.add_remote_package_server( option[:name], option[:url], option[:proxy] ) 
-               end
+               svr_result = Utils.parse_server_addr(option[:domain])
+               if svr_result.nil? or svr_result.length != 2 then
+               puts "Server address is incorrect. Tune as following format."
+               puts " <ip>:<port>"
+               exit 1
+               end
+               pkgsvr_addr = svr_result[0]
+               pkgsvr_port = svr_result[1]
+               BuildServerController.add_remote_server( option[:name], pkgsvr_addr, pkgsvr_port ) 
+
+       when "remove-svr"
+               BuildServerController.remove_remote_server( option[:name], pkgsvr_addr, pkgsvr_port )
+       when "add-os"
+               BuildServerController.add_target_os( option[:name], option[:os] ) 
+
+       when "remove-os"
+               BuildServerController.remove_target_os( option[:name], option[:os] ) 
+
+       when "add-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.add_distribution( option[:name], option[:dist], pkgsvr_url, pkgsvr_addr, pkgsvr_port ) 
+
+       when "remove-dist"
+               BuildServerController.remove_distribution( option[:name], option[:dist] ) 
+
+       when "add-sync"
+               BuildServerController.add_sync_package_server( option[:name], option[:url], option[:dist] ) 
+
+       when "remove-sync"
+               BuildServerController.remove_sync_package_server( option[:name], option[:url], option[:dist] ) 
+
        when "add-prj"
                if not option[:git].nil? then
                        BuildServerController.add_project( option[:name], option[:pid], 
-                               option[:git], option[:branch], option[:remote], option[:passwd], option[:os] ) 
+                               option[:git], option[:branch], option[:remote], option[:passwd],
+                               option[:os], option[:dist] ) 
                else
                        BuildServerController.add_binary_project( option[:name], option[:pid], 
-                               option[:package], option[:passwd], option[:os] ) 
+                               option[:package], option[:passwd], option[:os], option[:dist] ) 
                end
-       when "add-os"
-               BuildServerController.add_target_os( option[:name], option[:os] ) 
+
+       when "remove-prj"
+               BuildServerController.remove_project( option[:name], option[:pid], option[:dist] ) 
+
        when "fullbuild"
-               BuildServerController.build_all_projects( option[:name] ) 
+               BuildServerController.build_all_projects( option[:name], option[:dist] ) 
+
        when "register"
-               BuildServerController.register_package( option[:name], option[:package] ) 
+               BuildServerController.register_package( option[:name], option[:package], option[:dist] ) 
+
+       when "query"
+               BuildServerController.query_server( option[:name] ) 
+
        else
                raise RuntimeError, "input option incorrect : #{option[:cmd]}"
        end
index 7242b6c043cc3ea587e35f02736de35ceb47b05a..49f7eb864b06b59735db60cf14fdf73f418d0e8f 100644 (file)
@@ -39,8 +39,8 @@ class BinaryUploadProject < CommonProject
        attr_accessor :pkg_name
 
        # initialize
-       def initialize( name, server, os_list, pkg_name = nil )
-               super(name, "BINARY", server, os_list)
+       def initialize( name, server, os_list, dist_name, pkg_name = nil )
+               super(name, "BINARY", server, os_list, dist_name)
                @pkg_name = pkg_name
        end
 
@@ -70,7 +70,7 @@ class BinaryUploadProject < CommonProject
                        return nil
                end
 
-               pkginfo_dir = "#{@server.path}/projects/#{@name}/pkginfos"
+               pkginfo_dir = "#{@path}/pkginfos"
                if not File.exist? pkginfo_dir then FileUtils.mkdir_p pkginfo_dir end
                if not Utils.extract_a_file(file_path, "pkginfo.manifest", pkginfo_dir) then
                        @server.log.error( "pkginfo.manifest file is not exist", Log::LV_USER)
@@ -111,7 +111,7 @@ class BinaryUploadProject < CommonProject
                        return nil
                end
 
-               new_job = RegisterPackageJob.new( file_path, self, @server )
+               new_job = RegisterPackageJob.new( file_path, self, @server, nil, @dist_name )
 
                return new_job
        end
@@ -127,7 +127,7 @@ class BinaryUploadProject < CommonProject
 
 
        def save_db()
-               config_file = "#{@server.path}/projects/#{@name}/build"
+               config_file = "#{@path}/build"
                File.open( config_file, "w" ) do |f|
                        f.puts "TYPE=BINARY"
                        f.puts "PACKAGE_NAME=#{@pkg_name}"
@@ -137,7 +137,7 @@ class BinaryUploadProject < CommonProject
 
        def load_db()
                # git
-               config_file = "#{@server.path}/projects/#{@name}/build"
+               config_file = "#{@path}/build"
                pkg_name=nil
                File.open( config_file, "r" ) do |f|
                        f.each_line do |l| 
index 8cc9e60ad3d0207b77858d584ff3e80f1b445e00..19433903a2f8d9f23c3722a0e5a1b900b915c27a 100644 (file)
@@ -30,51 +30,63 @@ $LOAD_PATH.unshift File.dirname(__FILE__)+"/src/common"
 require 'optparse'
 require 'utils'
 
+class BuildClientUsage
+       BUILD="build-cli build -N <project name> -d <server address> [-o <os>] [-w <password>] [--async] [-D <distribution name>]" 
+    RESOLVE="build-cli resolve -N <project name> -d <server address> [-o <os>] [-w <password>] [--async] [-D <distribution name>]"    
+    QUERY="build-cli query -d <server address>"    
+    QUERY_SYSTEM="build-cli query-system -d <server address>"    
+    QUERY_PROJECT="build-cli query-project -d <server address>"    
+    QUERY_JOB="build-cli query-job -d <server address>"    
+    CANCEL="build-cli cancel -j <job number> -d <server address> [-w <password>]"    
+    REGISTER="build-cli register -P <package file> -d <server address>  -t <ftp server url> [-w <password>] [-D <distribution name>]"    
+end
+
+
 def option_error_check( options )
     case options[:cmd]
 
     when "build" then
         if options[:project].nil? or options[:project].empty? or
                 options[:domain].nil? or options[:domain].empty? then
-            raise ArgumentError, "Usage: build-cli build -N <project name> -d <server address> [-o <os>] [-w <password>] [--async]"    
+            raise ArgumentError, "Usage: " + BuildClientUsage::BUILD
         end
 
     when "resolve" then
         if options[:project].nil? or options[:project].empty? or
                 options[:domain].nil?  or options[:domain].empty? then
-            raise ArgumentError, "Usage: build-cli resolve -N <project name> -d <server address> [-o <os>] [-w <password>] [--async]"    
+            raise ArgumentError, "Usage: " + BuildClientUsage::RESOLVE
         end
 
     when "query" then
         if options[:domain].nil? or options[:domain].empty? then
-            raise ArgumentError, "Usage: build-cli query -d <server address>"    
+            raise ArgumentError, "Usage: " + BuildClientUsage::QUERY
         end                
 
     when "query-system" then
         if options[:domain].nil? or options[:domain].empty? then
-            raise ArgumentError, "Usage: build-cli query-system -d <server address>"    
+            raise ArgumentError, "Usage: " + BuildClientUsage::QUERY_SYSTEM
         end                
 
     when "query-project" then
         if options[:domain].nil? or options[:domain].empty? then
-            raise ArgumentError, "Usage: build-cli query-project -d <server address>"    
+            raise ArgumentError, "Usage: " + BuildClientUsage::QUERY_PROJECT
         end               
  
     when "query-job" then
         if options[:domain].nil? or options[:domain].empty? then
-            raise ArgumentError, "Usage: build-cli query-job -d <server address>"    
+            raise ArgumentError, "Usage: " + BuildClientUsage::QUERY_JOB
         end                
 
     when "cancel" then
         if options[:job].nil? or options[:job].empty? or
                 options[:domain].nil? or options[:domain].empty? then
-            raise ArgumentError, "Usage: build-cli cancel -j <job number> -d <server address> [-w <password>]"    
+            raise ArgumentError, "Usage: " + BuildClientUsage::CANCEL
         end
     when "register" then
         if options[:package].nil? or options[:package].empty? or
             options[:domain].nil? or options[:domain].empty? or
             options[:fdomain].nil? or options[:fdomain].empty? then
-            raise ArgumentError, "Usage: build-cli register -P <package file> -d <server address>  -t <ftp server url> [-w <password>]"    
+            raise ArgumentError, "Usage: " + BuildClientUsage::REGISTER
         end
 
     else
@@ -100,14 +112,14 @@ def option_parse
        + "\t" + "cancel        Cancel a building project." + "\n" \
        + "\t" + "register      Register the package to the build-server." + "\n" \
        + "\n" + "Subcommand usage:" + "\n" \
-       + "\t" + "build-cli build -N <project name> -d <server address> [-o <os>] [-w <password>] [--async]" + "\n" \
-       + "\t" + "build-cli resolve -N <project name> -d <server address> [-o <os>] [-w <password>] [--async]" + "\n" \
-       + "\t" + "build-cli query -d <server address>" + "\n" \
-       + "\t" + "build-cli query-system -d <server address>" + "\n" \
-       + "\t" + "build-cli query-project -d <server address>" + "\n" \
-       + "\t" + "build-cli query-job -d <server address>" + "\n" \
-       + "\t" + "build-cli cancel -j <job number> -d <server address> [-w <password>] " + "\n" \
-       + "\t" + "build-cli register -P <file name> -d <server address> -t <ftp server url> [-w <password>] " + "\n" \
+       + "\t" + BuildClientUsage::BUILD + "\n" \
+       + "\t" + BuildClientUsage::RESOLVE + "\n" \
+       + "\t" + BuildClientUsage::QUERY + "\n" \
+       + "\t" + BuildClientUsage::QUERY_SYSTEM + "\n" \
+       + "\t" + BuildClientUsage::QUERY_PROJECT + "\n" \
+       + "\t" + BuildClientUsage::QUERY_JOB + "\n" \
+       + "\t" + BuildClientUsage::CANCEL + "\n" \
+       + "\t" + BuildClientUsage::REGISTER + "\n" \
        + "\n" + "Options:" + "\n"
 
     optparse = OptionParser.new(nil, 32, ' '*8) do|opts|
@@ -160,6 +172,10 @@ def option_parse
             options[:package] = package.strip
         end
 
+               opts.on( '-D', '--dist <distribution name>', 'distribution name' ) do|dist|
+            options[:dist] = dist
+        end
+
                opts.on( '-t', '--ftp <ftp server url>', 'ftp server url: ftp://dibsftp:dibsftp@127.0.0.1' ) do|domain|
             options[:fdomain] = domain
         end
index 732afd394494592a0369872058355c78fa7a2934..7d6dead7e63247f5fe4cf3e7926dccb83496456d 100644 (file)
@@ -229,24 +229,51 @@ class BuildServer
        end
 
 
+       # remove remote friend server
+       def remove_remote_server( ip, port )
+               @friend_servers.each do |svr|
+                       if svr.ip.eql? ip and svr.port == port then
+                               @friend_servers.delete svr
+                               return true
+                       end     
+               end
+
+               # if not exist, return false
+               return false
+       end
+
+
        # add new remote pkg server
-       def add_remote_package_server( url, proxy )
+       def add_sync_package_server( url, dist )
        
                # if already exit, return false
-               @remote_pkg_servers.each do |entry|
-                       u = entry[0]
-
-                       if u == url then
+               @remote_pkg_servers.each do |e|
+                       if e[0] == url and e[1] == dist  then
                                return false
                        end
                end
 
-               @remote_pkg_servers.push [url, proxy]
+               @remote_pkg_servers.push [url, dist]
 
                return true
        end
 
 
+       # remove remote pkg server
+       def remove_sync_package_server( url, dist )
+       
+               # if already exit, return false
+               @remote_pkg_servers.each do |e|
+                       if e[0] == url and e[1] == dist  then
+                               @remote_pkg_servers.delete e
+                               return true
+                       end
+               end
+
+               return false
+       end
+
+
        # add new target OS.
        # If already exist, return false , otherwise true
        def add_target_os( os_name )
@@ -265,6 +292,17 @@ class BuildServer
        end
 
 
+       # remove target OS.
+       def remove_target_os( os_name )
+               @supported_os_list.each do |os|
+                       if os.eql? os_name then
+                               @supported_os_list.delete os
+                               return true
+                       end     
+               end
+
+               return false
+       end
        # get remote server     
        def get_available_server ( job )
                candidates = []
@@ -405,7 +443,7 @@ class BuildServer
                        db.execute "DELETE FROM sync_pkg_servers"
                        idx = 0
                        @remote_pkg_servers.each { |svr|
-                               db.execute "INSERT INTO sync_pkg_servers VALUES('#{idx}','#{svr[0]}','#{@pkg_sync_period}','BASE')"
+                               db.execute "INSERT INTO sync_pkg_servers VALUES('#{idx}','#{svr[0]}','#{@pkg_sync_period}','#{svr[1]}')"
                                idx += 1
                        }
 
@@ -452,7 +490,7 @@ class BuildServer
                        stm = db.prepare "SELECT * FROM sync_pkg_servers"
                        rs = stm.execute
                        rs.each { |row|
-                               add_remote_package_server( row['pkgsvr_url'], nil )
+                               add_sync_package_server( row['pkgsvr_url'], row['dist_name'] )
                                @pkg_sync_period = row['period'].to_i
                        }
                        stm.close if stm
index 30439441f92bd4dabd7722407cc4cbea72f62abb..b7ac551db4718328e48cdc9533a70db961444dd3 100644 (file)
@@ -254,7 +254,7 @@ class BuildServerController
 
 
        # add friend server
-       def self.add_friend_server( id, ip, port )
+       def self.add_remote_server( id, ip, port )
                server = get_server(id)
                
                # add
@@ -270,17 +270,18 @@ class BuildServerController
        end
 
 
-       # add remote package server
-       def self.add_remote_package_server(id, url, proxy )
+       # remove friend server
+       def self.remove_remote_server( id, ip, port )
                server = get_server(id)
                
                # add
-               if server.add_remote_package_server( url, proxy ) then
+               if server.remove_remote_server( ip, port ) then
                        server.save_db()
-                       puts "Remote package server is added!"
+                       puts "Friend server is removed successfully!"
+                       
                        return true
                else
-                       puts "The server already exists in list!"
+                       puts "Friend server does not exist in list!"
                        return false
                end
        end
@@ -309,41 +310,147 @@ class BuildServerController
        end
 
 
+       # remove supported target os
+       def self.remove_target_os( id, os_name )
+               # get server
+               server = get_server(id)
+               
+               # add
+               if server.remove_target_os( os_name ) then
+                       server.save_db()
+                       puts "Target OS is removed successfully!"
+                       return true
+               else
+                       puts "Target OS does not exist in list!"
+                       return false
+               end
+       end
+
+
+       # add distribution
+       def self.add_distribution( id, dist_name, pkgsvr_url, pkgsvr_ip, pkgsvr_port )
+               # get server
+               server = get_server(id)
+               
+               # add
+               if server.distmgr.add_distribution( dist_name, pkgsvr_url, pkgsvr_ip, pkgsvr_port ) then
+                       server.save_db()
+                       puts "Distribution is added successfully!"
+                       return true
+               else
+                       puts "Distribution already exists in list!"
+                       return false
+               end
+       end
+
+
+       # remove distribution
+       def self.remove_distribution( id, dist_name )
+               # get server
+               server = get_server(id)
+               
+               # remove
+               if server.distmgr.remove_distribution( dist_name ) then
+                       server.save_db()
+                       puts "Distribution is removed successfully!"
+                       return true
+               else
+                       puts "Distribution does not exist in list!"
+                       return false
+               end
+       end
+
+
+       # add remote package server
+       def self.add_sync_package_server(id, url, dist_name)
+               server = get_server(id)
+       
+               # check distribution    
+               dist_name = check_distribution_name(dist_name, server)
+               if dist_name.nil? then return false end 
+
+               # add
+               if server.add_sync_package_server( url, dist_name ) then
+                       server.save_db()
+                       puts "Remote package server is added!"
+                       return true
+               else
+                       puts "The server already exists in list!"
+                       return false
+               end
+       end
+
+
+       def self.check_distribution_name(dist_name, server)
+               if (dist_name.nil? or dist_name.empty?) then
+                       dist_name = server.distmgr.get_default_distribution_name()
+               end
+               if dist_name.nil? or dist_name.empty? then
+                       puts "No distribution is defined!"
+                       return nil
+               end
+
+               return dist_name
+       end
+
+       # remove remote package server
+       def self.remove_sync_package_server(id, url, dist_name)
+               server = get_server(id)
+
+               # check distribution    
+               dist_name = check_distribution_name(dist_name, server)
+               if dist_name.nil? then return false end 
+
+               # remove
+               if server.remove_sync_package_server( url, dist_name ) then
+                       server.save_db()
+                       puts "Remote package server is removed!"
+                       return true
+               else
+                       puts "The server does not exist in list!"
+                       return false
+               end
+       end
+
+
        # add project
-       def self.add_project( id, project_name, git_repos, git_branch, remote_server_id, passwd, os_string )
+       def self.add_project( id, project_name, git_repos, git_branch, remote_server_id,
+                       passwd, os_string, dist_name )
                # get server
                server = get_server(id)
        
                # get supported os for project. 
                # if not specified, all supported os of the server will be used
-               if os_string.nil? or os_string == "default" then
+               if os_string.nil? or os_string.empty? then
                        os_list = server.supported_os_list
                else
                        os_list = os_string.strip.split(",")
-               end     
 
-               # check OS name
-               os_list.each do |os|
-                       if not server.supported_os_list.include? os then
-                               puts "Unsupported OS name \"#{os}\" is used!"
-                               puts "Check the following supported OS list:"
-                               server.supported_os_list.each do |s_os|
-                                       puts " * #{s_os}"
-                               end
+                       # check OS name
+                       os_list.each do |os|
+                               if not server.supported_os_list.include? os then
+                                       puts "Unsupported OS name \"#{os}\" is used!"
+                                       puts "Check the following supported OS list:"
+                                       server.supported_os_list.each do |s_os|
+                                               puts " * #{s_os}"
+                                       end
 
-                               return false
+                                       return false
+                               end
                        end
                end
 
                # add
-               if not git_repos.nil? and not git_branch.nil? then
-                       result = server.prjmgr.add_git_project( project_name, git_repos, git_branch, passwd, os_list )
-               elsif not remote_server_id.nil? then
-                       result = server.prjmgr.add_remote_project( project_name, remote_server_id, passwd, os_list)
-               else
-                       result = false  
+               if git_repos.nil? or git_branch.nil? then 
+                       puts "Git repository or branch must be specified!"
+                       return false
                end
-                       
+
+               # check distribution    
+               dist_name = check_distribution_name(dist_name, server)
+               if dist_name.nil? then return false end 
+
+               result = server.prjmgr.add_git_project( project_name, git_repos, git_branch, passwd, os_list, dist_name )
                if result then
                        puts "Adding project succeeded!"
                        return true
@@ -355,7 +462,7 @@ class BuildServerController
 
 
        # add binary project
-       def self.add_binary_project( id, project_name, pkg_name, passwd, os_string )
+       def self.add_binary_project( id, project_name, pkg_name, passwd, os_string, dist_name )
                # get server
                server = get_server(id)
        
@@ -365,11 +472,27 @@ class BuildServerController
                        os_list = server.supported_os_list
                else
                        os_list = os_string.strip.split(",")
+                       # check OS name
+                       os_list.each do |os|
+                               if not server.supported_os_list.include? os then
+                                       puts "Unsupported OS name \"#{os}\" is used!"
+                                       puts "Check the following supported OS list:"
+                                       server.supported_os_list.each do |s_os|
+                                               puts " * #{s_os}"
+                                       end
+
+                                       return false
+                               end
+                       end
                end     
 
+               # check distribution    
+               dist_name = check_distribution_name(dist_name, server)
+               if dist_name.nil? then return false end 
+
                # add
-               result = server.prjmgr.add_binary_project( project_name, pkg_name, passwd, os_list )
-                       
+               result = server.prjmgr.add_binary_project( project_name, pkg_name, passwd,
+                       os_list, dist_name )
                if result then
                        puts "Adding project succeeded!"
                        return true
@@ -380,11 +503,36 @@ class BuildServerController
        end
 
 
+       # remove project
+       def self.remove_project( id, project_name, dist_name )
+               # get server
+               server = get_server(id)
+       
+               # check distribution    
+               dist_name = check_distribution_name(dist_name, server)
+               if dist_name.nil? then return false end 
+
+               result = server.prjmgr.remove_project( project_name, dist_name )
+               if result then
+                       puts "Removing project succeeded!"
+                       return true
+               else
+                       puts "Removing project failed!"
+                       return false
+               end
+       end
+
+
        # full build
-       def self.build_all_projects( id )
+       def self.build_all_projects( id, dist_name )
 
                # server
                server = get_server(id)
+
+               # check distribution    
+               dist_name = check_distribution_name(dist_name, server)
+               if dist_name.nil? then return false end 
+
                client = BuildCommClient.create( "127.0.0.1", server.port )
                if client.nil? then
                        puts "Server is not running!"
@@ -393,16 +541,20 @@ class BuildServerController
 
                # send request
                fullbuild_ok = false
-               if client.send "FULLBUILD|#{server.password}" then
+               if client.send "FULLBUILD|#{server.password}|#{dist_name}" then
                        # recevie & print
                        mismatched = false
+                       dist_not_found = false
                        result = client.read_lines do |l|
                                puts l
                                if l.include? "Password mismatched!" then
                                        mismatched = true
                                end
+                               if l.include? "Distribution not found!" then
+                                       dist_not_found = true
+                               end
                        end
-                       if result and not mismatched then
+                       if result and not mismatched and not dist_not_found then
                                fullbuild_ok = true
                        end
                end
@@ -418,24 +570,29 @@ class BuildServerController
        end
 
 
-       def self.register_package(id, file_path)
+       def self.register_package(id, file_path, dist_name)
                # server
                server = get_server(id)
-               client = BuildCommClient.create( "127.0.0.1", server.port )
-               if client.nil? then
-                       puts "Server is not running!"
-                       return false
-               end
 
+               # check distribution    
+               dist_name = check_distribution_name(dist_name, server)
+               if dist_name.nil? then return false end 
+
+               # check file exist?
                if not File.exist? file_path then
                        puts "File not found!"
                        return false
                end
-
                file_path = File.expand_path(file_path)
+
                # send request
                success = false
-               if client.send "REGISTER|BINARY-LOCAL|#{file_path}|#{server.password}" then
+               client = BuildCommClient.create( "127.0.0.1", server.port )
+               if client.nil? then
+                       puts "Server is not running!"
+                       return false
+               end
+               if client.send "REGISTER|BINARY-LOCAL|#{file_path}|#{server.password}|#{dist_name}" then
                        # recevie & print
                        mismatched = false
                        result = client.read_lines do |l|
@@ -459,7 +616,45 @@ class BuildServerController
                return true
        end
 
+       # server
+       def self.query_server( id )
+               server = get_server(id)
+               server.prjmgr.load()
+
+               puts "* REMOTE SERVER(S) *"
+               server.friend_servers.each { |s|
+                       puts " * #{s.ip}:#{s.port}"
+               }
+               puts ""
+
+               puts "* SUPPORTED OS *"
+               server.supported_os_list.each { |os|
+                       puts " * #{os}"
+               }
+               puts ""
+
+               puts "* DISTRIBUTION(S) *"
+               server.distmgr.get_all_distributions().each { |d|
+                       puts " * #{d.name}"
+               }
+               puts ""
+
+               puts "* SYNC PACKAGE SERVER(S) *"
+               server.remote_pkg_servers.each { |s|
+                       puts " * [#{s[1]}] #{s[0]}"
+               }
+               puts ""
+
+               puts "* PROJECT(S) *"
+               server.prjmgr.projects.each { |p|
+                       puts " * [#{p.dist_name}]  #{p.name}"
+               }
+       end
+
+
+       #####################
        private
+       #####################
 
        # check build server config path
        def self.check_build_server_root
index 4c1ba9a2707f69e9b4a3ea56c677fdb324962186..b9bb76c4534db06eb6d35379d449fb342a872d64 100644 (file)
@@ -30,66 +30,133 @@ $LOAD_PATH.unshift File.dirname(__FILE__)+"/src/common"
 require 'optparse'
 require 'utils'
 
+class BuildServerUsage
+       CREATE="build-svr create -n <server name> -t <ftp server url> [-u <package server url> -d <package server address>]"
+       REMOVE="build-svr remove -n <server name>"
+       START="build-svr start -n <server name> -p <port>"
+       STOP="build-svr stop -n <server name>"
+       UPGRADE="build-svr upgrade -n <server name>"
+       ADD_SVR="build-svr add-svr -n <server name> -d <friend server address>"
+       REMOVE_SVR= "build-svr remove-svr -n <server name> -d <friend server address>"
+       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>"
+       REMOVE_DIST="build-svr remove-dist -n <server name> -D <distribution name>"
+       ADD_SYNC="build-svr add-sync -n <server name> -u <remote pkg server url> [--dist <distribution>]"
+       REMOVE_SYNC="build-svr remove-sync -n <server name> -u <remote pkg server url> [--dist <distribution>]"
+       ADD_PRJ="build-svr add-prj -n <server name> -N <project name> (-g <git repository> -b <git branch>|-P <package name>) [-w <password>] [-o <os list>] [--dist <distribution>]"
+       REMOVE_PRJ="build-svr remove-prj -n <server name> -N <project name> [--dist <distribution>]"
+       FULLBUILD="build-svr fullbuild -n <server name> [--dist <distribution>]"
+       REGISTER="build-svr register -n <server name> -P <package file> [--dist <distribution>]"
+       QUERY="build-svr query -n <server name>"
+end
+
 def option_error_check( options )
     case options[:cmd]
 
     when "create"
         if options[:name].nil? or options[:name].empty? or 
-            options[:url].nil? or options[:url].empty? or
-            options[:domain].nil? or options[:domain].empty? or
             options[:fdomain].nil? or options[:fdomain].empty? then
-            raise ArgumentError, "Usage: build-svr create -n <server name> -u <package server url> -d <package server address> -t <ftp server url>"
+            raise ArgumentError, "Usage: " + BuildServerUsage::CREATE
         end            
 
     when "remove"
         if options[:name].nil? or options[:name].empty? then 
-            raise ArgumentError, "Usage: build-svr remove -n <server name>"
+            raise ArgumentError, "Usage: " + BuildServerUsage::REMOVE
         end
 
     when "start"
         if options[:name].nil? or options[:name].empty? or
                 options[:port].nil? then
-            raise ArgumentError, "Usage: build-svr start -n <server name> -p <port>"
+            raise ArgumentError, "Usage: " + BuildServerUsage::START
         end
 
     when "stop"
         if options[:name].nil? or options[:name].empty? then
-            raise ArgumentError, "Usage: build-svr stop -n <server name>"
+            raise ArgumentError, "Usage: " + BuildServerUsage::STOP
         end
 
     when "upgrade"
         if options[:name].nil? or options[:name].empty? then
-            raise ArgumentError, "Usage: build-svr upgrade -n <server name>"
+            raise ArgumentError, "Usage: " + BuildServerUsage::UPGRADE
         end
 
     when "add-svr"
         if options[:name].nil? or options[:name].empty? or 
-                       ((options[:domain].nil? or options[:domain].empty?) and
-                        (options[:url].nil? or options[:url].empty?)) then
-            raise ArgumentError, "Usage: build-svr add-svr -n <server name> (-d <friend server address>|-u <remote pkg server url>)  [--proxy <proxy url>]"
+                       (options[:domain].nil? or options[:domain].empty?) then
+            raise ArgumentError, "Usage: " + BuildServerUsage::ADD_SVR
+        end
+
+    when "remove-svr"
+        if options[:name].nil? or options[:name].empty? or
+                       (options[:domain].nil? or options[:domain].empty?) then
+            raise ArgumentError, "Usage: " + BuildServerUsage::REMOVE_SVR
+        end
+
+    when "add-os"
+        if options[:name].nil? or options[:name].empty? or
+            options[:os].nil? or options[:os].empty? then
+            raise ArgumentError, "Usage: " + BuildServerUsage::ADD_OS
+        end  
+
+    when "remove-os"
+        if options[:name].nil? or options[:name].empty? or
+            options[:os].nil? or options[:os].empty? then
+            raise ArgumentError, "Usage: " + BuildServerUsage::REMOVE_OS
+        end  
+
+    when "add-dist"
+        if options[:name].nil? or options[:name].empty? or
+            options[:dist].nil? or options[: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
+            raise ArgumentError, "Usage: " + BuildServerUsage::REMOVE_DIST
+        end  
+
+    when "add-sync"
+        if options[:name].nil? or options[:name].empty? or 
+                        (options[:url].nil? or options[:url].empty?) then
+            raise ArgumentError, "Usage: " + BuildServerUsage::ADD_SYNC
+        end
+
+    when "remove-sync"
+        if options[:name].nil? or options[:name].empty? or 
+                        (options[:url].nil? or options[:url].empty?) then
+            raise ArgumentError, "Usage: " + BuildServerUsage::REMOVE_SYNC
         end
 
     when "add-prj"
         if options[:name].nil? or options[:name].empty? or
             options[:pid].nil? or options[:pid].empty? then
-            raise ArgumentError, "Usage: build-svr add-prj -n <server name> -N <project name> (-g <git repository> -b <git branch>|-P <package name>) [-w <password>] [-o <os list>]"
+            raise ArgumentError, "Usage: " + BuildServerUsage::ADD_PRJ
         end  
 
-    when "add-os"
+    when "remove-prj"
         if options[:name].nil? or options[:name].empty? or
-            options[:os].nil? or options[:os].empty? then
-            raise ArgumentError, "Usage: build-svr add-os -n <server name> -o <os>"
+            options[:pid].nil? or options[:pid].empty? then
+            raise ArgumentError, "Usage: " + BuildServerUsage::REMOVE_PRJ
         end  
 
     when "fullbuild"
         if options[:name].nil? or options[:name].empty? then
-            raise ArgumentError, "Usage: build-svr fullbuild -n <server name>"
+            raise ArgumentError, "Usage: " + BuildServerUsage::FULLBUILD
         end
 
     when "register"
         if options[:name].nil? or options[:name].empty? or
                        options[:package].nil? or options[:package].empty?  then
-            raise ArgumentError, "Usage: build-svr register -n <server name> -P <package file>"
+            raise ArgumentError, "Usage: " + BuildServerUsage::REGISTER
+        end
+
+    when "query"
+        if options[:name].nil? or options[:name].empty? then
+            raise ArgumentError, "Usage: " + BuildServerUsage::QUERY
         end
     else
         raise ArgumentError, "Input is incorrect : #{options[:cmd]}"
@@ -107,20 +174,37 @@ def option_parse
        + "\t" + "stop          Stop the build-server." + "\n" \
        + "\t" + "upgrade       Upgrade the build-server include friends." + "\n" \
        + "\t" + "add-svr       Add remote build/package server for support multi-OS or distribute build job." + "\n" \
-       + "\t" + "add-prj       Register information for project what you want build berfore building a project." + "\n" \
+       + "\t" + "remove-svr    Remove remote build/package server for support multi-OS or distribute build job." + "\n" \
+       + "\t" + "add-os        Add supported OS." + "\n" \
+       + "\t" + "remove-os     Remove supported OS." + "\n" \
+       + "\t" + "add-dist      Add distribution." + "\n" \
+       + "\t" + "remove-dist   Remove distribution." + "\n" \
+       + "\t" + "add-sync      Add package repository URL to synchronize with." + "\n" \
+       + "\t" + "remove-sync   Remove package repository URL." + "\n" \
+       + "\t" + "add-prj       Add project to build." + "\n" \
+       + "\t" + "remove-prj    Remove project." + "\n" \
        + "\t" + "register      Register the package to the build-server." + "\n" \
        + "\t" + "fullbuild     Build all your projects and upload them to package server." + "\n" \
+       + "\t" + "query         Show build server configuration." + "\n" \
        + "\n" + "Subcommand usage:" + "\n" \
-        + "\t" + "build-svr create -n <server name> -u <package server url> -d <package server address> -t <ftp server url>" + "\n" \
-        + "\t" + "build-svr remove -n <server name>" + "\n" \
-        + "\t" + "build-svr start -n <server name> -p <port>" + "\n" \
-        + "\t" + "build-svr stop -n <server name>" + "\n" \
-        + "\t" + "build-svr upgrade -n <server name>" + "\n" \
-        + "\t" + "build-svr add-svr -n <server name> (-d <friend server address>|-u <remote pkg server url>)  [--proxy <proxy url>]" + "\n" \
-        + "\t" + "build-svr add-prj -n <server name> -N <project name> (-g <git repository> -b <git branch>|-P <package name>) [-w <password>] [-o <os list>]" + "\n" \
-        + "\t" + "build-svr add-os -n <server name> -o <os>" + "\n" \
-        + "\t" + "build-svr register -n <server name> -P <package file>" + "\n" \
-        + "\t" + "build-svr fullbuild -n <server name>" + "\n" \
+        + "\t" + BuildServerUsage::CREATE + "\n" \
+        + "\t" + BuildServerUsage::REMOVE + "\n" \
+        + "\t" + BuildServerUsage::START + "\n" \
+        + "\t" + BuildServerUsage::STOP + "\n" \
+        + "\t" + BuildServerUsage::UPGRADE + "\n" \
+        + "\t" + BuildServerUsage::ADD_SVR + "\n" \
+        + "\t" + BuildServerUsage::REMOVE_SVR + "\n" \
+        + "\t" + BuildServerUsage::ADD_OS + "\n" \
+        + "\t" + BuildServerUsage::REMOVE_OS + "\n" \
+        + "\t" + BuildServerUsage::ADD_DIST + "\n" \
+        + "\t" + BuildServerUsage::REMOVE_DIST + "\n" \
+        + "\t" + BuildServerUsage::ADD_SYNC + "\n" \
+        + "\t" + BuildServerUsage::REMOVE_SYNC + "\n" \
+        + "\t" + BuildServerUsage::ADD_PRJ + "\n" \
+        + "\t" + BuildServerUsage::REMOVE_PRJ + "\n" \
+        + "\t" + BuildServerUsage::FULLBUILD + "\n" \
+        + "\t" + BuildServerUsage::REGISTER + "\n" \
+        + "\t" + BuildServerUsage::QUERY + "\n" \
        + "\n" + "Options:" + "\n"
 
     optparse = OptionParser.new(nil, 32, ' '*8) do|opts|
@@ -178,6 +262,11 @@ def option_parse
                #opts.on( '-r', '--remote <remote server id>', 'remote server id' ) do|remote|
         #    options[:remote] = remote
         #end
+        options[:dist] = ""
+               opts.on( '-D', '--dist <distribution name>', 'distribution name' ) do |dist|
+            options[:dist] = dist
+               end
+
 
         options[:passwd] = ""
                opts.on( '-w', '--passwd <password>', 'password for managing project' ) do|passwd|
@@ -207,9 +296,14 @@ def option_parse
        cmd = ARGV[0] 
     if cmd.eql? "create" or cmd.eql? "remove" or 
                cmd.eql? "start" or cmd.eql? "upgrade" or
-               cmd.eql? "stop" or cmd.eql? "add-svr" or
-               cmd.eql? "add-prj" or cmd.eql? "add-os" or 
+               cmd.eql? "stop" 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-sync" or cmd.eql? "remove-sync" or 
+               cmd.eql? "add-prj" or cmd.eql? "remove-prj" or 
                cmd.eql? "fullbuild" or cmd.eql? "register" or 
+               cmd.eql? "query" or 
         cmd =~ /(-v)|(--version)/ or        
         cmd =~ /(help)|(-h)|(--help)/ then
 
index d1a0b979cf56f9902f476a00f026016e785d2b46..37716b58efd11b301779d891b0d0d5a7efb5e072 100644 (file)
@@ -31,21 +31,32 @@ $LOAD_PATH.unshift File.dirname(__FILE__)
 $LOAD_PATH.unshift File.dirname(File.dirname(__FILE__))+"/common"
 
 class CommonProject
-       attr_accessor :name, :type, :passwd, :os_list, :dist_name
+       attr_accessor :name, :type, :passwd, :os_list, :dist_name, :path
 
        # initialize
-       def initialize( name, type, server, os_list )
+       def initialize( name, type, server, os_list, dist_name="BASE" )
                @project_id = -1
                @name = name
                @type = type
                @passwd = ""
                @os_list = os_list
                @server = server
-               @dist_name = "BASE"
+               @dist_name = dist_name
+               if @dist_name == "BASE" then
+                       @path = "#{@server.path}/projects/#{@name}"
+               else
+                       @path = "#{@server.path}/projects/#{@dist_name}/#{@name}"
+               end
                @extra_infos = {}
                read_ext_info
        end
 
+       
+       def init()
+               # create project directory if not exist
+               if not File.exist? @path then FileUtils.mkdir_p @path end
+       end
+
 
        #return passwd
        def is_passwd_set?()
@@ -66,7 +77,7 @@ class CommonProject
 
        def write_ext_info
                # write to file
-               info_file = "#{@server.path}/projects/#{@name}/extra"
+               info_file = "#{@path}/extra"
                File.open( info_file, "w" ) do |f|
                        @extra_infos.each { |key,value|
                                f.puts "#{key} : #{value}"
@@ -77,7 +88,7 @@ class CommonProject
 
        # set extra info
        def read_ext_info
-               info_file = "#{@server.path}/projects/#{@name}/extra"
+               info_file = "#{@path}/extra"
                if not File.exists? info_file then return end
                File.open( info_file, "r" ) do |f|
                        while (not f.gets and line = f.gets.split(":"))
index b140a93f4926abcf83b8af12a9d15a14a9b7c092..0c7b7ed3df72e6f51daa69530c0a4401f0f106af 100644 (file)
@@ -49,8 +49,7 @@ end
 
 
 class DistributionManager
-       attr_accessor :max_working_jobs, :jobs, :internal_jobs, :reverse_build_jobs
-       attr_accessor :internal_job_schedule
+       attr_accessor :distributions
 
        # initialize
        def initialize( server )
@@ -59,6 +58,16 @@ class DistributionManager
        end
 
 
+       # get default distribution
+       def get_default_distribution_name()
+               if @distributions.count > 0 then
+                       return @distributions[0].name
+               end
+       
+               return nil
+       end
+
+
        # get distribution
        def get_distribution(name)
                @distributions.each { |d|
@@ -83,25 +92,27 @@ class DistributionManager
                if distribution_exist?(name) then
                        @server.log.info "The distribution \"#{name}\" already exists on server"
                        @server.log.error "Adding distribution failed!"
-                       return
+                       return false
                end
 
                add_distribution_internal(name, pkgsvr_url, pkgsvr_ip, pkgsvr_port)
                save_db()
                @server.log.info "Added a new distribution \"#{name}\""
+               return true
        end
 
 
        # remove
        def remove_distribution(name)
-               if not distribution.exist?(name) then
+               if not distribution_exist?(name) then
                        @server.log.error "The distribution \"#{name}\" does not exists on server"
                        @server.log.error "Removing distribution failed!"
-                       return
+                       return false
                end
 
                remove_distribution_internal(name)
                @server.log.info "Removed the distribution \"#{name}\""
+               return true
        end
 
 
@@ -165,5 +176,10 @@ class DistributionManager
                @distributions.delete get_distribution(name)
        end
 
+       
+       def get_all_distributions()
+               return @distributions
+       end
+
        #END
 end
index 0f320392f5efdb6f83473434b0fc328d565e0ef8..d2ef0945d26641bf1eb3034a6ad1b839b7f590fa 100644 (file)
@@ -217,8 +217,8 @@ class GitBuildJob < BuildJob
        protected
        def get_source_code_internal()
                # check git directory
-               git_path = "#{@server.path}/projects/#{@project.name}/cache/git"
-               cache_path = "#{@server.path}/projects/#{@project.name}/cache"
+               git_path = "#{@project.path}/cache/git"
+               cache_path = "#{@project.path}/cache"
                if not File.exist? cache_path then
                        FileUtils.mkdir_p cache_path
                end
index 4181c7df2407563a08c8ff9a1e02b5631e7e8ba4..67a1bbcffc72bccf72e5562341994dbf637d2695 100644 (file)
@@ -41,8 +41,8 @@ class GitBuildProject < CommonProject
        attr_accessor :repository, :branch
 
        # initialize
-       def initialize( name, server, os_list, repos = nil, branch = nil )
-               super(name, "GIT", server, os_list)
+       def initialize( name, server, os_list, dist_name, repos = nil, branch = nil )
+               super(name, "GIT", server, os_list, dist_name)
                @repository = repos 
                @branch = branch
                @source_infos = {}
@@ -107,7 +107,7 @@ class GitBuildProject < CommonProject
                @source_infos[version] =  info
 
                # write to file
-               sources_file = "#{@server.path}/projects/#{@name}/sources"
+               sources_file = "#{@path}/sources"
                File.open( sources_file, "w" ) do |f|
                        @source_infos.each { |key,value|
                                f.puts "#{key},#{value}"
@@ -143,7 +143,7 @@ class GitBuildProject < CommonProject
        # copy package info
        def copy_package_info(version, file_path)
                # check pkginfo directory
-               pkginfo_dir = "#{@server.path}/projects/#{@name}/pkginfos"
+               pkginfo_dir = "#{@path}/pkginfos"
                if not File.exist? pkginfo_dir then
                        FileUtils.mkdir_p pkginfo_dir
                end
@@ -178,7 +178,7 @@ class GitBuildProject < CommonProject
        end
 
        def save_db()
-               config_file = "#{@server.path}/projects/#{@name}/build"
+               config_file = "#{@path}/build"
                File.open( config_file, "w" ) do |f|
                        f.puts "TYPE=GIT"
                        f.puts "GIT_REPOSITORY=#{@repository}"
@@ -189,7 +189,7 @@ class GitBuildProject < CommonProject
        
        def load_db()
                # git
-               config_file = "#{@server.path}/projects/#{@name}/build"
+               config_file = "#{@path}/build"
                repos="none"
                branch="master"
                File.open( config_file, "r" ) do |f|
@@ -210,7 +210,7 @@ class GitBuildProject < CommonProject
                @branch = branch
 
                # read source info
-               sources_file = "#{@server.path}/projects/#{@name}/sources"
+               sources_file = "#{@path}/sources"
                if File.exist? sources_file then
                        File.open(sources_file, "r") do |f|
                                f.each_line do |l|
@@ -223,7 +223,7 @@ class GitBuildProject < CommonProject
                end
        
                # read pkginfo
-               pkginfo_dir = "#{@server.path}/projects/#{@name}/pkginfos"
+               pkginfo_dir = "#{@path}/pkginfos"
                if not File.exist? pkginfo_dir then FileUtils.mkdir_p pkginfo_dir end
                Dir.new(pkginfo_dir).entries.each do |file|
                        if file.eql? "." or file.eql? ".." then next end
index e876dc1807c65018c9df26e9a73615b7bd1814a4..cd5ee6a9fd84255638062d784eaab8dbfc974851 100644 (file)
@@ -91,8 +91,8 @@ class JobManager
        end
 
        
-       def create_new_register_job( file_path )
-               return RegisterPackageJob.new( file_path, nil, @parent )
+       def create_new_register_job( file_path, dist_name )
+               return RegisterPackageJob.new( file_path, nil, @parent, nil, dist_name )
        end
 
        # add a normal job
index 0e444f119360731c7dbd91072165c54e62d9dfbb..338a8eaff827be1dbcd141f800c98cd2ab81900b 100644 (file)
@@ -59,33 +59,32 @@ class ProjectManager
 
 
        # get_project of the name
-       def get_project ( name )
+       def get_project ( name, dist_name )
                @projects.each do |prj|
-                       if prj.name.eql? name then return prj end
+                       if prj.name == name and prj.dist_name == dist_name then return prj end
                end
        
                return nil
        end
 
 
-       def add_git_project(name , repos, branch, passwd, os_list)
+       def add_git_project(name , repos, branch, passwd, os_list, dist_name)
                load_db()
 
-               prj = get_project( name)
+               prj = get_project(name, dist_name)
                if not prj.nil? then return false end
                
-               new_prj = GitBuildProject.new(name, @server, os_list, repos, branch)
+               new_prj = GitBuildProject.new(name, @server, os_list, dist_name, repos, branch)
                if not passwd.nil? and not passwd.empty? then
                        new_prj.passwd = passwd
                end
+               new_prj.dist_name = dist_name
                new_prj.repository = repos
                new_prj.branch = branch
-               @projects.push new_prj
 
-               # check project directory
-               if not File.exist? "#{@project_root}/#{name}" then
-                       FileUtils.mkdir_p "#{@project_root}/#{name}"
-               end
+               new_prj.init()
+
+               @projects.push new_prj
 
                # write configuration
                save_db()
@@ -94,23 +93,22 @@ class ProjectManager
        end
 
 
-       def add_binary_project(name, pkg_name, passwd, os_list)
+       def add_binary_project(name, pkg_name, passwd, os_list, dist_name)
                load_db()
 
-               prj = get_project( name)
+               prj = get_project(name, dist_name)
                if not prj.nil? then return false end
                
-               new_prj = BinaryUploadProject.new(name, @server, os_list, pkg_name)
+               new_prj = BinaryUploadProject.new(name, @server, os_list, dist_name, pkg_name)
                if not passwd.nil? and not passwd.empty? then
                        new_prj.passwd = passwd
                end
+               new_prj.dist_name = dist_name
                new_prj.pkg_name = pkg_name
-               @projects.push new_prj
 
-               # check project directory
-               if not File.exist? "#{@project_root}/#{name}" then
-                       FileUtils.mkdir_p "#{@project_root}/#{name}"
-               end
+               new_prj.init()
+
+               @projects.push new_prj
 
                save_db()
 
@@ -118,14 +116,29 @@ class ProjectManager
        end
 
 
-       def add_remote_project( name, server_id)
+       def remove_project( name, dist_name )
+               load_db()
+
+               # check project exist?
+               prj = get_project(name, dist_name)
+               if prj.nil? then return false end
+
+               # remove project directory
+               FileUtils.rm_rf prj.path
+
+               # remove it from list
+               @projects.delete prj
+
+               save_db()
+
+               return true
        end
 
 
        # create new job for project
        # if cannot create, return nil
-       def create_new_job( name, os )
-               prj = get_project( name )
+       def create_new_job( name, os, dist_name )
+               prj = get_project( name, dist_name )
                if prj.nil? then return nil end
 
                return prj.create_new_job( os )
@@ -145,18 +158,19 @@ class ProjectManager
 
 
        # create new full job
-       def create_new_full_build_job( )
+       def create_new_full_build_job(dist_name="BASE")
                # create multi job
                result = MultiBuildJob.new( @server )
 
                # create sub jobs
                @projects.each do |prj|
                        if prj.type != "GIT" then next end      
-               
+                       if prj.dist_name != dist_name then next end
+       
                        prj.os_list.each do |os|
                                if not @server.supported_os_list.include? os then next end
                                
-                               new_job = create_new_job( prj.name, os )
+                               new_job = create_new_job( prj.name, os, dist_name )
                                if new_job.nil? then next end
 
                                # This make project to build 
@@ -194,8 +208,10 @@ class ProjectManager
        end
 
 
-       def get_project_from_package_name(pkg_name)
+       def get_project_from_package_name(pkg_name, dist_name="BASE")
                @projects.each do |prj|
+                       # check project's distribution
+                       if prj.dist_name != dist_name then next end
                        # check project provide target package  
                        if prj.include_package?(pkg_name) then
                                return prj
@@ -207,8 +223,10 @@ class ProjectManager
 
 
        # get project from git repository
-       def get_git_project( repos )
+       def get_git_project( repos, dist_name )
                @projects.each { |prj|
+                       # check project's distribution
+                       if prj.dist_name != dist_name then next end
                        if prj.type == "GIT" and prj.repository == repos then 
                                return prj 
                        end
@@ -218,15 +236,15 @@ class ProjectManager
        end
 
 
-       def create_unnamed_git_project(repos)
+       def create_unnamed_git_project(repos, dist_name)
                name = "UNNAMED_PRJ_#{@projects.count}"
                branch = "master"
                passwd = nil
                os_list = Utils.get_all_OSs()
                # add
-               add_git_project(name , repos, branch, passwd, os_list)
+               add_git_project(name , repos, branch, passwd, os_list, dist_name)
                # get
-               return get_project(name)        
+               return get_project(name, dist_name)     
        end
 
        
@@ -259,7 +277,7 @@ class ProjectManager
                        @projects.each { |prj|
                                prj_id = prj.get_project_id()
                                # COMMON
-                               db.execute "INSERT INTO projects VALUES(#{prj_id}, '#{prj.name}', '#{prj.type}', '#{prj.passwd}', 'BASE')"
+                               db.execute "INSERT INTO projects VALUES(#{prj_id}, '#{prj.name}', '#{prj.type}', '#{prj.passwd}', '#{prj.dist_name}')"
 
                                # OS
                                prj.os_list.each { |os|
@@ -310,9 +328,9 @@ class ProjectManager
                                stm2 = nil
 
                                if prj_type == "GIT" then
-                                       new_project = GitBuildProject.new(prj_name, @server, prj_os_list)
+                                       new_project = GitBuildProject.new(prj_name, @server, prj_os_list, prj_dist)
                                else
-                                       new_project = BinaryUploadProject.new(prj_name, @server, prj_os_list)
+                                       new_project = BinaryUploadProject.new(prj_name, @server, prj_os_list, prj_dist)
                                end
                                new_project.set_project_id(prj_id)
 
@@ -334,92 +352,6 @@ class ProjectManager
                end
        end
 
-       protected
-
-       # load and create project       
-       def load_project(name)
-       
-               # check config file 
-               config_file = "#{@project_root}/#{name}/build"
-               if not File.exist? config_file then return nil end
-
-               # read configuration
-               type="GIT"
-               passwd=""
-               repos="none"
-               branch="master"
-               os_list = @server.supported_os_list
-               rserver_id=nil
-               pkg_name=nil
-               File.open( config_file, "r" ) do |f|
-                       f.each_line do |l| 
-                               idx = l.index("=") + 1
-                               length = l.length - idx 
-
-                               if l.start_with?("TYPE=")
-                                       type = l[idx,length].strip
-                               elsif l.start_with?("PASSWD=")
-                                       passwd = l[idx,length].strip
-                               elsif l.start_with?("GIT_REPOSITORY=")
-                                       repos = l[idx,length].strip
-                               elsif l.start_with?("GIT_BRANCH=")
-                                       branch = l[idx,length].strip
-                               elsif l.start_with?("OS_LIST=")
-                                       os_list = l[idx,length].strip.split(",")
-                               elsif l.start_with?("REMOTE_SERVER_ID=")
-                                       rserver_id = l[idx,length].strip
-                               elsif l.start_with?("PACKAGE_NAME=")
-                                       pkg_name = l[idx,length].strip
-                               else
-                                       next    
-                               end 
-                       end
-               end
-
-               # write back & create project
-               if type == "GIT" then   
-                       write_configuration(name, repos, branch, passwd, os_list)
-                       new_project = GitBuildProject.new(name, @server, os_list, repos, branch)
-
-                       # read source info
-                       sources_file = "#{@project_root}/#{name}/sources"
-                       if File.exist? sources_file then
-                               File.open(sources_file, "r") do |f|
-                                       f.each_line do |l|
-                                               version = l.split(",")[0].strip
-                                               info = l.split(",")[1].strip
-       
-                                               new_project.add_source_info( version, info )
-                                       end
-                               end             
-                       end
-       
-                       # read pkginfo
-                       pkginfo_dir = "#{@project_root}/#{name}/pkginfos"
-                       if not File.exist? pkginfo_dir then FileUtils.mkdir_p pkginfo_dir end
-                       Dir.new(pkginfo_dir).entries.each do |file|
-                               if file.eql? "." or file.eql? ".." then next end
-                       
-                               vlen = file.length - ".manifest".length 
-                               version = file[0,vlen]
-                               new_project.add_package_info( version, "#{pkginfo_dir}/#{file}" )
-                       end
-
-               elsif type == "BINARY" then
-                       write_configuration_for_binary_project(name, pkg_name, passwd, os_list)
-                       new_project = BinaryUploadProject.new(name, @server, os_list, pkg_name)
-               end
-
-
-               # set passwd if exist
-               if not passwd.empty? then
-                       new_project.passwd = passwd
-               end
-
-               
-               return new_project
-       end
-
 
        # write configuration
        def write_configuration(name, repos, branch, passwd, os_list  )
index ebfc7a07b530c8e20dc995d02f8aa011e8f37d16..e2cd048f7795b9a93b94a6b56a04866aa96ec31a 100644 (file)
@@ -50,15 +50,21 @@ class RegisterPackageJob < CommonJob
        
 
        # initialize
-       def initialize( local_path, project, server, ftpurl=nil )
+       def initialize( local_path, project, server, ftpurl=nil, dist_name=nil )
                super(server)
                @log = nil
                @type = "REGISTER"
 
                @host_os = Utils::HOST_OS
-               @pkgsvr_url = @server.distmgr.get_distribution(project.dist_name).pkgsvr_url
-               @pkgsvr_ip = @server.distmgr.get_distribution(project.dist_name).pkgsvr_ip
-               @pkgsvr_port = @server.distmgr.get_distribution(project.dist_name).pkgsvr_port
+               if not project.nil? then
+                       @pkgsvr_url = @server.distmgr.get_distribution(project.dist_name).pkgsvr_url
+                       @pkgsvr_ip = @server.distmgr.get_distribution(project.dist_name).pkgsvr_ip
+                       @pkgsvr_port = @server.distmgr.get_distribution(project.dist_name).pkgsvr_port
+               else
+                       @pkgsvr_url = @server.distmgr.get_distribution(dist_name).pkgsvr_url
+                       @pkgsvr_ip = @server.distmgr.get_distribution(dist_name).pkgsvr_ip
+                       @pkgsvr_port = @server.distmgr.get_distribution(dist_name).pkgsvr_port
+               end
                @job_root = "#{@server.path}/jobs/#{@id}"
                @source_path = @job_root+"/temp"
                @job_working_dir=@job_root+"/works"
index 5f00496db30303dbfb05b69c45142546eb478604..7a945bdfca298b09a4ffd467044b6010393be2d9 100644 (file)
@@ -61,7 +61,7 @@ class RemoteBuilder
                # build
                ret = build(@job.project.repository, @job.source_path, @job.os, 
                        @job.is_rev_build_check_job(), @job.git_commit, @job.no_reverse,
-                       local_pkgs )
+                       local_pkgs, @job.project.dist_name )
 
                # reset job
                @job = nil
@@ -73,7 +73,7 @@ class RemoteBuilder
 
        
        # build
-       def build( git_repos, source_path, os, is_rev_build, srcinfo, no_reverse, local_pkgs )
+       def build( git_repos, source_path, os, is_rev_build, srcinfo, no_reverse, local_pkgs, dist_name )
                @log.info( "Start to build on remote server...", Log::LV_USER )
 
                # create unique dock number
@@ -98,7 +98,7 @@ class RemoteBuilder
                # send build request
                @log.info( "Sending build request to remote server...", Log::LV_USER )
                result, result_files = send_build_request(git_repos, os,
-                       is_rev_build, srcinfo, no_reverse, local_pkgs, dock)
+                       is_rev_build, srcinfo, no_reverse, local_pkgs, dock, dist_name)
 
         @log.info( "Receiving log file from remote server...", Log::LV_USER )
                if not receive_file_from_remote( "#{source_path}/../remote_log", dock ) then
@@ -155,7 +155,7 @@ class RemoteBuilder
 
        # send build request 
        protected
-       def send_build_request(git_repos, os, is_rev_build, commit, no_reverse, local_pkgs, dock = "0")
+       def send_build_request(git_repos, os, is_rev_build, commit, no_reverse, local_pkgs, dock = "0", dist_name="BASE")
                result_files = []
 
         client = BuildCommClient.create( @addr, @port, @log ) 
@@ -168,13 +168,13 @@ class RemoteBuilder
                local_pkg_names = local_pkgs.map { |path| File.basename(path) }
 
         # send
-               # format: BUILD|GIT|repository|passwd|os|async|no_reverse|internal|rev-build|commit|pkgs|dock_num
-               # value : BUILD|GIT|repository|      |os|NO   |no_reverse|YES     |rev-build|commit|pkgs|dock_num
+               # format: BUILD|GIT|repository|passwd|os|async|no_reverse|internal|rev-build|commit|pkgs|dock_num|dist_name
+               # value : BUILD|GIT|repository|      |os|NO   |no_reverse|YES     |rev-build|commit|pkgs|dock_num|dist_name
                result = true
                commit = commit.nil? ? "":commit
                pkg_list = local_pkg_names.join(",")
                rev = is_rev_build ? "YES":"NO"
-               msg = "BUILD|GIT|#{git_repos}||#{os}|NO|#{no_reverse}|YES|#{rev}|#{commit}|#{pkg_list}|#{dock}"
+               msg = "BUILD|GIT|#{git_repos}||#{os}|NO|#{no_reverse}|YES|#{rev}|#{commit}|#{pkg_list}|#{dock}|#{dist_name}"
         if client.send( msg ) then 
             result = client.read_lines do |l|
                 # write log first
index a1fa95544f3ca83398f3ef66fbec72feac9db5a2..012770ad9018869407bad499c604745f9cef0b0c 100644 (file)
@@ -174,8 +174,8 @@ class SocketJobRequestListener
                        raise "Invalid request format is used: #{line}"
                end
 
-               # Case1. BUILD|GIT|project_name|passwd|os_list|async|no_reverse
-               # Case2. BUILD|GIT|git_repos||os|async|no_reverse|internal|rev_build|commit|pkgs|dock_num
+               # Case1. BUILD|GIT|project_name|passwd|os_list|async|no_reverse|dist_name
+               # Case2. BUILD|GIT|git_repos||os|async|no_reverse|internal|rev_build|commit|pkgs|dock_num|dist_name
 
                # parse
                project_name_list = tok[2].split(",")
@@ -189,6 +189,14 @@ class SocketJobRequestListener
                git_commit = (not tok[9].nil? and not tok[9].empty?) ? tok[9] : nil
                pkg_files = (not tok[10].nil? and not tok[10].empty?) ? tok[10].split(",") : []
                dock_num = (not tok[11].nil? and not tok[11].empty?) ? tok[11].strip : "0"
+               if not is_internal then
+                       dist_name = tok[7].strip
+               else
+                       dist_name = tok[12].strip
+               end
+               if (dist_name.nil? or dist_name.empty?) then
+                       dist_name = @parent_server.distmgr.get_default_distribution_name()
+               end
 
                # check supported os if not internal job
                if not is_internal then
@@ -205,9 +213,9 @@ class SocketJobRequestListener
                        project_name_list.each { |pname|
                                if not passwd_list[i].nil? then passwd = passwd_list[i]
                                else passwd = passwd_list[0] end
-                               check_build_project(pname,passwd,req)   
+                               check_build_project(pname,passwd,dist_name,req)
                                os_list.each { |os|
-                                       new_job = create_new_job( pname, os )
+                                       new_job = create_new_job( pname, os, dist_name )
                                        if new_job.nil? then
                                                @log.warn "\"#{pname}\" does not support #{os}"
                                                next
@@ -231,7 +239,7 @@ class SocketJobRequestListener
                        git_repos = project_name_list[0]
                        os = os_list[0]
 
-                       new_job = create_new_internal_job(git_repos, os, git_commit, pkg_files, dock_num )
+                       new_job = create_new_internal_job(git_repos, os, git_commit, pkg_files, dock_num, dist_name )
                        if rev_job then new_job.set_rev_build_check_job(nil) end
 
                # single job
@@ -239,8 +247,8 @@ class SocketJobRequestListener
                        pname = project_name_list[0]
                        os = os_list[0]
 
-                       check_build_project(pname,passwd,req)
-                       new_job = create_new_job( pname, os )
+                       check_build_project(pname,passwd,dist_name,req)
+                       new_job = create_new_job( pname, os, dist_name )
                else
                        BuildCommServer.send_begin(req)
                        req.puts "Error: There is no valid job to build!"
@@ -276,9 +284,9 @@ class SocketJobRequestListener
        end
 
 
-       def check_build_project(prj_name, passwd, req)
+       def check_build_project(prj_name, passwd, dist_name, req)
                # check project
-               prj = check_project_exist(prj_name, req)
+               prj = check_project_exist(prj_name, dist_name, req)
                if prj.nil? then
                        raise "Requested project \"#{prj_name}\" does not exist!"
                end
@@ -314,9 +322,13 @@ class SocketJobRequestListener
                        passwd=tok[3]
                        os=tok[4]
                        async = tok[5].eql? "YES"
+                       dist_name = tok[6]
+                       if (dist_name.nil? or dist_name.empty?) then
+                               dist_name = @parent_server.distmgr.get_default_distribution_name()
+                       end
 
                        # check project
-                       prj = check_project_exist(project_name, req)
+                       prj = check_project_exist(project_name, dist_name, req)
                        if prj.nil? then
                                raise "Requested project does not exist!"
                        end
@@ -334,7 +346,7 @@ class SocketJobRequestListener
                        os = os_list[0]
                        
                        # create new job
-                       new_job = create_new_job( project_name, os )
+                       new_job = create_new_job( project_name, os, dist_name )
                        if new_job.nil? then
                                raise "Creating build job failed : #{project_name}, #{os}"
                        end
@@ -585,6 +597,10 @@ class SocketJobRequestListener
                end
                
                server_passwd = tok[1]          
+               dist_name = tok[2]              
+               if (dist_name.nil? or dist_name.empty?) then
+                       dist_name = @parent_server.distmgr.get_default_distribution_name()
+               end
 
                # check server password
                if server_passwd != @parent_server.password then
@@ -592,18 +608,25 @@ class SocketJobRequestListener
                        BuildCommServer.send(req,"Password mismatched!")
                        BuildCommServer.send_end(req)
                        BuildCommServer.disconnect(req)
-               else
-                       # create full build job
-                       new_job = @parent_server.prjmgr.create_new_full_build_job()
+                       return
+               elsif not @parent_server.distmgr.distribution_exist?(dist_name) then
+                       BuildCommServer.send_begin(req)
+                       BuildCommServer.send(req,"Distribution not found!")
+                       BuildCommServer.send_end(req)
+                       BuildCommServer.disconnect(req)
+                       return
+               end
 
-                       # set logger
-                       logger = JobLog.new( new_job, req )
-                       new_job.set_logger(logger)
-                       logger.init
+               # create full build job
+               new_job = @parent_server.prjmgr.create_new_full_build_job(dist_name)
 
-                       # add to job
-                       @parent_server.jobmgr.add_job( new_job )
-               end
+               # set logger
+               logger = JobLog.new( new_job, req )
+               new_job.set_logger(logger)
+               logger.init
+
+               # add to job
+               @parent_server.jobmgr.add_job( new_job )
        end
 
 
@@ -618,11 +641,15 @@ class SocketJobRequestListener
                type = tok[1]
 
                case type
-               # REGISTER|BINARY-LOCAL|local_path
-               # REGISTER|SOURCE-LOCAL|local_path
+               # REGISTER|BINARY-LOCAL|local_path|passwd|dist_name
+               # REGISTER|SOURCE-LOCAL|local_path|passwd|dist_name
                when "BINARY-LOCAL", "SOURCE-LOCAL"
                        file_path = tok[2]
-                       new_job = @parent_server.jobmgr.create_new_register_job( file_path )
+                       dist_name = tok[4]
+                       if (dist_name.nil? or dist_name.empty?) then
+                               dist_name = @parent_server.distmgr.get_default_distribution_name()
+                       end
+                       new_job = @parent_server.jobmgr.create_new_register_job( file_path, dist_name )
                        logger = JobLog.new( new_job, req )
                        new_job.set_logger(logger)
                        logger.init
@@ -630,15 +657,19 @@ class SocketJobRequestListener
                        # add
                        @parent_server.jobmgr.add_job( new_job )
 
-               # REGISTER|BINARY|filename|passwd
+               # REGISTER|BINARY|filename|passwd|dock|dist_name
                when "BINARY"
                        # parse
                        filename = tok[2]
                        passwd = tok[3]
                        dock = (tok[4].nil? or tok[4].empty?) ? "0" : tok[4].strip
+                       dist_name = tok[5]
+                       if (dist_name.nil? or dist_name.empty?) then
+                               dist_name = @parent_server.distmgr.get_default_distribution_name()
+                       end
 
                        # check project
-                       prj = check_project_for_package_file_name(filename, req)
+                       prj = check_project_for_package_file_name(filename, dist_name, req)
                        if prj.nil? then
                                raise "No project is defined for this binary : #{filename}!"
                        end
@@ -650,7 +681,7 @@ class SocketJobRequestListener
                        
                        # create new job
                        @log.info "Received a request for uploading binaries : #{filename}"
-                       new_job = create_new_upload_job( prj.name, filename, dock, req )
+                       new_job = create_new_upload_job( prj.name, filename, dock, dist_name, req )
                        if new_job.nil? then
                                raise "Creating build job failed : #{prj.name}, #{filename}"
                        end
@@ -729,8 +760,8 @@ class SocketJobRequestListener
 
 
        private
-       def check_project_exist(project_name, req)
-               prj = @parent_server.prjmgr.get_project(project_name)
+       def check_project_exist(project_name, dist_name, req)
+               prj = @parent_server.prjmgr.get_project(project_name, dist_name)
                if prj.nil? then
                        BuildCommServer.send_begin(req)
                        req.puts "Error: Requested project \"#{project_name}\" does not exist!"
@@ -743,12 +774,12 @@ class SocketJobRequestListener
        end
 
        private
-       def check_project_for_package_file_name(filename, req)
+       def check_project_for_package_file_name(filename, dist_name, req)
                # get package name
         new_name = filename.sub(/(.*)_(.*)_(.*)\.zip/,'\1,\2,\3')
         pkg_name = new_name.split(",")[0]
 
-               prj = @parent_server.prjmgr.get_project_from_package_name(pkg_name)
+               prj = @parent_server.prjmgr.get_project_from_package_name(pkg_name, dist_name)
                if prj.nil? then
                        BuildCommServer.send_begin(req)
                        req.puts "Error: Requested project does not exist!"
@@ -836,19 +867,19 @@ class SocketJobRequestListener
 
 
        private
-       def create_new_job( project_name, os )
-               return @parent_server.prjmgr.create_new_job(project_name, os)
+       def create_new_job( project_name, os, dist_name )
+               return @parent_server.prjmgr.create_new_job(project_name, os, dist_name)
        end
 
 
        private
-       def create_new_upload_job( project_name, filename, dock, req)
+       def create_new_upload_job( project_name, filename, dock, dist_name, req)
 
-               new_job = @parent_server.prjmgr.get_project(project_name).create_new_job(filename, dock)
+               new_job = @parent_server.prjmgr.get_project(project_name, dist_name).create_new_job(filename, dock)
 
                if new_job.nil?  then
                        BuildCommServer.send_begin(req)
-                       req.puts "Error: Creating job failed: #{project_name} #{filename}"
+                       req.puts "Error: Creating job failed: #{project_name} #{filename} #{dist_name}"
                        BuildCommServer.send_end(req)
                        return nil
                end
@@ -858,10 +889,10 @@ class SocketJobRequestListener
 
 
        private
-       def create_new_internal_job( git_repos, os, git_commit, pkg_files, dock_num )
-               prj = @parent_server.prjmgr.get_git_project( git_repos )
+       def create_new_internal_job( git_repos, os, git_commit, pkg_files, dock_num, dist_name )
+               prj = @parent_server.prjmgr.get_git_project( git_repos, dist_name )
                if prj.nil? then
-                       prj = @parent_server.prjmgr.create_unnamed_git_project( git_repos )
+                       prj = @parent_server.prjmgr.create_unnamed_git_project( git_repos, dist_name )
                end
                new_job = prj.create_new_job(os)
                new_job.set_internal_job( dock_num ) 
index f3c8c50055001d4078d269b1bc37c4c36058b330..670207de54b9503603de9eb6ed3e5698b0d4944e 100644 (file)
@@ -18,14 +18,14 @@ cancel        Cancel a building project.
 register      Register the package to the build-server.
 
 Subcommand usage:
-build-cli build -N <project name> -d <server address> [-o <os>] [-w <password>] [--async]
-build-cli resolve -N <project name> -d <server address> [-o <os>] [-w <password>] [--async]
+build-cli build -N <project name> -d <server address> [-o <os>] [-w <password>] [--async] [-D <distribution name>]
+build-cli resolve -N <project name> -d <server address> [-o <os>] [-w <password>] [--async] [-D <distribution name>]
 build-cli query -d <server address>
 build-cli query-system -d <server address>
 build-cli query-project -d <server address>
 build-cli query-job -d <server address>
 build-cli cancel -j <job number> -d <server address> [-w <password>]
-build-cli register -P <file name> -d <server address> -t <ftp server url> [-w <password>]
+build-cli register -P <package file> -d <server address>  -t <ftp server url> [-w <password>] [-D <distribution name>]
 
 Options:
 -N, --project <project name>     project name
@@ -35,6 +35,7 @@ Options:
 -j, --job <job number>           job number
 -w, --passwd <password>          password for managing project
 -P, --pkg <package file>         package file path
+-D, --dist <distribution name>   distribution name
 -t, --ftp <ftp server url>       ftp server url: ftp://dibsftp:dibsftp@127.0.0.1
 -h, --help                       display help
 -v, --version                    display version
index e345367145ac466ed638bff0386536d53ef53bd9..30ba63f8a18a1b232694be085cac98afa257e890 100644 (file)
@@ -3,7 +3,7 @@ rm -rf ~/.build_tools/build_server/testserver3
 rm -rf buildsvr01
 mkdir buildsvr01
 #EXEC
-cd buildsvr01; ../../build-svr create -n testserver3 -u `pwd`/../pkgsvr01/unstable -d 127.0.0.1:3333 -t ftp://dibsftp:coreps2@172.21.111.132
+cd buildsvr01; ../../build-svr create -n testserver3 -u `pwd`/../pkgsvr01/unstable -d 127.0.0.1:3333 -t ftp://ftpuser:ftpuser@172.21.111.124
 #POST-EXEC
 ../build-svr remove -n testserver3
 rm -rf buildsvr01
index cbedb9895b5057be95e1315b17ade638371f9b4b..7f311761800f17e185ab5c5ae9e850add5b9bfee 100644 (file)
@@ -5,41 +5,44 @@
 #EXPECT
 Build-server administer service command-line tool.
 
-Usage: build-svr <SUBCOMMAND> [OPTS] or build-svr -h
+Usage: build-svr <SUBCOMMAND> [OPTS] or build-svr (-h|-v)
 
 Subcommands:
-       create        Create the build-server.
-       remove        Remove the build-server.
-       start         Start the build-server.
-       stop          Stop the build-server.
-       add-svr       Add build-server for support multi-OS or distribute build job.
-       add-prj       Register information for project what you want build berfore building a project.
-       register      Register the package to the build-server.
-       fullbuild     Build all your projects and upload them to package server.
+create        Create the build-server.
+remove        Remove the build-server.
+start         Start the build-server.
+stop          Stop the build-server.
+upgrade       Upgrade the build-server include friends.
+add-svr       Add remote build/package server for support multi-OS or distribute build job.
+remove-svr    Remove remote build/package server for support multi-OS or distribute build job.
+add-os        Add supported OS.
+remove-os     Remove supported OS.
+add-dist      Add distribution.
+remove-dist   Remove distribution.
+add-sync      Add package repository URL to synchronize with.
+remove-sync   Remove package repository URL.
+add-prj       Add project to build.
+remove-prj    Remove project.
+register      Register the package to the build-server.
+fullbuild     Build all your projects and upload them to package server.
+query         Show build server configuration.
 
 Subcommand usage:
-       build-svr create -n <server name> -u <package server url> -d <package server address> -t <ftp server url>
-       build-svr remove -n <server name>
-       build-svr start -n <server name> -p <port>
-       build-svr stop -n <server name>
-       build-svr add-svr -n <server name> -d <friend server address>
-       build-svr add-prj -n <server name> -N <project name> [-g <git repository>] [-b <git branch>] [-P <package name>] [-w <password>] [-o <os list>]
-       build-svr add-os -n <server name> -o <os>
-       build-svr register -n <server name> -P <package file>
-       build-svr fullbuild -n <server name>
-
-Options:
-        -n, --name <server name>         build server name
-        -u, --url <package server url>   package server url: http://127.0.0.1/dibs/unstable
-        -d, --address <server address>   server address: 127.0.0.1:2224
-        -p, --port <port>                server port number: 2224
-        -P, --pkg <package name/file>    package file path or name
-        -o, --os <target os list>        ex) linux,windows
-        -N, --pname <project name>       project name
-        -g, --git <git repository>       git repository
-        -b, --branch <git branch>        git branch
-        -w, --passwd <password>          password for managing project
-        -t, --ftp <ftp server url>       ftp server url: ftp://dibsftp:dibsftp@127.0.0.1:1024
-        -h, --help                       display this information
-        -v, --version                    display version
-
+build-svr create -n <server name> -t <ftp server url> [-u <package server url> -d <package server address>]
+build-svr remove -n <server name>
+build-svr start -n <server name> -p <port>
+build-svr stop -n <server name>
+build-svr upgrade -n <server name>
+build-svr add-svr -n <server name> -d <friend server address>
+build-svr remove-svr -n <server name> -d <friend server address>
+build-svr add-os -n <server name> -o <os>
+build-svr remove-os -n <server name> -o <os>
+build-svr add-dist -n <server name> -D <distribution name> -u <package server url> -d <package server address>
+build-svr remove-dist -n <server name> -D <distribution name>
+build-svr add-sync -n <server name> -u <remote pkg server url> [--dist <distribution>]
+build-svr remove-sync -n <server name> -u <remote pkg server url> [--dist <distribution>]
+build-svr add-prj -n <server name> -N <project name> (-g <git repository> -b <git branch>|-P <package name>) [-w <password>] [-o <os list>] [--dist <distribution>]
+build-svr remove-prj -n <server name> -N <project name> [--dist <distribution>]
+build-svr fullbuild -n <server name> [--dist <distribution>]
+build-svr register -n <server name> -P <package file> [--dist <distribution>]
+build-svr query -n <server name>
index 6038be599782b8f4cfd48ea7a1ccebc7421d28c5..d2faee113022f7ab312ccd3cd09befb726498645 100644 (file)
@@ -4,10 +4,20 @@ mkdir buildsvr01
 cd buildsvr01; ../../build-svr create -n testserver3 -u `pwd`/../pkgsvr01/unstable -d 127.0.0.1:3333 -t ftp://dibsftp:coreps2@172.21.111.132
 #EXEC
 ../build-svr add-svr -n testserver3 -d 127.0.0.1:2223
-cat ~/.build_tools/build_server/testserver3/friends
+../build-svr query -n testserver3
 #POST-EXEC
 ../build-svr remove -n testserver3
 rm -rf buildsvr01
 #EXPECT
 Friend server is added successfully!
-127.0.0.1,2223
+* REMOTE SERVER(S) *
+* 127.0.0.1:2223
+
+* SUPPORTED OS *
+
+* DISTRIBUTION(S) *
+* BASE
+
+* SYNC PACKAGE SERVER(S) *
+
+* PROJECT(S) *
index 5a7d65e6458718644fbb1c2da82be87afed96202..34f11d895868f235b56a5d342fec5db3d1b725d7 100644 (file)
@@ -10,4 +10,3 @@ echo "TEST_TIME=3" >> ~/.build_tools/build_server/testserver3/server.cfg
 ../build-svr remove -n testserver3
 rm -rf buildsvr01
 #EXPECT
-Test time is elapsed!
index 110677a0e311de1191a4f953493f76d744c3c3fa..d480c1dadeff655e11872cb6128326924fc9189b 100644 (file)
@@ -4,8 +4,6 @@ mkdir buildsvr01
 cd buildsvr01; ../../build-svr create -n testserver3 -u `pwd`/../pkgsvr01/unstable -d 127.0.0.1:3333 -t ftp://dibsftp:coreps2@172.21.111.132
 #EXEC
 ../build-svr add-prj -n testserver3 -N testa -g test_git -b test_branch -w 1111
-cat buildsvr01/projects/testa/build | grep PASSWD
 #POST-EXEC
 #EXPECT
 Adding project succeeded!
-PASSWD=1111
index 0d920e9328c0862ae90bd916d2bb874f43445c0f..ae0432fa31677217593b49b6aa3aa325c7cdb5b6 100644 (file)
@@ -4,7 +4,7 @@ mkdir buildsvr01
 cd buildsvr01; ../../build-svr create -n testserver3 -u `pwd`/../pkgsvr01/unstable -d 127.0.0.1:3333 -t ftp://dibsftp:coreps2@172.21.111.132
 ../build-svr add-os -n testserver3 -o linux
 #EXEC
-../build-svr add-prj -n testserver3 -N testx -g test_git -b test_branch -o linux
+ruby -d ../build-svr add-prj -n testserver3 -N testx -g test_git -b test_branch -o linux
 #POST-EXEC
 ../build-svr remove -n testserver3
 rm -rf buildsvr01
index 8f723218f9cc234357da0fb22aeb55ba677b369b..f1e8dd001f781c6b913a28e994b9a12b19fc5613 100644 (file)
@@ -4,10 +4,20 @@ mkdir buildsvr01
 cd buildsvr01; ../../build-svr create -n testserver3 -u `pwd`/../pkgsvr01/unstable -d 127.0.0.1:3333 -t ftp://dibsftp:coreps2@172.21.111.132
 #EXEC
 ../build-svr add-os -n testserver3 -o linux
-cat ~/.build_tools/build_server/testserver3/supported_os_list
+../build-svr query -n testserver3
 #POST-EXEC
 ../build-svr remove -n testserver3
 rm -rf buildsvr01
 #EXPECT
 Target OS is added successfully!
-linux
+* REMOTE SERVER(S) *
+
+* SUPPORTED OS *
+* linux
+
+* DISTRIBUTION(S) *
+* BASE
+
+* SYNC PACKAGE SERVER(S) *
+
+* PROJECT(S) *
index 460e0790fb5d1bddd936fc3e37aefaa736e17e3a..a0fa45d7d89c5f4577e407a9726183d53ec50a6a 100644 (file)
@@ -1,7 +1,7 @@
 #PRE-EXEC
 rm -rf buildsvr01
 mkdir buildsvr01
-cd buildsvr01; ../../build-svr create -n testserver3 -u `pwd`/../pkgsvr01/unstable -d 127.0.0.1:3333 -t ftp://dibsftp:coreps2@172.21.111.132
+cd buildsvr01; ../../build-svr create -n testserver3 -u `pwd`/../pkgsvr01/unstable -d 127.0.0.1:3333 -t ftp://ftpuser:ftpuser@172.21.111.124
 ../build-svr add-os -n testserver3 -o linux
 cp bin/bin_0.0.0_linux.zip bin/bin_0.0.0_wrongosname.zip
 ../build-svr start -n testserver3 -p 2223 &
diff --git a/test/build-svr2-01.testcase b/test/build-svr2-01.testcase
new file mode 100644 (file)
index 0000000..21a375c
--- /dev/null
@@ -0,0 +1,18 @@
+#PRE-EXEC
+../build-svr add-os -n testserver3 -o ubuntu-64
+#EXEC
+../build-svr remove-os -n testserver3 -o ubuntu-64
+../build-svr query -n testserver3
+#POST-EXEC
+#EXPECT
+Target OS is removed successfully!
+* REMOTE SERVER(S) *
+
+* SUPPORTED OS *
+* ubuntu-32
+
+* DISTRIBUTION(S) *
+
+* SYNC PACKAGE SERVER(S) *
+
+* PROJECT(S) *
diff --git a/test/build-svr2-02.testcase b/test/build-svr2-02.testcase
new file mode 100644 (file)
index 0000000..ba2bdab
--- /dev/null
@@ -0,0 +1,7 @@
+#PRE-EXEC
+echo "no os"
+#EXEC
+../build-svr remove-os -n testserver3 -o ubuntu-644
+#POST-EXEC
+#EXPECT
+Target OS does not exist in list!
diff --git a/test/build-svr2-03.testcase b/test/build-svr2-03.testcase
new file mode 100644 (file)
index 0000000..6337495
--- /dev/null
@@ -0,0 +1,18 @@
+#PRE-EXEC
+#EXEC
+../build-svr add-dist -n testserver3 -D unstable -u `pwd`/../pkgsvr01/unstable -d 127.0.0.1:3333
+../build-svr query -n testserver3
+#POST-EXEC
+#EXPECT
+Distribution is added successfully!
+* REMOTE SERVER(S) *
+
+* SUPPORTED OS *
+* ubuntu-32
+
+* DISTRIBUTION(S) *
+* unstable
+
+* SYNC PACKAGE SERVER(S) *
+
+* PROJECT(S) *
diff --git a/test/build-svr2-04.testcase b/test/build-svr2-04.testcase
new file mode 100644 (file)
index 0000000..9fdf060
--- /dev/null
@@ -0,0 +1,19 @@
+#PRE-EXEC
+../build-svr add-dist -n testserver3 -D unstable2 -u `pwd`/../pkgsvr01/unstable -d 127.0.0.1:3333
+#EXEC
+../build-svr remove-dist -n testserver3 -D unstable2
+../build-svr query -n testserver3
+#POST-EXEC
+#EXPECT
+Distribution is removed successfully!
+* REMOTE SERVER(S) *
+
+* SUPPORTED OS *
+* ubuntu-32
+
+* DISTRIBUTION(S) *
+* unstable
+
+* SYNC PACKAGE SERVER(S) *
+
+* PROJECT(S) *
diff --git a/test/build-svr2-05.testcase b/test/build-svr2-05.testcase
new file mode 100644 (file)
index 0000000..5a86502
--- /dev/null
@@ -0,0 +1,6 @@
+#PRE-EXEC
+#EXEC
+../build-svr remove-dist -n testserver3 -D unstable22
+#POST-EXEC
+#EXPECT
+Distribution does not exist in list!
diff --git a/test/build-svr2-06.testcase b/test/build-svr2-06.testcase
new file mode 100644 (file)
index 0000000..5a9af60
--- /dev/null
@@ -0,0 +1,66 @@
+#PRE-EXEC
+#EXEC
+../build-svr add-sync -n testserver3 -u http://xxx
+../build-svr query -n testserver3
+../build-svr add-sync -n testserver3 -D unstable -u http://yyy
+../build-svr query -n testserver3
+../build-svr remove-sync -n testserver3 -u http://yyy
+../build-svr query -n testserver3
+../build-svr remove-sync -n testserver3 -D unstable testserver3 -u http://xxx
+../build-svr query -n testserver3
+../build-svr remove-sync -n testserver3 -D unstable testserver3 -u http://xxxyyyy
+#POST-EXEC
+#EXPECT
+Remote package server is added!
+* REMOTE SERVER(S) *
+
+* SUPPORTED OS *
+* ubuntu-32
+
+* DISTRIBUTION(S) *
+* unstable
+
+* SYNC PACKAGE SERVER(S) *
+* [unstable] http://xxx
+
+* PROJECT(S) *
+Remote package server is added!
+* REMOTE SERVER(S) *
+
+* SUPPORTED OS *
+* ubuntu-32
+
+* DISTRIBUTION(S) *
+* unstable
+
+* SYNC PACKAGE SERVER(S) *
+* [unstable] http://xxx
+* [unstable] http://yyy
+
+* PROJECT(S) *
+Remote package server is removed!
+* REMOTE SERVER(S) *
+
+* SUPPORTED OS *
+* ubuntu-32
+
+* DISTRIBUTION(S) *
+* unstable
+
+* SYNC PACKAGE SERVER(S) *
+* [unstable] http://xxx
+
+* PROJECT(S) *
+Remote package server is removed!
+* REMOTE SERVER(S) *
+
+* SUPPORTED OS *
+* ubuntu-32
+
+* DISTRIBUTION(S) *
+* unstable
+
+* SYNC PACKAGE SERVER(S) *
+
+* PROJECT(S) *
+The server does not exist in list!
diff --git a/test/build-svr2-07.testcase b/test/build-svr2-07.testcase
new file mode 100644 (file)
index 0000000..20d11d0
--- /dev/null
@@ -0,0 +1,78 @@
+#PRE-EXEC
+../build-svr add-dist -n testserver3 -D unstable2 -u `pwd`/../pkgsvr01/unstable -d 127.0.0.1:3333
+#EXEC
+../build-svr add-prj -n testserver3 -N test1 -g test1_git -b test1_branch
+../build-svr query -n testserver3
+../build-svr add-prj -n testserver3 -D unstable -N test2 -g test1_git -b test1_branch
+../build-svr add-prj -n testserver3 -D unstable2 -N test1 -g test1_git -b test1_branch
+../build-svr query -n testserver3
+../build-svr remove-prj -n testserver3 -N test1
+../build-svr query -n testserver3
+../build-svr remove-prj -n testserver3 -D unstable -N test2
+../build-svr remove-prj -n testserver3 -D unstable2 -N test1
+../build-svr query -n testserver3
+../build-svr remove-prj -n testserver3 -D unstable -N testxxx
+#POST-EXEC
+../build-svr remove-dist -n testserver3 -D unstable2
+#EXPECT
+Adding project succeeded!
+* REMOTE SERVER(S) *
+
+* SUPPORTED OS *
+* ubuntu-32
+
+* DISTRIBUTION(S) *
+* unstable
+* unstable2
+
+* SYNC PACKAGE SERVER(S) *
+
+* PROJECT(S) *
+* [unstable]  test1
+Adding project succeeded!
+Adding project succeeded!
+* REMOTE SERVER(S) *
+
+* SUPPORTED OS *
+* ubuntu-32
+
+* DISTRIBUTION(S) *
+* unstable
+* unstable2
+
+* SYNC PACKAGE SERVER(S) *
+
+* PROJECT(S) *
+* [unstable]  test1
+* [unstable]  test2
+* [unstable2]  test1
+Removing project succeeded!
+* REMOTE SERVER(S) *
+
+* SUPPORTED OS *
+* ubuntu-32
+
+* DISTRIBUTION(S) *
+* unstable
+* unstable2
+
+* SYNC PACKAGE SERVER(S) *
+
+* PROJECT(S) *
+* [unstable]  test2
+* [unstable2]  test1
+Removing project succeeded!
+Removing project succeeded!
+* REMOTE SERVER(S) *
+
+* SUPPORTED OS *
+* ubuntu-32
+
+* DISTRIBUTION(S) *
+* unstable
+* unstable2
+
+* SYNC PACKAGE SERVER(S) *
+
+* PROJECT(S) *
+Removing project failed!
diff --git a/test/build-svr2-08.testcase b/test/build-svr2-08.testcase
new file mode 100644 (file)
index 0000000..beda518
--- /dev/null
@@ -0,0 +1,21 @@
+#PRE-EXEC
+#EXEC
+../build-svr add-prj -n testserver3 -D unstable -N testbin -P bin
+../build-svr query -n testserver3
+../build-svr remove-prj -n testserver3 -N testbin -D unstable
+#POST-EXEC
+#EXPECT
+Adding project succeeded!
+* REMOTE SERVER(S) *
+
+* SUPPORTED OS *
+* ubuntu-32
+
+* DISTRIBUTION(S) *
+* unstable
+
+* SYNC PACKAGE SERVER(S) *
+
+* PROJECT(S) *
+* [unstable]  testbin
+Removing project succeeded!
diff --git a/test/build-svr3-01.testcase b/test/build-svr3-01.testcase
new file mode 100644 (file)
index 0000000..5180f36
--- /dev/null
@@ -0,0 +1,14 @@
+#PRE-EXEC
+#EXEC
+../build-svr register -n testserver3 -D unstable -P bin/bin_0.0.0_ubuntu-32.zip
+#POST-EXEC
+#EXPECT
+Info: Initializing job...
+Info: Checking package version ...
+Info: Invoking a thread for REGISTER Job
+Info: New Job
+Info: Checking reverse build dependency ...
+Info: Uploading ...
+Info: Upload succeeded. Sync local pkg-server again...
+Info: Snapshot:
+Info: Job is completed!
diff --git a/test/build-svr3-02.testcase b/test/build-svr3-02.testcase
new file mode 100644 (file)
index 0000000..ecb15d4
--- /dev/null
@@ -0,0 +1,56 @@
+#PRE-EXEC
+#EXEC
+../build-cli build  -N testa -d 127.0.0.1:2223 -D unstable
+../build-cli build  -N testa -d 127.0.0.1:2223 -D unstable2
+#POST-EXEC
+#EXPECT
+Info: Added new job
+Info: Initializing job...
+Info: Checking package version ...
+Info: Invoking a thread for building Job
+Info: New Job
+Info: Checking build dependency ...
+Info: Checking install dependency ...
+Info: Started to build this job...
+Info: JobBuilder
+Info: Downloding client is initializing...
+Info: Installing dependent packages...
+Info: Downloading dependent source packages...
+Info: Make clean...
+Info: Make build...
+Info: Make install...
+Info: Generatiing pkginfo.manifest...
+Info: Zipping...
+Info: Creating package file ... a_0.0.1_ubuntu-32.zip
+Info: Checking reverse build dependency ...
+Info: Uploading ...
+Info: Upload succeeded. Sync local pkg-server again...
+Info: Snapshot:
+Info: Job is completed!
+Info: Job is FINISHED successfully!
+Info: Updating the source info for project "testa"
+Info: Added new job
+Info: Initializing job...
+Info: Checking package version ...
+Info: Invoking a thread for building Job
+Info: New Job
+Info: Checking build dependency ...
+Info: Checking install dependency ...
+Info: Started to build this job...
+Info: JobBuilder
+Info: Downloding client is initializing...
+Info: Installing dependent packages...
+Info: Downloading dependent source packages...
+Info: Make clean...
+Info: Make build...
+Info: Make install...
+Info: Generatiing pkginfo.manifest...
+Info: Zipping...
+Info: Creating package file ... a_0.0.1_ubuntu-32.zip
+Info: Checking reverse build dependency ...
+Info: Uploading ...
+Info: Upload succeeded. Sync local pkg-server again...
+Info: Snapshot:
+Info: Job is completed!
+Info: Job is FINISHED successfully!
+Info: Updating the source info for project "testa"
diff --git a/test/build-svr3-03.testcase b/test/build-svr3-03.testcase
new file mode 100644 (file)
index 0000000..3c3d365
--- /dev/null
@@ -0,0 +1,15 @@
+#PRE-EXEC
+#EXEC
+../build-cli register -d 127.0.0.1:2223 -P bin/bin_0.0.0_ubuntu-32.zip -D unstable2 -t ftp://ftpuser:ftpuser@127.0.0.1
+#POST-EXEC
+#EXPECT
+Info: Added new job
+Info: Initializing job...
+Info: Checking package version ...
+Info: Invoking a thread for REGISTER Job
+Info: New Job
+Info: Checking reverse build dependency ...
+Info: Uploading ...
+Info: Upload succeeded. Sync local pkg-server again...
+Info: Snapshot:
+Info: Job is completed!
diff --git a/test/build-svr3-04.testcase b/test/build-svr3-04.testcase
new file mode 100644 (file)
index 0000000..d040f2d
--- /dev/null
@@ -0,0 +1,18 @@
+#PRE-EXEC
+#EXEC
+../build-svr fullbuild -n testserver3 -D unstable2
+#POST-EXEC
+#EXPECT
+Info: Initializing job...
+Info: Invoking a thread for MULTI-BUILD Job
+Info: New Job
+Info: Added new job "testa" for ubuntu-32!
+Info: Added new job "testb" for ubuntu-32!
+Info:  * Sub-Job "testa(ubuntu-32)" has entered "WORKING" state.
+Info:  * Sub-Job "testa(ubuntu-32)" has entered "FINISHED" state.
+Info:  * Sub-Job "testb(ubuntu-32)" has entered "WORKING" state.
+Info:  * Sub-Job "testb(ubuntu-32)" has entered "FINISHED" state.
+Info: Uploading ...
+Info: Upload succeeded. Sync local pkg-server again...
+Info: Snapshot:
+Info: Job is completed
index e307c191fe28e394c8f506d19895529fd00f635a..e8964abfccb21b3a6e8603330592710ff8c90e37 100755 (executable)
@@ -29,4 +29,4 @@ cd ..
 ../build-svr add-prj -n testserver3 -N teste -P bin
 ../build-svr add-prj -n testserver3 -N testa1 -g `pwd`/git01/a1 -b master
 ../pkg-svr register -n pkgsvr01 -d unstable -P bin/bin_0.0.0_ubuntu-32.zip
-../build-svr start -n testserver3 -p 2223 --CHILD
+ruby -d ../build-svr start -n testserver3 -p 2223 --CHILD
diff --git a/test/buildsvr2.init b/test/buildsvr2.init
new file mode 100755 (executable)
index 0000000..8f19780
--- /dev/null
@@ -0,0 +1,8 @@
+#!/bin/sh
+rm -rf buildsvr02
+mkdir buildsvr02
+cd buildsvr02
+../../build-svr remove -n testserver4
+../../build-svr create -n testserver4 -u `pwd`/../pkgsvr01/unstable -d 127.0.0.1:3333 -t ftp://ftpuser:ftpuser@127.0.0.1
+cd ..
+../build-svr start -n testserver4 -p 2224
diff --git a/test/buildsvr3.init b/test/buildsvr3.init
new file mode 100755 (executable)
index 0000000..fc50c3a
--- /dev/null
@@ -0,0 +1,7 @@
+#!/bin/sh
+rm -rf buildsvr01
+rm -rf ~/.build_tools/build_server/testserver3
+mkdir buildsvr01
+cd buildsvr01
+../../build-svr create -n testserver3 -t ftp://ftpuser:ftpuser@127.0.0.1
+../../build-svr add-os -n testserver3 -o ubuntu-32
diff --git a/test/buildsvr4.init b/test/buildsvr4.init
new file mode 100755 (executable)
index 0000000..a3f7b2c
--- /dev/null
@@ -0,0 +1,24 @@
+#!/bin/sh
+rm -rf buildsvr01
+rm -rf ~/.build_tools/build_server/testserver3
+mkdir buildsvr01
+../build-svr remove -n testserver3
+cd buildsvr01
+../../build-svr create -n testserver3 -t ftp://ftpuser:ftpuser@127.0.0.1
+cd ..
+cd git01
+rm -rf a
+rm -rf b
+tar xf a_v1.tar.gz
+tar xf b_v1.tar.gz
+cd ..
+../build-svr add-dist -n testserver3 -D unstable -u `pwd`/pkgsvr01/unstable -d 127.0.0.1:3333
+../build-svr add-dist -n testserver3 -D unstable2 -u `pwd`/pkgsvr01/unstable2 -d 127.0.0.1:3333
+../build-svr add-os -n testserver3 -o ubuntu-32
+../build-svr add-prj -n testserver3 -N testa -g `pwd`/git01/a -b master
+../build-svr add-prj -n testserver3 -N testb -g `pwd`/git01/b -b master
+../build-svr add-prj -n testserver3 -N testa -D unstable2 -g `pwd`/git01/a -b master
+../build-svr add-prj -n testserver3 -N testb -D unstable2 -g `pwd`/git01/b -b master
+../build-svr add-prj -n testserver3 -N testbin -D unstable -P bin
+../build-svr add-prj -n testserver3 -N testbin -D unstable2 -P bin
+ruby -d ../build-svr start -n testserver3 -p 2223 --CHILD
diff --git a/test/pkgsvr4.init b/test/pkgsvr4.init
new file mode 100755 (executable)
index 0000000..fbb6e49
--- /dev/null
@@ -0,0 +1,10 @@
+#!/bin/sh
+rm -rf ~/.build_tools/pkg_server/pkgsvr01
+rm -rf `pwd`/pkgsvr01
+ruby -d ../pkg-svr create -n pkgsvr01 -d unstable
+ruby -d ../pkg-svr add-dist -n pkgsvr01 -d unstable2
+ruby -d ../pkg-svr add-os -n pkgsvr01 -d unstable -o ubuntu-32
+ruby -d ../pkg-svr add-os -n pkgsvr01 -d unstable -o windows-32
+ruby -d ../pkg-svr add-os -n pkgsvr01 -d unstable2 -o ubuntu-32
+ruby -d ../pkg-svr add-os -n pkgsvr01 -d unstable2 -o windows-32
+ruby -d ../pkg-svr start -n pkgsvr01 -p 3333
index 177cf4d5d6fc387df647ef896f81667eddb5d9f0..11aa893fb5e7aa210de0f58d24b7c66f40d28fc5 100755 (executable)
@@ -25,6 +25,9 @@ class TestCase
                i = 0
                @expected_results.each do |e|
                        found = false
+                       if results[i].nil? then
+                               return false
+                       end
                        if not results[i].include? e then
                                return false
                        end