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,
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;
}
-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;
}
}
-# 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");
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();
}
update_repo();
build_report();
+profiling_report();
exit 0