81 lines
1.7 KiB
Perl
81 lines
1.7 KiB
Perl
#!/usr/bin/perl --
|
|
use v5.32.0;
|
|
use strict;
|
|
use warnings;
|
|
use Data::Dump qw(dump);
|
|
|
|
sub parentCount{
|
|
my($node) =@_;
|
|
my $c = 0;
|
|
while( $node->{parent} ){
|
|
++$c;
|
|
$node = $node->{parent}
|
|
}
|
|
$c;
|
|
}
|
|
|
|
|
|
my @configs;
|
|
my @stack;
|
|
|
|
open(my $fh, "-|","./gradlew :app:dependencies 2>&1") or die $!;
|
|
while(<$fh>){
|
|
s/[\s\x0d\x0a]+\z//;
|
|
next if not length;
|
|
if( /\A(\S*?Classpath\S*)/ ){
|
|
my $node = {
|
|
name => $1,
|
|
deps => [],
|
|
};
|
|
push @configs,$node;
|
|
@stack = ($node);
|
|
next;
|
|
}elsif( s/\A([\s\|\-\+\\]+)//){
|
|
my $prefixLength = length($1);
|
|
my $name = $_;
|
|
next if not $name;
|
|
next if $prefixLength < 5;
|
|
|
|
splice @stack, $prefixLength/5;
|
|
my $parent = $stack[$#stack];
|
|
|
|
my $node = {
|
|
name => $name,
|
|
deps => [],
|
|
parent => $parent,
|
|
};
|
|
push @stack, $node;
|
|
push @{$parent->{deps}}, $node;
|
|
|
|
# if( $node->{name} =~ /firebase/ ){
|
|
# my $parentCount = parentCount($node);
|
|
# say "$prefixLength $parentCount $node->{name} : parent=$parent->{name}";
|
|
# }
|
|
if( $node->{name} =~ /firebase/ and not $node->{name} =~ /firebase-annotations/ ){
|
|
while($node){
|
|
$node->{mark} = 1;
|
|
$node = $node->{parent};
|
|
}
|
|
}
|
|
}
|
|
}
|
|
close($fh) or die $!;
|
|
|
|
sub showMarked{
|
|
my($node,$indent)=(@_,"");
|
|
return if not $node->{mark};
|
|
say "$indent$node->{name}";
|
|
$indent .= "> ";
|
|
for(@{$node->{deps}}){
|
|
showMarked($_,$indent);
|
|
}
|
|
}
|
|
|
|
for(@configs){
|
|
if( $_->{name} =~ /RuntimeClasspath/
|
|
and not $_->{name} =~ /Test|Debug/
|
|
){
|
|
showMarked($_);
|
|
}
|
|
}
|