[Title] Supported to check reverse build when remote building project
authordonghyuk.yang <donghyuk.yang@samsung.com>
Mon, 3 Sep 2012 08:31:40 +0000 (17:31 +0900)
committerdonghyuk.yang <donghyuk.yang@samsung.com>
Mon, 3 Sep 2012 08:31:40 +0000 (17:31 +0900)
[Type]
[Module]
[Priority]
[Jira#]
[Redmine#]
[Problem]
[Cause]
[Solution]
[TestCase]

build-cli
src/build_server/BuildClientOptionParser.rb
src/build_server/BuildJob.rb
src/build_server/RemoteBuilder.rb
src/build_server/SocketJobRequestListener.rb

index 24e874c1909d3d0e8306cdd0e9f4dc43db70bb98..5b439fcd45e878fbf1062683d0eaf0f232c546db 100755 (executable)
--- a/build-cli
+++ b/build-cli
@@ -182,7 +182,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]}"
+                       client.send "BUILD|GIT|#{option[:project]}|#{option[:passwd]}|#{option[:os]}|#{option[:async]}|#{option[:noreverse]}"
                        client.print_stream
                        client.terminate
                else
index db7c4ab17a38ab6e50a748c8ceba2104a58a5fe6..0a80ea5bd93c353be03518bc3224004b70fa95f9 100644 (file)
@@ -140,6 +140,11 @@ def option_parse
         options[:async] = "NO"
                opts.on( '--async', 'asynchronous job' ) do
             options[:async] = "YES"
+               end
+
+        options[:noreverse] = "NO"
+               opts.on( '--noreverse', 'do not check reverse build' ) do
+            options[:noreverse] = "YES"
         end
        
                opts.on( '-j', '--job <job number>', 'job number' ) do|job|
index 8051381de5ba5c3e096a56e1c986ab0035a30914..20825604f97be4eaa3d77996191e83dda2284911 100644 (file)
@@ -49,6 +49,7 @@ class BuildJob
        attr_accessor :pkgsvr_client, :thread
        attr_accessor :rev_fail_projects, :rev_success_jobs
        attr_accessor :pending_ancestor, :cancel_state
+       attr_accessor :no_reverse
 
        # initialize
        def initialize (id, project, os, server)
@@ -98,6 +99,8 @@ class BuildJob
 
                @external_pkgs = []
                @force_rebuild = false
+
+               @no_reverse = false
        end
 
 
@@ -149,6 +152,10 @@ class BuildJob
                @remote_server=server
        end
 
+       def set_no_reverse()
+               @no_reverse = true                      
+       end                     
+
 
        def set_internal_job( dock_num )
                @is_internal_job = true
@@ -839,7 +846,7 @@ class BuildJob
                        # build
                        if @is_remote_job then
                                result = builder.build(@project.repository, @source_path, @os, 
-                                       @is_rev_build_check_job, @git_commit,  local_pkgs)
+                                       @is_rev_build_check_job, @git_commit, @no_reverse, local_pkgs)
                        else
                                result =  builder.build(@source_path, @os, use_clean, local_pkgs, false )
                        end
@@ -850,12 +857,15 @@ class BuildJob
                        end
                end
 
-               # check reverse dependecy if not sub job
-               if not @is_rev_build_check_job and not @is_internal_job and
-                       not ReverseBuildChecker.check( self, true ).empty? then
-                       @log.error( "Reverse-build-check failed!" )
-                       return false
-               end
+               # check reverse dependecy if not sub jobs
+       
+               if not @no_reverse then
+                       if not @is_rev_build_check_job and not @is_internal_job and
+                               not ReverseBuildChecker.check( self, true ).empty? then
+                               @log.error( "Reverse-build-check failed!" )
+                               return false
+                       end
+               end                     
 
                return true
        end
index 951e72d78eafe6f7272ec8deb42a242ac52943c3..e3a594bed64ce4b945dcaff9e7aa4bc6c4371901 100644 (file)
@@ -50,7 +50,7 @@ class RemoteBuilder
 
        
        # build
-       def build( git_repos, source_path, os, is_rev_build, srcinfo, local_pkgs )
+       def build( git_repos, source_path, os, is_rev_build, srcinfo, no_reverse, local_pkgs )
                @log.info( "Start to build on remote server...", Log::LV_USER )
 
                # create unique dock number
@@ -69,7 +69,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, local_pkgs, dock)
+                       is_rev_build, srcinfo, no_reverse, local_pkgs, dock)
 
         @log.info( "Receiving log file from remote server...", Log::LV_USER )
                if not receive_file_from_remote( "#{source_path}/../remote_log", dock ) then
@@ -126,7 +126,7 @@ class RemoteBuilder
 
        # send build request 
        protected
-       def send_build_request(git_repos, os, is_rev_build, commit, local_pkgs, dock = "0")
+       def send_build_request(git_repos, os, is_rev_build, commit, no_reverse, local_pkgs, dock = "0")
                result_files = []
 
         client = BuildCommClient.create( @addr, @port, @log ) 
@@ -139,13 +139,13 @@ class RemoteBuilder
                local_pkg_names = local_pkgs.map { |path| File.basename(path) }
 
         # send
-               # format: BUILD|GIT|repository|passwd|os|async|internal|rev-build|commit|pkgs|dock_num
-               # value : BUILD|GIT|repository|      |os|NO   |YES     |rev-build|commit|pkgs|dock_num
+               # 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
                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|YES|#{rev}|#{commit}|#{pkg_list}|#{dock}"
+               msg = "BUILD|GIT|#{git_repos}||#{os}|NO|#{no_reverse}|YES|#{rev}|#{commit}|#{pkg_list}|#{dock}"
         if client.send( msg ) then 
             result = client.read_lines do |l|
                 # write log first
index 4009c725cc2ddafaae5d5a324cffc96b25d61dcc..aaf4ca3339d0799e95f7f3c57bb6e76cb79e0cf9 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
-               # Case2. BUILD|GIT|git_repos||os|async|internal|rev_build|commit|pkgs|dock_num
+               # 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
 
                # parse
                project_name_list = tok[2].split(",")
@@ -183,11 +183,12 @@ class SocketJobRequestListener
                passwd = passwd_list[0]
                os_list = tok[4].split(",")
                async = tok[5].eql? "YES"
-               is_internal = tok[6].eql? "YES"
-               rev_job = tok[7].eql? "YES"
-               git_commit = (not tok[8].nil? and not tok[8].empty?) ? tok[8] : nil
-               pkg_files = (not tok[9].nil? and not tok[9].empty?) ? tok[9].split(",") : []
-               dock_num = (not tok[10].nil? and not tok[10].empty?) ? tok[10].strip : "0"
+               no_reverse = tok[6].eql? "YES"
+               is_internal = tok[7].eql? "YES"
+               rev_job = tok[8].eql? "YES"
+               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"
 
                # check supported os if not internal job
                if not is_internal then
@@ -247,6 +248,8 @@ class SocketJobRequestListener
                        raise "No valid jobs!"
                end
 
+               if no_reverse then new_job.set_no_reverse end
+
                # create logger and set
                logger = JobLog.new( new_job, req )
                if not async then new_job.set_logger(logger) end
@@ -663,6 +666,7 @@ class SocketJobRequestListener
        # "UPLOAD"
        def handle_cmd_upload( line, req )
                @log.info "Received File transfer REQ : #{line}"
+
                tok = line.split("|").map { |x| x.strip }
                if tok.count < 2 then 
                        @log.info "Received Wrong REQ: #{line}"