Option to generate depends only from local repos 83/251283/1
authorHyokeun Jeon <hyokeun.jeon@samsung.com>
Tue, 12 Jan 2021 07:19:01 +0000 (16:19 +0900)
committerHyokeun Jeon <hyokeun.jeon@samsung.com>
Tue, 12 Jan 2021 07:19:01 +0000 (16:19 +0900)
Change-Id: I1e73ab0bc78845cdc35b23543ffad1e144ad5af9

depanneur

index 2be73b05c62dde4b4b37db2971510d5aec32cf06..6e4c861b39e9a6318d10cae2860077ab3d403829 100755 (executable)
--- a/depanneur
+++ b/depanneur
@@ -189,6 +189,7 @@ my $vmkernel = "";
 my $vmswapsize = "";
 my $disable_debuginfo = 0;#disable debuginfo when using build cmd
 my $depends = 0; #depends subcommand to put reverse dependency
+my $depends_local_only = 0; #generate depends xml only from local repos
 my $reverse_off = 0; #disable reverse dependency
 my $reverse_on = 1; #enable reverse dependency
 my $export_only = 0; # only export, not building
@@ -248,6 +249,7 @@ GetOptions (
     "vm-swap=s" => \$vmswapsize,
     "disable-debuginfo" => \$disable_debuginfo,
     "depends" => \$depends,
+    "depends-local-only" => \$depends_local_only,
     "export-only" => \$export_only,
     "tarfile" => \$tarfile,
     );
@@ -1060,6 +1062,29 @@ sub parse_packs {
     return %packs;
 }
 
+sub get_pack_list_from_local_repo {
+    my $rpmdeps = "$order_dir/.repo.cache.local";
+    my %fn;
+    my @local_pack_list = ();
+
+    open(my $fh, '<', "$rpmdeps") || die("$rpmdeps: $!\n");
+
+    while(<$fh>) {
+      chomp;
+      if (/^F:(.*?)-\d+\/\d+\/\d+: (.*)$/) {
+        next if $fn{$1};
+        $fn{$1} = $2;
+        my $pack = $1;
+        $pack =~ /^(.*)\.([^\.]+)$/ or die;
+        my $this_pack_name = $1;
+        my $so = source_of($this_pack_name, \%subptomainp);
+        push(@local_pack_list, $so) if defined $so;
+      }
+    }
+    close $fh;
+    return @local_pack_list;
+}
+
 #---------------------------------------------------------------------
 # Re-read .repo.cache and update information of
 # every package such as requires, provides etc.
@@ -2551,7 +2576,17 @@ sub generate_depends() {
 
     info("parsing package data...");
     my %packs = parse_packs($config, @packs);
-    %to_build = %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.");