fix depanneur about check_circle 44/230544/2 accepted/tizen/devbase/tools/20200415.093452 accepted/tizen/devbase/tools/20200423.100544 submit/trunk/20200413.151000 submit/trunk/20200414.141500 submit/trunk/20200414.173500 submit/trunk/20200414.191000 submit/trunk/20200422.115210 submit/trunk/20200422.142510 submit/trunk/20200422.165210 submit/trunk/20200423.102810 submit/trunk/20200423.115423 submit/trunk/20200423.122334
authoryan11.meng <yan11.meng@samsung.com>
Fri, 10 Apr 2020 10:53:52 +0000 (18:53 +0800)
committeryan11.meng <yan11.meng@samsung.com>
Fri, 10 Apr 2020 11:56:49 +0000 (19:56 +0800)
Change-Id: I74bb0ed825573e2284e006e3967fa92855cd6432
Signed-off-by: yan11.meng <yan11.meng@samsung.com>
depanneur

index 59768c7e01cb95c76a436445b25561479c6dce83..b83b5f69b74aa19fa483f7d3cd63ae625e70eab9 100755 (executable)
--- a/depanneur
+++ b/depanneur
@@ -164,6 +164,7 @@ my %visit    = ();      # visit dict for resolving circles
 my @running :shared = (); # threads shared, store all running workers
 my @done :shared = ();    # threads shared, store all packages already build done
 my @skipped = ();         # store packages skipped
+my  %left_pkg= ();          #store package  caused circle
 
 my @cleaned : shared = ();# affect on --clean-once specified, store cleaned threads
 my %errors :shared;       # threads shared, store packages build error
@@ -1389,7 +1390,7 @@ sub check_circle {
             $visit{$pkg} = 0;
         }
     };
-    for $pkg (keys %pkgddeps) {
+    for $pkg (keys %left_pkg) {
         my @visit_stack;
         &$reset_visit();
         push (@visit_stack, $pkg);
@@ -1406,11 +1407,13 @@ sub check_circle {
 # according to BFS to solve topological sorting issue
 #---------------------------------------------------------------------
 sub get_top_order {
+        my @all_queue=();
         my @queue = ();
         my @top_order = ();
         my %ref_build_complete = ();
         my $pkg_number = 0;
         for my $pack (sort keys %pkgddeps) {
+                push @all_queue, $pack;
                 $pkg_number++;
                 $ref_build_complete{$pack} = 0;
                 my $pack_in_degree = 0;
@@ -1432,7 +1435,15 @@ sub get_top_order {
                         }
                 }
         }
-        if($pkg_number == @top_order) {
+
+    #---------------------------------------------------------------------
+    # get packages that may cause circle
+    #---------------------------------------------------------------------
+        %left_pkg=();
+        @left_pkg{@all_queue}=();
+        delete @left_pkg{@top_order};
+
+        if(check_circle() == 0) {
             info("there is no circle in $pkg_number packages");
             return @top_order;
         }