Support user-defined build order list, --preordered-list argument. 81/251281/1
authorHyokeun Jeon <hyokeun.jeon@samsung.com>
Tue, 12 Jan 2021 07:12:50 +0000 (16:12 +0900)
committerHyokeun Jeon <hyokeun.jeon@samsung.com>
Tue, 12 Jan 2021 07:12:55 +0000 (16:12 +0900)
Build time can be improved:
 - by queuing the packages which have higher no. of rdepends first.
 - by critical build path first.

Change-Id: Ibe2937ed204dbe9c85dfb9936454b3d4ebffd38f

depanneur

index 2be73b05c62dde4b4b37db2971510d5aec32cf06..4487699c1849209e9deae1792c335aa2fc5f8ee9 100755 (executable)
--- a/depanneur
+++ b/depanneur
@@ -193,6 +193,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 = ""; # List of ordered packages to support user defined build order calculation
+
 GetOptions (
     "repository=s" => \@repos,
     "arch=s" => \$arch,
@@ -250,6 +252,7 @@ GetOptions (
     "depends" => \$depends,
     "export-only" => \$export_only,
     "tarfile" => \$tarfile,
+    "preordered-list=s" => \$preordered_list,
     );
 
 if ( $help ) {
@@ -2927,6 +2930,33 @@ if ($debug) {
         print "\n";
     }
 }
+
+if ($preordered_list ne "") {
+    my @build_order_new = ();
+    my @preordered_bins = ();
+
+    my @items = split(',', $preordered_list);
+    chomp(@items);
+    push @preordered_bins, @items;
+
+    foreach my $p (@preordered_bins) {
+        if ( !(grep $_ eq $p, @build_order_new) &&
+              (grep $_ eq $p, @build_order) ) {
+            push(@build_order_new, $p);
+        }
+    }
+    foreach my $p (@build_order) {
+        if (!(grep $_ eq $p, @build_order_new)) {
+            push(@build_order_new, $p);
+        }
+    }
+
+    if (scalar @build_order == scalar @build_order_new) {
+        info("Re-define order... (" . scalar @build_order . ")");
+        @build_order = @build_order_new;
+    }
+}
+
 # Main process loop
 # Every loop, first update package information
 # include dependencies if there is new package