BSR: 0.16.10.8
authorhyokeun.jeon <hyokeun.jeon@samsung.com>
Tue, 13 Apr 2021 12:04:55 +0000 (21:04 +0900)
committerhyokeun.jeon <hyokeun.jeon@samsung.com>
Tue, 13 Apr 2021 12:04:55 +0000 (21:04 +0900)
Change-Id: I8478d363638b69d44cb6ed73956791db1cc04cf4

debian/changelog
depanneur

index 97bba028296454af3b9463cf6d279a3bd326c7d4..b89fd4d5185f904716d12444d41e6a3f3e045cdb 100644 (file)
@@ -1,3 +1,10 @@
+depanneur (0.16.10.8) unstable; urgency=high
+
+  * Upgrade to 0.16.10.8
+  * Hotfix for not terinating cpu stats
+
+ -- Hyokeun Jeon <hyokeun.jeon@samsung.com>  Tue, 13 Apr 2021 21:00:00 +0800
+
 depanneur (0.16.10.7) unstable; urgency=high
 
   * Upgrade to 0.16.10.7
index 22c8939a9744da7b5b729ed2a419a15b9d57e13e..ab9c71684586cd6a458d47ce0a4fe88f00b5d335 100755 (executable)
--- a/depanneur
+++ b/depanneur
@@ -194,8 +194,8 @@ my $reverse_off = 0; #disable reverse dependency
 my $reverse_on = 1; #enable reverse dependency
 my $export_only = 0; # only export, not building
 my $tarfile = 0; # generate tar file for dependence & reverse dependence xml file
-my $preordered_list = "";
-my $profiling_reference = "";
+my $preordered_list = ""; # List of ordered packages to support user defined build order calculation
+my $profiling = ""; # Reference profiling report location. If set reports will be generated
 
 GetOptions (
     "repository=s" => \@repos,
@@ -256,7 +256,7 @@ GetOptions (
     "export-only" => \$export_only,
     "tarfile" => \$tarfile,
     "preordered-list=s" => \$preordered_list,
-    "profiling-reference=s" => \$profiling_reference,
+    "profiling=s" => \$profiling,
     );
 
 if ( $help ) {
@@ -1543,12 +1543,13 @@ sub get_top_order {
 sub update_pkgdeps
 {
     my $rev_flag = shift;
+    my $force_flag = shift;
     %tmp_expansion_errors = ();
     foreach my $name (keys %to_build) {
         #skip package which has been processed
-        if( (grep $_ eq $name, @done) ||
+        if( $force_flag == 0 && ((grep $_ eq $name, @done) ||
             (grep $_ eq $name, @skipped) ||
-            (grep $_ eq $name, @running)) {
+            (grep $_ eq $name, @running))) {
             next;
         }
         if(! (grep $_ eq $name, @skipped)) {
@@ -2391,9 +2392,9 @@ sub build_report
     info("build logs can be found in:\n     $localrepo/$dist/$arch/logs");
     info("build roots located in:\n     $scratch_dir.*");
     if (%errors || %expansion_errors || @export_errors || ($succeeded_packages == 0 && @skipped == 0)) {
-        return 1;
+        exit 1;
     }
-    return 0;
+
 }
 
 #---------------------------------------------------------------------
@@ -2453,11 +2454,14 @@ sub update_pkgrdeps {
 }
 
 sub generate_depends_xmlfile() {
-    #if there is no dependence relation, skip!
 
     info("start generate packages depends from: " . $package_path . " ($style)");
     my_system("rm -rf $depends_dir");
 
+    update_pkgdeps($reverse_on, 1);
+    update_pkgrdeps();
+
+    #if there is no dependence relation, skip!
     if (0 == scalar (keys %pkgdeps))
     {
         return;
@@ -2541,6 +2545,100 @@ sub generate_depends_xmlfile() {
 
 }
 
+sub generate_depends() {
+    ($_, $start_time) = my_system("date +\"%Y-%m-%d %H:%M %z\"");
+    ($_, $gbs_version) = my_system("gbs -V");
+    $gbs_version =~ s!gbs !!;
+
+    if ($style eq 'git') {
+        File::Find::find({wanted => \&git_wanted}, $package_path );
+        if (@pre_packs > 1 && $commit ne "HEAD"){
+            error("--commit option can't be specified with multiple packages");
+        }
+        if (@pre_packs == 0) {
+            error("No source package found at $package_path");
+        }
+        foreach my $p (@pre_packs) {
+            my $specs = $p->{"filename"};
+            my @spec_list = split(",", $specs);
+            foreach my $spec (@spec_list) {
+            my $new_p;
+            $new_p->{"project_base_path"} = $p->{"project_base_path"};
+            $new_p->{"packaging_dir"} = $p->{"packaging_dir"};
+            $new_p->{"upstream_branch"} = $p->{"upstream_branch"};
+            $new_p->{"upstream_tag"} = $p->{"upstream_tag"};
+                $new_p->{"filename"} = $spec;
+                push @packs, $new_p;
+            }
+        }
+    } elsif ($style eq 'tar') {
+        File::Find::find({wanted => \&dir_wanted}, $package_path );
+        if (@packs == 0) {
+            error("No source package found at $package_path");
+        }
+    } else {
+        @packs = @ARGV;
+        if (@packs == 0) {
+            File::Find::find({wanted => \&obs_wanted}, $package_path );
+        }
+    }
+
+    info("retrieving repo metadata...");
+    my $repos_setup = 1;
+    my_system("> '$order_dir'/.repo.cache.local");
+    if (-d "$rpm_repo_path") {
+        my_system("$build_dir/createdirdeps '$rpm_repo_path' >> '$order_dir'/.repo.cache.local");
+        my_system("echo D: >> '$order_dir'/.repo.cache.local");
+    }
+    my_system("> '$order_dir'/.repo.cache.remote");
+    foreach my $repo (@package_repos) {
+        my $cmd = "";
+        if ($repo =~ /^\// && ! -e "$repo/repodata/repomd.xml") {
+            $cmd = "$build_dir/createdirdeps '$repo' >> '$order_dir'/.repo.cache.remote ";
+        } else {
+            $cmd = "$build_dir/createrepomddeps --cachedir='$cache_dir' '$repo' >> '$order_dir'/.repo.cache.remote ";
+        }
+        debug($cmd);
+        if ( my_system($cmd) == 0 ) {
+            my_system("echo D: >> '$order_dir'/.repo.cache.remote");
+        } else {
+            $repos_setup = 0;
+        }
+    }
+    # Merge local repo cache and remote repo cache
+    my_system("cat '$order_dir'/.repo.cache.local '$order_dir'/.repo.cache.remote >'$order_dir'/.repo.cache");
+
+    if ($repos_setup == 0 ) {
+        error("repo cache creation failed...");
+    }
+
+    info("parsing package data...");
+    my %packs = parse_packs($config, @packs);
+
+    if ($depends_local_only) {
+      my @local_packs = get_pack_list_from_local_repo();
+      foreach my $p (sort keys %packs) {
+        if (grep $_ eq $p, @local_packs) {
+          $to_build{$p} = $packs{$p};
+        }
+      }
+    } else {
+      %to_build = %packs;
+    }
+
+    if (scalar (keys %to_build) == 0) {
+        warning("no available packages to generate depends.");
+        return;
+    }
+
+    # Create & Update package dependency
+    info("building repo metadata ...");
+    refresh_repo();
+
+    generate_depends_xmlfile();
+
+}
+
 #use pre-export source to analyse
 sub fill_packs_from_dir {
        my $name = shift;
@@ -2584,45 +2682,19 @@ sub dir_wanted {
 
 sub prepare_preorder_list {
 
-    my_system("rm -rf bsr_profiling_report");
-    my_system("rm -rf $localrepo/$dist/$arch/bsr_profiling_report");
-
-    if ($dryrun) {
-        return;
-    }
-
     my @preview_orders = ();
 
+    my_system("rm -rf bsr_profiling_report");
+
     if ($preordered_list ne "") {
         @preview_orders = split /[:,\s\/]+/, $preordered_list;
+        info("Preordered list given");
     }
 
     my $preview_command = "";
-
-    if ($profiling_reference ne "") {
-        $preview_command = "bsr reorder -j $profiling_reference ";
-    } elsif (@preview_orders <= 0) {
-        generate_depends_xmlfile();
-        my $dep_xml_file = "$depends_dir/$dist/$arch/$dist\_$arch\_pkgdepends.xml";
-        if (-e $dep_xml_file) {
-            $preview_command = "bsr preview -a $arch --depsnumbersort ";
-            $preview_command = $preview_command . " -x \"$dep_xml_file\" ";
-            my $candidate_ref = "";
-            foreach my $r (@package_repos) {
-                if (index($r, "base") != -1 || (index($r, "/debug") != -1)) {
-                    next;
-                }
-                $candidate_ref = $r;
-            }
-            if ($candidate_ref ne "") {
-                $preview_command = $preview_command . " -r \"$candidate_ref\" --criticalsort ";
-            }
-        }
-    } else {
-        $preview_command = "bsr reorder -j non/exists/path ";
-    }
-
-    if ($preview_command ne "") {
+    if ($profiling ne "") {
+        $preview_command = "bsr reorder -j $profiling --verbose ";
+        info($preview_command);
         my_system($preview_command);
 
         my $preview_config = "";
@@ -2633,6 +2705,9 @@ sub prepare_preorder_list {
                 && $preview_config->{preview}
                 && $preview_config->{preview}->{packages}
                 && @{$preview_config->{preview}->{packages}} > 0) {
+
+                info("We have preview orders... " . @{$preview_config->{preview}->{packages}});
+
                 foreach my $p (@{$preview_config->{preview}->{packages}}) {
                     if ( !(grep $_ eq $p, @preview_orders) ) {
                         push @preview_orders, $p;
@@ -2645,54 +2720,42 @@ sub prepare_preorder_list {
             }
         } else {
             $preview_config = "";
+            info("No .bsr.preview.yaml file found");
         }
     }
 
     if (@preview_orders) {
         $preordered_list = join ",", @preview_orders;
     }
-
-    my_system("rm -rf $depends_dir");
 }
 
 sub profiling_report {
-    # Create depends xml file to use in reporting
-    generate_depends_xmlfile();
 
-    # Call BSR
+    if ($profiling eq "") {
+        return;
+    }
+
+    generate_depends_xmlfile();
 
     my $report_command = "bsr report -a $arch --verbose --depsnumbersort ";
-    if ($profiling_reference ne "") {
-        $report_command = $report_command . " -j $profiling_reference ";
-    }
     my $dep_xml_file = "$depends_dir/$dist/$arch/$dist\_$arch\_pkgdepends.xml";
     if (-e $dep_xml_file) {
         $report_command = $report_command . " -x \"$dep_xml_file\" ";
     }
-    $report_command = $report_command . " -k \"$localrepo/$dist/$arch/logs/\" ";
-
-    # Get candidate repos
-    my $candidate_ref = "";
-    foreach my $r (@package_repos) {
-        if (index($r, "base") != -1 || (index($r, "/debug") != -1)) {
-            next;
-        }
-        $candidate_ref = $r;
-    }
-    if ($candidate_ref ne "") {
-        $report_command = $report_command . " -r \"$candidate_ref\" --criticalsort ";
-    }
+    $report_command = $report_command . " -k \"$success_logs_path\" ";
 
-    info("");
     info($report_command);
-    info("");
-
     my_system($report_command);
     my_system("mv bsr_profiling_report $localrepo/$dist/$arch/");
 
 }
 
 # MAIN
+if ($depends) {
+    info("start generate packages depends from: " . $package_path . " ($style)");
+    generate_depends();
+    exit 0;
+}
 
 info("start building packages from: " . $package_path . " ($style)");
 ($_, $start_time) = my_system("date +\"%Y-%m-%d %H:%M %z\"");
@@ -2859,18 +2922,11 @@ if ($noinit == 0 && $incremental == 0) {
 }
 
 info("package dependency resolving ...");
-update_pkgdeps($reverse_on);
-update_pkgrdeps();
-
-if ($depends) {
-    generate_depends_xmlfile();
-    exit 0;
-}
+update_pkgdeps($reverse_on, 0);
+update_pkgddeps();
 
 prepare_preorder_list();
 
-update_pkgddeps();
-
 my @bins = get_binary_list();
 if (@bins) {
     my @tobuild = ();
@@ -2910,7 +2966,7 @@ if (@bins) {
         resolve_skipped_packages();
     }
     $get_order = 0;
-    update_pkgdeps($reverse_on);
+    update_pkgdeps($reverse_on, 0);
     update_pkgddeps();
 }
 
@@ -2991,7 +3047,6 @@ if ($noinit == 1 || $incremental == 1) {
         last;
     }
     update_repo();
-    profiling_report();
     build_report();
     exit $ret;
 }
@@ -3041,7 +3096,6 @@ if ($preordered_list ne "") {
     }
 }
 
-
 # Main process loop
 # Every loop, first update package information
 # include dependencies if there is new package
@@ -3190,6 +3244,7 @@ while ((threads->list() > 0)) {
     sleep(1);
 }
 update_repo();
+build_report();
 profiling_report();
-exit build_report();
 
+exit 0