Subversion Repositories DevTools

Rev

Rev 229 | Rev 235 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 229 Rev 233
Line 40... Line 40...
40
my $opt_sbom_id;
40
my $opt_sbom_id;
41
my $opt_rtag_id;
41
my $opt_rtag_id;
42
my $opt_test = 0;
42
my $opt_test = 0;
43
my $opt_patch = 1;
43
my $opt_patch = 1;
44
my $opt_extract;
44
my $opt_extract;
-
 
45
my $opt_rootpkg;
45
 
46
 
46
#
47
#
47
#   Data Base Interface
48
#   Data Base Interface
48
#
49
#
49
my $RM_DB;
50
my $RM_DB;
Line 111... Line 112...
111
                "help+"         => \$opt_help,              # flag, multiple use allowed
112
                "help+"         => \$opt_help,              # flag, multiple use allowed
112
                "manual"        => \$opt_manual,            # flag
113
                "manual"        => \$opt_manual,            # flag
113
                "verbose+"      => \$opt_verbose,           # flag
114
                "verbose+"      => \$opt_verbose,           # flag
114
                "sbomid=s"      => \$opt_sbom_id,           # string
115
                "sbomid=s"      => \$opt_sbom_id,           # string
115
                "rtagid=s"      => \$opt_rtag_id,           # string
116
                "rtagid=s"      => \$opt_rtag_id,           # string
-
 
117
                "rootpackage=s" => \$opt_rootpkg,           # String
116
                "ignore=s",     => sub{my ($a,$i) = @_; $ignore{$i} = 0 },
118
                "ignore=s",     => sub{my ($a,$i) = @_; $ignore{$i} = 0 },
117
                "test!"         => \$opt_test,              #[no]flag
119
                "test!"         => \$opt_test,              #[no]flag
118
                "patch!"        => \$opt_patch,             #[no]flag
120
                "patch!"        => \$opt_patch,             #[no]flag
119
                "extract=s"     => \$opt_extract,           # Name of file
121
                "extract=s"     => \$opt_extract,           # Name of file
120
                );
122
                );
Line 136... Line 138...
136
{
138
{
137
    Error ("Need sbomid and/or rtagid, or -extract",
139
    Error ("Need sbomid and/or rtagid, or -extract",
138
           "Example: -sbomid=13543, for NZS Phase-1",
140
           "Example: -sbomid=13543, for NZS Phase-1",
139
           "Example: -sbomid=13543 -rtagid=xxxx, for NZS Phase-1, comapred against given release",
141
           "Example: -sbomid=13543 -rtagid=xxxx, for NZS Phase-1, comapred against given release",
140
           "Example: -rtagid=2362, for Sydney R1/R2",
142
           "Example: -rtagid=2362, for Sydney R1/R2",
-
 
143
           "Example: -rtagid=8384 -root=StockholmSBOM",
-
 
144
 
141
    )
145
    )
142
}
146
}
143
 
147
 
144
#
148
#
145
#   The extract option is special
149
#   The extract option is special
Line 189... Line 193...
189
    foreach my $os_id ( sort keys %os_id_list )
193
    foreach my $os_id ( sort keys %os_id_list )
190
    {
194
    {
191
        getPackages_by_osid( $os_id );
195
        getPackages_by_osid( $os_id );
192
    }
196
    }
193
 
197
 
194
 
-
 
195
    #
198
    #
196
    #   For each Top Level Package determine the dependent packages
199
    #   For each Top Level Package determine the dependent packages
197
    #
200
    #
198
    foreach my $pv_id ( keys %pv_id )
201
    foreach my $pv_id ( keys %pv_id )
199
    {
202
    {
Line 210... Line 213...
210
    }
213
    }
211
}
214
}
212
else
215
else
213
{
216
{
214
    getPkgDetailsByRTAG_ID( $opt_rtag_id );
217
    getPkgDetailsByRTAG_ID( $opt_rtag_id );
215
my $count = 0;
-
 
216
    foreach my $pv_id ( keys %Release_pvid )
218
    if ( $opt_rootpkg )
217
    {
219
    {
-
 
220
        #
-
 
221
        #   Base the report on a single package in a release
218
next if ( $opt_test && ++$count > 2 );
222
        #   Determine the package
-
 
223
        #
-
 
224
        Error ("Root Package not found: $opt_rootpkg") unless ( exists $Release{$opt_rootpkg} );
-
 
225
        my @root_vers = keys %{$Release{$opt_rootpkg}};
-
 
226
        Error ("Multiple versions of Root Package: $opt_rootpkg", @root_vers ) if ( $#root_vers > 0 );
-
 
227
        Message("Root Package: $opt_rootpkg, " . $root_vers[0]);
-
 
228
 
219
        getPkgDetailsByPV_ID( $pv_id);
229
        getPkgDetailsByPV_ID( $Release{$opt_rootpkg}{$root_vers[0]}{pv_id} );
220
    }
230
    }
-
 
231
    else
-
 
232
    {
-
 
233
my $count = 0;
-
 
234
        foreach my $pv_id ( keys %Release_pvid )
-
 
235
        {
-
 
236
            next if ( $opt_test && ++$count > 2 );
-
 
237
            getPkgDetailsByPV_ID( $pv_id);
-
 
238
        }
-
 
239
    }
221
    LocateStrays();
240
    LocateStrays(1);
222
}
241
}
223
 
242
 
224
 
243
 
225
#
244
#
226
#   Remove packages to be ignored
245
#   Remove packages to be ignored
Line 289... Line 308...
289
        {
308
        {
290
            my $vname = "$name $ver";
309
            my $vname = "$name $ver";
291
            $vname =~ s~ ~_~g;
310
            $vname =~ s~ ~_~g;
292
            $vname =~ s~__~~g;
311
            $vname =~ s~__~~g;
293
 
312
 
294
            print JE "jats extract -extractfiles -view=$vname -label=$label -path=$path -root=. -noprefix\n";
313
            print JE "jats extract -extractfiles -view=$vname -label=$label -path=\"$path\" -root=. -noprefix\n";
295
        }
314
        }
296
 
315
 
297
        if ( @reason1 || @reason2 )
316
        if ( @reason1 || @reason2 )
298
        {
317
        {
299
            $Package{$name}{$ver}{bad_extract} = [@reason1, @reason2];
318
            $Package{$name}{$ver}{bad_extract} = [@reason1, @reason2];
Line 339... Line 358...
339
sub getOSIDforBOMID
358
sub getOSIDforBOMID
340
{
359
{
341
    my ($bom_id) = @_;
360
    my ($bom_id) = @_;
342
    my $foundDetails = 0;
361
    my $foundDetails = 0;
343
    my (@row);
362
    my (@row);
344
 
-
 
-
 
363
Verbose ("getOSIDforBOMID");
345
    connectDM(\$DM_DB) unless ($DM_DB);
364
    connectDM(\$DM_DB) unless ($DM_DB);
346
 
365
 
347
    my $m_sqlstr = "SELECT distinct os.OS_ID, os.OS_NAME, nn.NODE_NAME, obe.BASE_ENV_ID " .
366
    my $m_sqlstr = "SELECT distinct os.OS_ID, os.OS_NAME, nn.NODE_NAME, obe.BASE_ENV_ID " .
348
                   " FROM OPERATING_SYSTEMS os, BOM_CONTENTS bc, NETWORK_NODES nn, OS_BASE_ENV obe" .
367
                   " FROM OPERATING_SYSTEMS os, BOM_CONTENTS bc, NETWORK_NODES nn, OS_BASE_ENV obe" .
349
                   " WHERE bc.BOM_ID = $bom_id AND bc.NODE_ID = os.NODE_ID AND nn.NODE_ID = os.NODE_ID AND obe.OS_ID = os.OS_ID ";
368
                   " WHERE bc.BOM_ID = $bom_id AND bc.NODE_ID = os.NODE_ID AND nn.NODE_ID = os.NODE_ID AND obe.OS_ID = os.OS_ID ";
Line 361... Line 380...
361
                    $os_id_list{$row[0]}{os_name} = $row[1];
380
                    $os_id_list{$row[0]}{os_name} = $row[1];
362
                    $os_id_list{$row[0]}{node_name} = $row[2];
381
                    $os_id_list{$row[0]}{node_name} = $row[2];
363
 
382
 
364
                    $os_env_list{$row[3]}{needed} = 1;
383
                    $os_env_list{$row[3]}{needed} = 1;
365
                    $os_env_list{$row[3]}{os_id}{$row[0]} = 1;
384
                    $os_env_list{$row[3]}{os_id}{$row[0]} = 1;
-
 
385
 
-
 
386
                    $foundDetails = 1;
366
                }
387
                }
367
            }
388
            }
368
            $sth->finish();
389
            $sth->finish();
369
        }
390
        }
-
 
391
        else
-
 
392
        {
-
 
393
            Error("getOSIDforBOMID:Execute failure" );
-
 
394
        }
370
    }
395
    }
371
    else
396
    else
372
    {
397
    {
373
        Error("getOSIDforBOMID:Prepare failure" );
398
        Error("getOSIDforBOMID:Prepare failure" );
374
    }
399
    }
-
 
400
 
-
 
401
    Error("getOSIDforBOMID:No OS Information Found" ) unless $foundDetails;
-
 
402
    
375
}
403
}
376
 
404
 
377
#-------------------------------------------------------------------------------
405
#-------------------------------------------------------------------------------
378
# Function        : getPackagesforBaseInstall
406
# Function        : getPackagesforBaseInstall
379
#
407
#
Line 661... Line 689...
661
}
689
}
662
 
690
 
663
#-------------------------------------------------------------------------------
691
#-------------------------------------------------------------------------------
664
# Function        : getPkgDetailsByRTAG_ID
692
# Function        : getPkgDetailsByRTAG_ID
665
#
693
#
666
# Description     : Extarct all the packages for a given rtag_id
694
# Description     : Extract all the packages for a given rtag_id
667
#
695
#
668
# Inputs          : RTAG_ID
696
# Inputs          : RTAG_ID
669
#
697
#
670
# Returns         : 
698
# Returns         : 
671
#
699
#
672
 
700
 
673
sub getPkgDetailsByRTAG_ID
701
sub getPkgDetailsByRTAG_ID
674
{
702
{
675
    my ($RTAG_ID) =@_;
703
    my ($RTAG_ID) = @_;
676
    my $foundDetails = 0;
704
    my $foundDetails = 0;
677
    my (@row);
705
    my (@row);
678
 
706
 
679
    connectRM(\$RM_DB);
707
    connectRM(\$RM_DB);
680
 
708
 
Line 722... Line 750...
722
#
750
#
723
# Returns         :
751
# Returns         :
724
#
752
#
725
sub LocateStrays
753
sub LocateStrays
726
{
754
{
-
 
755
    my ($mode) = @_;
727
    while ( $#StrayPackages >= 0 )
756
    while ( $#StrayPackages >= 0 )
728
    {
757
    {
729
        my $DATA = pop @StrayPackages;
758
        my $DATA = pop @StrayPackages;
730
        my $name = $DATA->[0];
759
        my $name = $DATA->[0];
731
        my $ver = $DATA->[1];
760
        my $ver = $DATA->[1];
732
        my $pv_id = $DATA->[2];
761
        my $pv_id = $DATA->[2];
733
 
762
 
734
        next if ( exists $Package{$name}{$ver}{done} );
763
        next if ( exists $Package{$name}{$ver}{done} );
735
#print "Stray: $pv_id, $name, $ver\n";
-
 
736
        getPkgDetailsByPV_ID ( $pv_id );
764
        getPkgDetailsByPV_ID ( $pv_id );
-
 
765
        if ( $mode )
-
 
766
        {
-
 
767
            next if ( exists $Release{$name}{$ver} );
-
 
768
        }
737
        $Package{$name}{$ver}{stray} = 1;
769
        $Package{$name}{$ver}{stray} = 1;
-
 
770
#print "Stray: $pv_id, $name, $ver\n";
738
    }
771
    }
739
}
772
}
740
 
773
 
741
#-------------------------------------------------------------------------------
774
#-------------------------------------------------------------------------------
742
# Function        : BuildOrder
775
# Function        : BuildOrder
Line 874... Line 907...
874
    #
907
    #
875
    print DP "<dl><dt><h1>Index</h1></dt>\n";
908
    print DP "<dl><dt><h1>Index</h1></dt>\n";
876
    print DP "<dd><a href=\"#Ignore\">Ignored Packages</a></dd>\n";
909
    print DP "<dd><a href=\"#Ignore\">Ignored Packages</a></dd>\n";
877
    print DP "<dd><a href=\"#Depend\">Dependency Info</a></dd>\n";
910
    print DP "<dd><a href=\"#Depend\">Dependency Info</a></dd>\n";
878
    print DP "<dd><a href=\"#Multi\">Multiple Package Version</a></dd>\n";
911
    print DP "<dd><a href=\"#Multi\">Multiple Package Version</a></dd>\n";
-
 
912
    print DP "<dd><a href=\"#Leaf\">Packages that have no parents</a></dd>\n";
879
    print DP "<dd><a href=\"#NoBuild\">Packages that cannot be built</a></dd>\n";
913
    print DP "<dd><a href=\"#NoBuild\">Packages that cannot be built</a></dd>\n";
880
    print DP "<dd><a href=\"#Excess\">Excess Packages from Release: $opt_rtag_id</a></dd>\n" if ( $opt_rtag_id && $opt_sbom_id );
914
    print DP "<dd><a href=\"#Excess\">Excess Packages from Release: $opt_rtag_id</a></dd>\n" if ( $opt_rtag_id && $opt_sbom_id );
881
    print DP "<dd><a href=\"#Stray\">Required Packages, not part of the release</a></dd>\n" if ( $opt_rtag_id && !$opt_sbom_id );
915
    print DP "<dd><a href=\"#Stray\">Required Packages, not part of the release</a></dd>\n" if ( $opt_rtag_id && !$opt_sbom_id );
882
    print DP "<dd><a href=\"#Inconsistent\">Packages in the Release, with inconsistent dependencies</a></dd>\n" if ( $opt_rtag_id && !$opt_sbom_id );
916
    print DP "<dd><a href=\"#Inconsistent\">Packages in the Release, with inconsistent dependencies</a></dd>\n" if ( $opt_rtag_id && !$opt_sbom_id );
883
 
917
 
Line 963... Line 997...
963
            my $stray = ( exists ($Package{$name}{$ver}{stray}) && $Package{$name}{$ver}{stray} );
997
            my $stray = ( exists ($Package{$name}{$ver}{stray}) && $Package{$name}{$ver}{stray} );
964
 
998
 
965
            my $pv_id = $Package{$name}{$ver}{pvid} || 'No PVID';
999
            my $pv_id = $Package{$name}{$ver}{pvid} || 'No PVID';
966
            my $pv_id_ref = $rm_base . $pv_id;
1000
            my $pv_id_ref = $rm_base . $pv_id;
967
               $pv_id_ref .= "&rtag_id=" . $opt_rtag_id if ($opt_rtag_id && !$stray);
1001
               $pv_id_ref .= "&rtag_id=" . $opt_rtag_id if ($opt_rtag_id && !$stray);
968
            my $pv_id_str = "<a href=\"$pv_id_ref\">$pv_id</a>";
1002
            my $pv_id_str = "<a href=\"$pv_id_ref\" TARGET=\"_blank\">$pv_id</a>";
969
 
1003
 
970
            printf DP "<tr>${tdr}Pvid:</td><td>%s</td></tr>\n", $pv_id_str;
1004
            printf DP "<tr>${tdr}Pvid:</td><td>%s</td></tr>\n", $pv_id_str;
971
            printf DP "<tr>${tdr}Label:</td><td>%s</td></tr>\n", $Package{$name}{$ver}{label} || 'NoneProvided';
1005
            printf DP "<tr>${tdr}Label:</td><td>%s</td></tr>\n", $Package{$name}{$ver}{label} || 'NoneProvided';
972
            printf DP "<tr>${tdr}Path:</td><td>%s</td></tr>\n", $Package{$name}{$ver}{path}  || 'NoneProvided';
1006
            printf DP "<tr>${tdr}Path:</td><td>%s</td></tr>\n", $Package{$name}{$ver}{path}  || 'NoneProvided';
973
 
1007
 
Line 1060... Line 1094...
1060
    }
1094
    }
1061
    print DP "</tbody></table>\n";
1095
    print DP "</tbody></table>\n";
1062
 
1096
 
1063
 
1097
 
1064
    #
1098
    #
-
 
1099
    #   Leaf Packages
-
 
1100
    #
-
 
1101
    print DP "<h1><a name=\"Leaf\">Packages that have no parents</a></h1>\n";
-
 
1102
    print DP "<table border=\"1\"><tbody>\n";
-
 
1103
    print DP "<tr>\n";
-
 
1104
    print DP "<th>Leaf Packages</th>\n";
-
 
1105
    print DP "</tr>\n";
-
 
1106
 
-
 
1107
    foreach my $name ( sort keys %Package )
-
 
1108
    {
-
 
1109
        foreach my $ver ( sort keys %{$Package{$name}} )
-
 
1110
        {
-
 
1111
            my @usedby = keys %{$Package{$name}{$ver}{usedby}};
-
 
1112
            next if ( @usedby );
-
 
1113
 
-
 
1114
            print DP "<tr>\n";
-
 
1115
            print DP $td;
-
 
1116
 
-
 
1117
            my $tag = "${name}_${ver}";
-
 
1118
 
-
 
1119
            printf  DP "<dt><a href=\"#$tag\">%s&nbsp;%s</a>\n", $name, $ver;
-
 
1120
 
-
 
1121
            print DP "</td>\n";
-
 
1122
            print DP "</tr>\n";
-
 
1123
        }
-
 
1124
    }
-
 
1125
    print DP "</tbody></table>\n";
-
 
1126
 
-
 
1127
 
-
 
1128
 
-
 
1129
    #
1065
    #   Packages that cannot be built
1130
    #   Packages that cannot be built
1066
    #
1131
    #
1067
    print DP "<h1><a name=\"NoBuild\">Packages that cannot be built</a></h1>\n";
1132
    print DP "<h1><a name=\"NoBuild\">Packages that cannot be built</a></h1>\n";
1068
    print DP "<table border=\"1\"><tbody>\n";
1133
    print DP "<table border=\"1\"><tbody>\n";
1069
    print DP "<tr>\n";
1134
    print DP "<tr>\n";
1070
    print DP "<th>Not Built</th>\n";
1135
    print DP "<th>Not Built</th>\n";
1071
    print DP "</tr>\n";
1136
    print DP "</tr>\n";
-
 
1137
    my $no_build_count = 0;
1072
 
1138
 
1073
    foreach my $name ( sort keys %Package )
1139
    foreach my $name ( sort keys %Package )
1074
    {
1140
    {
1075
        my @versions = keys %{$Package{$name}};
1141
        my @versions = keys %{$Package{$name}};
1076
        foreach my $ver ( sort @versions )
1142
        foreach my $ver ( sort @versions )
1077
        {
1143
        {
1078
            next unless exists($Package{$name}{$ver}{bad_extract});
1144
            next unless exists($Package{$name}{$ver}{bad_extract});
-
 
1145
            $no_build_count++;
1079
            my @reasons = @{$Package{$name}{$ver}{bad_extract}};
1146
            my @reasons = @{$Package{$name}{$ver}{bad_extract}};
1080
 
1147
 
1081
            print DP "<tr><dl>\n";
1148
            print DP "<tr><dl>\n";
1082
            print DP $td;
1149
            print DP $td;
1083
 
1150
 
Line 1095... Line 1162...
1095
            print DP "</td>\n";
1162
            print DP "</td>\n";
1096
            print DP "</tr>\n";
1163
            print DP "</tr>\n";
1097
            
1164
            
1098
        }
1165
        }
1099
    }
1166
    }
-
 
1167
    print DP "<tr>\n";
-
 
1168
    print DP "<th>Total Count: $no_build_count</th>\n";
-
 
1169
    print DP "</tr>\n";
-
 
1170
 
1100
    print DP "</tbody></table>\n";
1171
    print DP "</tbody></table>\n";
1101
 
1172
 
1102
    #
1173
    #
1103
    #   Packages that are in a specified release, but not described by the SBOM
1174
    #   Packages that are in a specified release, but not described by the SBOM
1104
    #
1175
    #
Line 1133... Line 1204...
1133
                print DP "<tr>\n";
1204
                print DP "<tr>\n";
1134
                print DP $td;
1205
                print DP $td;
1135
 
1206
 
1136
                my $pv_id = $Release{$name}{$ver}{pv_id} || 'No PVID';
1207
                my $pv_id = $Release{$name}{$ver}{pv_id} || 'No PVID';
1137
                my $pv_id_ref = $rm_base . $pv_id . "&rtag_id=" . $opt_rtag_id;
1208
                my $pv_id_ref = $rm_base . $pv_id . "&rtag_id=" . $opt_rtag_id;
1138
                my $pv_id_str = "<a href=\"$pv_id_ref\">$pv_id</a>";
1209
                my $pv_id_str = "<a href=\"$pv_id_ref\" TARGET=\"_blank\">$pv_id</a>";
1139
 
1210
 
1140
                printf  DP "$name $ver ", $name, $ver;
1211
                printf  DP "$name $ver ", $name, $ver;
1141
                print DP "</td>\n";
1212
                print DP "</td>\n";
1142
 
1213
 
1143
                print DP $td;
1214
                print DP $td;
Line 1242... Line 1313...
1242
 
1313
 
1243
 
1314
 
1244
                my $pv_id = $Package{$name}{$ver}{pvid} || 'No PVID';
1315
                my $pv_id = $Package{$name}{$ver}{pvid} || 'No PVID';
1245
 
1316
 
1246
                my $pv_id_ref = $rm_base . $pv_id;
1317
                my $pv_id_ref = $rm_base . $pv_id;
1247
                my $pv_id_str = "<a href=\"$pv_id_ref\">$pv_id</a>";
1318
                my $pv_id_str = "<a href=\"$pv_id_ref\" TARGET=\"_blank\">$pv_id</a>";
1248
 
1319
 
1249
                print DP $td;
1320
                print DP $td;
1250
                printf DP "Pvid: %s\n", $pv_id_str;
1321
                printf DP "Pvid: %s\n", $pv_id_str;
1251
                print DP "</td>\n";
1322
                print DP "</td>\n";
1252
 
1323
 
Line 1381... Line 1452...
1381
                $view = $1;
1452
                $view = $1;
1382
            } elsif ( m~^-label=(.+)~ ) {
1453
            } elsif ( m~^-label=(.+)~ ) {
1383
                $label = $1;
1454
                $label = $1;
1384
            } elsif ( m~^-path=(.+)~ ) {
1455
            } elsif ( m~^-path=(.+)~ ) {
1385
                $path = $1;
1456
                $path = $1;
-
 
1457
                $path =~ s~\"~~g
1386
            }
1458
            }
1387
        }
1459
        }
1388
 
1460
 
1389
        Error "Duplicate view name: $view" if ( exists $extract{$view} );
1461
        Error "Duplicate view name: $view" if ( exists $extract{$view} );
1390
        Error "Bad file format in line: $_" unless ( $view && $label );
1462
        Error "Bad file format in line: $_" unless ( $view && $label );