BSR: call bsr command
authorHyokeun Jeon <hyokeun.jeon@samsung.com>
Thu, 18 Mar 2021 15:27:46 +0000 (00:27 +0900)
committerHyokeun Jeon <hyokeun.jeon@samsung.com>
Thu, 18 Mar 2021 15:27:46 +0000 (00:27 +0900)
depanneur

index a289bc3a58788a8fc4d93b64ed9570b281741a38..36b996f15d35c62cd70166d2519287c1890ca356 100755 (executable)
--- a/depanneur
+++ b/depanneur
@@ -194,7 +194,7 @@ 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 = ""; # List of ordered packages to support user defined build order calculation
+my $preordered_list = "";
 
 GetOptions (
     "repository=s" => \@repos,
@@ -2452,6 +2452,10 @@ 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");
+
     if (0 == scalar (keys %pkgdeps))
     {
         return;
@@ -2535,103 +2539,6 @@ 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();
-
-    info("package dependency resolving ...");
-    update_pkgdeps($reverse_on);
-    update_pkgrdeps();
-
-    generate_depends_xmlfile();
-
-}
 #use pre-export source to analyse
 sub fill_packs_from_dir {
        my $name = shift;
@@ -2673,13 +2580,93 @@ sub dir_wanted {
        }
 }
 
-# MAIN
-if ($depends) {
-    info("start generate packages depends from: " . $package_path . " ($style)");
-    generate_depends();
-    exit 0;
+sub prepare_preorder_list {
+
+    my_system("rm -rf bsr_profiling_report");
+
+    my $preview_command = "bsr preview -a $arch --verbose --depsnumbersort ";
+    my $dep_xml_file = "$depends_dir/$dist/$arch/$dist\_$arch\_pkgdepends.xml";
+    if (-e $dep_xml_file) {
+        $preview_command = $preview_command . " -x \"$dep_xml_file\" ";
+    }
+
+    # 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 "") {
+        $preview_command = $preview_command . " -r \"$candidate_ref\" --criticalsort ";
+    }
+
+    info("");
+    info($preview_command);
+    info("");
+
+    my_system($preview_command);
+
+    #.bsr.preview.yaml
+
+    my $preview_config = "";
+    $preordered_list = "";
+    if (-f ".bsr.preview.yaml") {
+        $preview_config = LoadFile(".bsr.preview.yaml");
+        unlink ".bsr.preview.yaml";
+        if ($preview_config
+            && $preview_config->{preview}
+            && $preview_config->{preview}->{packages}
+            && @{$preview_config->{preview}->{packages}} > 0) {
+            $preordered_list = join ",", @{$preview_config->{preview}->{packages}};
+        } else {
+            $preview_config = "";
+        }
+    } else {
+        $preview_config = "";
+    }
+
+    # Remove depends directory
+    my_system("rm -rf $depends_dir");
 }
 
+sub profiling_report {
+    # Create depends xml file to use in reporting
+    generate_depends_xmlfile();
+
+    # Call BSR
+
+    my $report_command = "bsr report -a $arch --verbose --depsnumbersort ";
+    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 \"$success_logs_path\" ";
+
+    # 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 ";
+    }
+
+    info("");
+    info($report_command);
+    info("");
+
+    my_system($report_command);
+    my_system("mv bsr_profiling_report $localrepo/$dist/$arch/");
+
+}
+
+# MAIN
+
 info("start building packages from: " . $package_path . " ($style)");
 ($_, $start_time) = my_system("date +\"%Y-%m-%d %H:%M %z\"");
 ($_, $gbs_version) = my_system("gbs -V");
@@ -2846,6 +2833,16 @@ if ($noinit == 0 && $incremental == 0) {
 
 info("package dependency resolving ...");
 update_pkgdeps($reverse_on);
+update_pkgrdeps();
+
+generate_depends_xmlfile();
+
+if ($depends) {
+    exit 0;
+}
+
+prepare_preorder_list();
+
 update_pkgddeps();
 
 my @bins = get_binary_list();
@@ -3166,5 +3163,6 @@ while ((threads->list() > 0)) {
 }
 update_repo();
 build_report();
+profiling_report();
 
 exit 0