Subversion Repositories DevTools

Rev

Rev 227 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
227 dpurdie 1
#!/usr/local/bin/perl -w
2
 
3
use DeployUtils::RmPkgInfo;
4
use DeployUtils::Logger;
5
use Getopt::Std;
6
 
7
our ( $opt_h, $opt_d, $opt_n, $opt_v, $opt_p, $opt_r, $opt_c );
8
 
9
my $Rm;
10
my %PkgInfo;
11
my $maxLevel = 0;
12
 
13
getopts('hd:n:v:pr:c');
14
 
15
if ( defined($opt_h) || ! defined($opt_r) )
16
{
17
    print "Must Supply -r along with (-n & -v) or -p\n";
18
    exit;
19
}
20
 
21
setLogLevel($opt_d) if ( defined($opt_d) );
22
 
23
if ( defined($opt_p) )
24
{
25
    foreach my $pvid ( @ARGV )
26
    {
27
        walktree($opt_n, $opt_v, $pvid, $opt_r, 0);
28
    }
29
}
30
else
31
{
32
    walktree($opt_n, $opt_v, $opt_p, $opt_r, 0);
33
}
34
 
35
if ( defined($opt_c) )
36
{ 
37
    for( my $level = 0; $level <= $maxLevel; $level++ )
38
    {
39
        foreach my $i ( keys %PkgInfo )
40
        {
41
            if ( $PkgInfo{$i} == $level )
42
            {
43
                printf("%d %s%s\n", $level, " " x ($level*4), $i );
44
            }
45
        }
46
    }
47
}
48
 
49
 
50
 
51
 
52
sub walktree
53
{
54
    my ( $name, $ver, $pvid, $rtag, $level ) = @_;
55
    my $debugLine = "";
56
    my $pkgName;
57
 
58
    $debugLine .= "Name[$name] " if ( defined($name) );
59
    $debugLine .= "Version[$ver] " if ( defined($ver) );
60
    $debugLine .= "PvId[$pvid] " if ( defined($pvid) );
61
    $debugLine .= "RtagId[$rtag] " if ( defined($rtag) );
62
    $debugLine .= "Level[$level] " if ( defined($level) );
63
 
64
    $maxLevel = $level if ( $level > $maxLevel );
65
 
66
    LogDebug("WalkTree: Looking for $debugLine");
67
    $Rm = DeployUtils::RmPkgInfo->new({ PKG_NAME => $name, PKG_VERSION => $ver, PV_ID => $pvid, RTAG_ID => $rtag });
68
    if ( $Rm->foundDetails() )
69
    {
70
        $pkgName = $Rm->pkg_name();
71
        LogDebug("WalkTree: Found Pkg Details [$pkgName], getting RtDeps");
72
        # if opt_c then we are doing a consise list so lets populate hash
73
        if ( defined($opt_c) )
74
        {
75
            if ( defined( $PkgInfo{$pkgName} ) && $level <= $PkgInfo{$pkgName} )
76
            {
77
                LogDebug("WalkTree: Tree Rooted at [$pkgName] already seen at lower level [$PkgInfo{$pkgName}], pruning tree");
78
                return;
79
            }
80
            elsif ( defined( $PkgInfo{$pkgName} ) && $level > $PkgInfo{$pkgName} )
81
            {
82
                LogDebug("WalkTree: Moving [$pkgName] to a higher level [$PkgInfo{$pkgName}] to [$level]");
83
            }
84
            $PkgInfo{$pkgName} = $level;
85
        }
86
        # else just print current item at the current level
87
        else
88
        {
89
            printf("%d %s%s\n", $level, " " x ($level*4), $pkgName );
90
        }
91
 
92
        $Rm->getRtDeps();
93
        if ( $Rm->foundRtDeps() )
94
        {
95
            foreach my $rtDep ( $Rm->getRtDepNames() )
96
            {
97
                LogDebug("WalkTree: Walking  [$pkgName]:[$rtDep]");
98
                # Get details for the next rt dep using rtag to find latest version
99
                walktree($rtDep, undef, undef, $rtag, $level + 1);
100
            }
101
        }
102
        else
103
        {
104
            LogWarn("WalkTree:  Unable to find RunTime Details for $debugLine");
105
        }
106
    }
107
    else
108
    {
109
        LogWarn("WalkTree:  Unable to find Details for $debugLine");
110
    }
111
}
112
 
113