Subversion Repositories DevTools

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
392 dpurdie 1
########################################################################
2
# Copyright (C) 1998-2012 Vix Technology, All rights reserved
3
#
4
# Module name   : cc2svn_procdata.pl
5
# Module type   : Makefile system
6
# Compiler(s)   : Perl
7
# Environment(s): jats
8
#
9
# Description   : Get all packages that are used in all releases
10
#                 Post process data collected in 23a
11
#
12
#
13
#......................................................................#
14
 
15
require 5.006_001;
16
use strict;
17
use warnings;
18
use JatsError;
19
use JatsEnv;
20
use JatsSystem;
21
use Getopt::Long;
22
use Pod::Usage;                             # required for help support
23
use JatsRmApi;
24
use ConfigurationFile;
25
use HTML::Table;
1270 dpurdie 26
use JatsSvn;
392 dpurdie 27
 
28
use DBI;
29
our $GBE_RM_URL;
395 dpurdie 30
our $GBE_DM_URL;
392 dpurdie 31
 
32
my $VERSION = "1.2.3";                      # Update this
33
my $opt_verbose = 1;
34
my $opt_help = 0;
35
my $opt_manual;
36
my $opt_usedby;
37
my $opt_allpackages;
38
 
39
#
40
#   Package information
41
#
42
our %ScmReleases;
43
our %ScmPackages;
2450 dpurdie 44
our %ScmPkgNames;
392 dpurdie 45
our %ScmSuffixes;
46
our %ScmAllPackages;
395 dpurdie 47
our %ScmAllBomProjects;
48
our %ScmSboms;
2450 dpurdie 49
our %Protected;
392 dpurdie 50
 
2429 dpurdie 51
################################################################################
52
#   Data structure to help create links in all the files
53
#       BadVcs_$pvid
54
#       Repo_$repo
55
#       Package_$name
56
#
57
my $currentSection;
58
my %htmlData = (
59
    S0 =>  {file => 'PackageConversion.html'                  , title => 'Master Index'                     , tag => '', 'noHeader' => 0 },
60
    S1 =>  {file => 'PackageConversion_IR.html'               , title => 'Inlcuded Releases'                , tag => '' },
61
    S2 =>  {file => 'PackageConversion_ER.html'               , title => 'Excluded Releases'                , tag => '' },
62
    S3 =>  {file => 'PackageConversion_PkgIndex.html'         , title => 'Complete Package Index'           , tag => '' },
63
    S4 =>  {file => 'PackageConversion_PkgDetails.html'       , title => 'Package Conversion Details'       , tag => 'Package' },
64
    S5 =>  {file => 'PackageConversion_BadVersions.html'      , title => 'Bad Package Versions'             , tag => 'BadVcs' },
65
    S6 =>  {file => 'PackageConversion_BadVersionsPrj.html'   , title => 'Bad Package Versions By Project'  , tag => '' },
66
    S7 =>  {file => 'PackageConversion_MultiplePackages.html' , title => 'MultiplePackages'                 , tag => '' },
67
    S8 =>  {file => 'PackageConversion_RepoIndex.html'        , title => 'Repository Index'                 , tag => '' },
68
    S9 =>  {file => 'PackageConversion_RepoMap.html'          , title => 'Repository Mapping'               , tag => 'Repo' },
69
    SA =>  {file => 'PackageConversion_unMapped.html'         , title => 'Unmapped Packages'                , tag => '' },
70
    SB =>  {file => 'PackageConversion_SvnPkgs.html'          , title => 'Packages in Subversion'           , tag => '' },
2450 dpurdie 71
    SC =>  {file => 'PackageConversion_Issues.html'           , title => 'Packages with known issues'       , tag => '' },
2429 dpurdie 72
);
392 dpurdie 73
 
74
#-------------------------------------------------------------------------------
75
# Function        : Main Entry
76
#
77
# Description     :
78
#
79
# Inputs          :
80
#
81
# Returns         :
82
#
83
my $result = GetOptions (
84
                "help+"         => \$opt_help,          # flag, multiple use allowed
85
                "manual"        => \$opt_manual,        # flag
86
                "verbose+"      => \$opt_verbose,       # flag
87
                "usedby:s"      => \$opt_usedby,        # pvid used by which releases
88
                'allpackages+'  => \$opt_allpackages
89
                );
90
 
91
#
92
#   Process help and manual options
93
#
94
pod2usage(-verbose => 0, -message => "Version: $VERSION")  if ($opt_help == 1  || ! $result);
95
pod2usage(-verbose => 1)  if ($opt_help == 2 );
96
pod2usage(-verbose => 2)  if ($opt_manual || ($opt_help > 2));
97
 
98
 
99
ErrorConfig( 'name'    =>'CC2SVN_PROCDATA' );
404 dpurdie 100
readInputData();
392 dpurdie 101
 
102
#
103
#   Report Releases that use a package
104
#
105
if ( $opt_usedby )
106
{
107
    foreach my $pvid ($opt_usedby , @ARGV )
108
    {
109
        my ($releases, $ireleases) = usedBy($pvid);
110
        my (@text, @itext);
111
 
396 dpurdie 112
        foreach ( sort {$ScmReleases{$a}{name} cmp $ScmReleases{$b}{name} } @$releases )
392 dpurdie 113
        {
114
            push @text, "$ScmReleases{$_}{pName} :: $ScmReleases{$_}{name}";
115
        }
116
 
117
        foreach ( @$ireleases )
118
        {
119
            push @text, "$ScmReleases{$_}{pName} :: $ScmReleases{$_}{name}";
120
        }
121
 
122
        unshift @text  ,"Used Directly by:" if ( @text );
123
        unshift @itext ,"Used Indirectly by:" if ( @itext );
124
        Message("Package: $ScmPackages{$pvid}{'name'} Version: $ScmPackages{$pvid}{'version'}", @text, @itext);
125
    }
126
    exit 0;
127
}
128
 
129
##
130
##   Generate a list of essential package-versions
131
##
132
#{
133
#    my $file = "EssentialPackages.txt";
134
#    my $count = 0;
135
#    Message("Create Essential Package List", $file);
136
#    open ( my $fh, '>', $file ) || Error ("Cannot open $file", "Error: $!");
137
#    foreach ( sort { $a <=> $b } keys %ScmPackages )
138
#    {
139
#        print $fh "$_\n";
140
#        $count++;
141
#    }
142
#    close $fh;
143
#    Message("Essential Packages: $count");
144
#}
145
 
146
#
147
#   Attempt to classify each package
148
#   Create a structure for each package
149
#
150
my %PackageSet;
151
my %PackageData;
152
my %Views;
153
my %Vobs;
1341 dpurdie 154
my %ReleasePackages;
155
 
392 dpurdie 156
getBadLabelData();
2450 dpurdie 157
getProtectedPackages();
392 dpurdie 158
 
159
#
160
#   Remove packages that we don't need
161
#
162
my $deleteCount = keys %ScmPackages;
163
unless ( $opt_allpackages )
164
{
165
    foreach ( keys %ScmPackages )
166
    {
167
        next if ( $ScmPackages{$_}{NamedProject} );
168
        delete $ScmPackages{$_};
169
    }
170
}
171
 
172
Message ("Create Package Sets");
394 dpurdie 173
my $badCount = 0;
392 dpurdie 174
foreach ( keys %ScmPackages )
175
{
176
    my $pkgid = $ScmPackages{$_}{pkgid};
394 dpurdie 177
    unless ( $pkgid )
178
    {
179
        $badCount++;
180
        next;
181
    }
182
 
392 dpurdie 183
    push @{$PackageSet{$pkgid}}, $_;
2450 dpurdie 184
    $ScmPkgNames{$ScmPackages{$_}{name}} = $pkgid;
392 dpurdie 185
 
186
    my ($vob, $path) = extractVob($_);
187
    if ($vob)
188
    {
394 dpurdie 189
        next if ( $ScmPackages{$_}{BadVob} );
392 dpurdie 190
        $Vobs{$vob}++;
191
        push @{$PackageData{$pkgid}{vobs}{$vob}}, $_ ;
192
        push @{$PackageData{$pkgid}{vobPath}{$path}}, $_  if ($path);
395 dpurdie 193
        $PackageData{$pkgid}{vobResolver}{$vob} = $path;
2764 dpurdie 194
 
195
        if ( $vob eq 'SVN' )
196
        {
197
            delete $ScmPackages{$_}{BadCCView} ;
198
        }
392 dpurdie 199
    }
200
 
201
    my $view = $ScmPackages{$_}{view};
202
    if ( $view )
203
    {
204
        foreach my $v ( keys %{$view} )
205
        {
206
            my $saneName = $v;
207
            $saneName = 'PRODUCTS' if ( $v eq 'AUTO_PRODUCTS' );
208
            $saneName = 'COTS' if ( $v eq '3RDPARTY_PRODUCTS' );
209
            next if ( $v eq 'MISC' );
210
            $Views{$saneName}++;
211
            $PackageData{$pkgid}{view}{$saneName} += $view->{$v};
212
        }
213
    }
214
 
215
    #
216
    #   Find youngest package
2429 dpurdie 217
    #       - Most recently modified
218
    #       - Not a ripple
219
    #       - Not created by buildadm (3768)
392 dpurdie 220
    #
221
    if ( (! exists $PackageData{$pkgid}{youngAge} ) || ( $ScmPackages{$_}{Age} < $PackageData{$pkgid}{youngAge} ) )
222
    {
223
        $PackageData{$pkgid}{youngAge} = $ScmPackages{$_}{Age};
224
    }
2429 dpurdie 225
 
392 dpurdie 226
    if ( (! exists $PackageData{$pkgid}{youngAgeNonRipple} ) || ( $ScmPackages{$_}{Age} < $PackageData{$pkgid}{youngAgeNonRipple} ) )
227
    {
228
        unless ( $ScmPackages{$_}{isaRipple} )
229
        {
230
            $PackageData{$pkgid}{youngAgeNonRipple} = $ScmPackages{$_}{Age};
231
        }
232
    }
233
 
2429 dpurdie 234
    if ( (! exists $PackageData{$pkgid}{nonBuildadm} ) || ( $ScmPackages{$_}{Age} < $PackageData{$pkgid}{nonBuildadm} ) )
235
    {
236
        unless ( $ScmPackages{$_}{Creator} == '3768' )
237
        {
238
            $PackageData{$pkgid}{nonBuildadm} = $ScmPackages{$_}{Age};
239
        }
240
    }
241
 
242
 
1341 dpurdie 243
    $PackageData{$pkgid}{name} = $ScmPackages{$_}{name} ;
392 dpurdie 244
 
1341 dpurdie 245
    #
246
    #   Accumulate Release data
247
    #
248
    my $mname = $ScmPackages{$_}{'name'} . ($ScmPackages{$_}{'suffix'} || '');
249
    my $name = $ScmPackages{$_}{'name'};
250
    foreach my $rtag_id ( @{$ScmPackages{$_}{'release'}} )
251
    {
252
        unless ( $ScmReleases{$rtag_id}{'excluded'} )
253
        {
254
            $ReleasePackages{$rtag_id}{mname}{$mname}{count}++;
255
            $ReleasePackages{$rtag_id}{name}{$name}{count}++;
256
            push @{$ReleasePackages{$rtag_id}{mname}{$mname}{pvid}}, $_;
257
            push @{$ReleasePackages{$rtag_id}{name}{$name}{pvid}}, $_ ;
258
        }
259
    }
392 dpurdie 260
}
394 dpurdie 261
Warning ("Bad Package Data entries: " . $badCount ) if $badCount;
392 dpurdie 262
 
263
#
264
#   Tag packages with BadVob and MultiVob
265
#
266
foreach my $pkgid ( keys %PackageSet )
267
{
268
    ($PackageData{$pkgid}{type}, @{$PackageData{$pkgid}{suffixes}} ) = smartPackageType ($pkgid);
269
    my @vobs = keys %{$PackageData{$pkgid}{vobs}};
2764 dpurdie 270
#    $PackageData{$pkgid}{isSVN} = 1 if ( @vobs == 1 && $vobs[0] eq 'SVN' );
271
#    $PackageData{$pkgid}{isSVN} = 1 if ( (exists ($PackageData{$pkgid}{vobs}{SVN})) && $PackageData{$pkgid}{vobs}{SVN});
1270 dpurdie 272
 
2764 dpurdie 273
 
274
 
275
    $PackageData{$pkgid}{isSVN} = 1 if ( exists $ScmAllPackages{$pkgid} && $ScmAllPackages{$pkgid}{inSvn} );
392 dpurdie 276
    $PackageData{$pkgid}{MultiVob} = 1 if ( @vobs > 1 );
277
    $PackageData{$pkgid}{BadVob} = 1 if ( grep {$_ eq 'BAD'} @vobs   );
278
}
279
 
280
#
281
#   Map packages into Repos
282
#
2429 dpurdie 283
my %Repos_lowercase;
392 dpurdie 284
my %Repos;
285
my %RepoSubIndex;
286
Message ("Mapping Vobs to Repo");
287
foreach my $pkgid ( keys %PackageSet )
288
{
289
    my $repo = mapPackage($pkgid);
290
    Error ("Unmapped package: $PackageData{$pkgid}{name}" ) unless ( $repo );
2764 dpurdie 291
 
2429 dpurdie 292
    my $repo_lc = lc $repo;
392 dpurdie 293
 
2429 dpurdie 294
    if (exists $Repos_lowercase{$repo_lc} && $Repos_lowercase{$repo_lc} ne $repo )
295
    {
296
        Error ("Package mapping: Mapped to Repo with same name, but different case",
297
               "Package: $PackageData{$pkgid}{name}",
298
               "Mapped repo   : $repo",
299
               "Already mapped: $Repos_lowercase{$repo_lc}");
300
    }
301
 
302
    $Repos_lowercase{$repo_lc} = $repo;
392 dpurdie 303
    $PackageData{$pkgid}{mappedRepo} = $repo;
304
    push @{$Repos{$repo}}, $pkgid;
2429 dpurdie 305
 
306
    if ( $repo eq 'SVN' )
307
    {
308
        my %RepoList;
309
        foreach my $pvid ( @{$PackageSet{$pkgid}} )
310
        {
311
            my $repo = $ScmPackages{$pvid}{'vcstag'};
312
            if ( $repo =~ m~SVN::AUPERASVN01/(.*)/(.*?)(/tags/|/branches/|/trunk)~i )
313
            {
314
                my $repo = $1;
315
                unless( exists $RepoList{$repo} )
316
                {
317
                    $RepoList{$repo} = 1 ;
318
                    $PackageData{$pkgid}{mappedRepo} = $repo;
319
                    push @{$Repos{$repo}}, $pkgid;
320
                }
321
            }
322
        }
323
 
324
    }
392 dpurdie 325
}
326
 
327
foreach ( keys %Repos )
328
{
329
    @{$Repos{$_}} = sort{ uc($PackageData{$a}{name}) cmp uc($PackageData{$b}{name}) } @{$Repos{$_}};
330
    my $base = $_;
331
    my $index = '-';
332
    if (m~^(.*?)/(.*)~ )
333
    {
334
        $base = $1;
335
        $index = $2;
336
    }
337
    push @{$RepoSubIndex{$base}{$index}}, @{$Repos{$_}};
338
    @{$Repos{$base}} = () unless ( exists $Repos{$base} );
339
}
340
#DebugDumpData("RepoSubIndex", \%RepoSubIndex);
341
#DebugDumpData("Repos", \%Repos);
342
 
343
#
344
#   Create a list of Packages
345
#
2429 dpurdie 346
my $totalPackageCount = 0;
392 dpurdie 347
{
348
    my $file = "PackageNames.txt";
349
    Message("Create Package Name List", $file);
350
    open ( my $fh, '>', $file ) || Error ("Cannot open $file", "Error: $!");
351
 
352
    foreach ( sort {$PackageData{$a}{name} cmp $PackageData{$b}{name} } keys %PackageData )
353
    {
354
        print $fh "$PackageData{$_}{name}\n";
2429 dpurdie 355
        $totalPackageCount++;
392 dpurdie 356
 
357
    }
358
    close $fh;
2429 dpurdie 359
    Message("Unique Package Names: $totalPackageCount");
392 dpurdie 360
#    DebugDumpData("PackageData", \%PackageData);
361
}
362
 
1341 dpurdie 363
#
364
#   Determine Releases that have multiple versions of a package
365
#   ie: xxxx.cr and xxxxx.ssw
366
#
367
 
368
 
369
 
1270 dpurdie 370
##=pod
371
###
372
###   Display MutiVob Packages
373
###
374
##    foreach my $pkgid (  keys %PackageData )
375
##    {
376
##        next unless ( $PackageData{$pkgid}{MultiVob}  );
377
##        Message("Multi VOB package: $PackageData{$pkgid}{name}");
378
##        foreach my $vob ( keys %{$PackageData{$pkgid}{vobs}} )
379
##        {
380
##            Message("    $vob");
381
##            foreach my $pvid ( @{$PackageData{$pkgid}{vobs}{$vob}} )
382
##            {
383
##                Message ("        $ScmPackages{$pvid}{'version'}, $ScmPackages{$pvid}{'vcstag'}");
384
##            }
385
##        }
386
###DebugDumpData("DATA",$PackageData{$pkgid} );
387
##    }
388
##=cut
392 dpurdie 389
 
1270 dpurdie 390
##=pod
391
##    foreach my $pkgid (  keys %PackageData )
392
##    {
393
##        next unless ( $PackageData{$pkgid}{isSVN}  );
394
##        Message("Fully SVN Converted: $PackageData{$pkgid}{name}");
395
##    }
396
##=cut
392 dpurdie 397
 
1270 dpurdie 398
##=pod
399
##    my @BadTags;
400
##    foreach my $pvid (  keys %ScmPackages )
401
##    {
402
##        next unless ( $ScmPackages{$pvid}{BadVob}  );
403
##        push @BadTags, $pvid;
404
##    }
405
##
406
##    Message("Bad VcsTag packages: ". scalar @BadTags);
407
##    foreach my $pvid ( @BadTags )
408
##    {
409
##        Message ("    $pvid, $ScmPackages{$pvid}{'name'}, $ScmPackages{$pvid}{'version'}, $ScmPackages{$pvid}{'vcstag'}");
410
##    }
411
##=cut
392 dpurdie 412
 
413
    generateHTML();
414
    generateImportData();
415
    exit 0;
416
 
417
#-------------------------------------------------------------------------------
418
# Function        : generateImportData
419
#
420
# Description     : Generate data to be used by the importPackage util.
421
#                   Will provide Target Repo
422
#
423
# Inputs          : Nothing
424
#
425
# Returns         : 
426
#
427
sub generateImportData
428
{
429
    my %Data;
1270 dpurdie 430
    Message("Generate Data for utilties");
392 dpurdie 431
    {
432
        my $file = "cc2svn.repo.txt";
433
        Message ("Create: $file");
434
        my $fh = ConfigurationFile::New( $file );
435
 
436
        foreach my $pkgid ( sort {$PackageData{$a}{name} cmp $PackageData{$b}{name} } keys %PackageData )
437
        {
438
            my $repo = $PackageData{$pkgid}{mappedRepo};
439
            my $name = $PackageData{$pkgid}{name};
2429 dpurdie 440
            my $svn = $PackageData{$pkgid}{isSVN} ? 'SVN' : '---';
441
 
442
            my $youngest = $PackageData{$pkgid}{youngAge};
443
            my $youngestNonRipple = $PackageData{$pkgid}{youngAgeNonRipple} || 0;
444
            my $youngestNonBuildadm = $PackageData{$pkgid}{nonBuildadm} || 0;
445
 
446
            $youngest =  int($youngest);
447
            $youngestNonRipple =  int($youngestNonRipple) || '9999';
448
            $youngestNonBuildadm = int($youngestNonBuildadm) || '9999';
449
 
450
            my $txt = sprintf ("Last:%5d, User:%5d, NonR:%5d, $svn", $youngest, $youngestNonBuildadm, $youngestNonRipple);
451
           $txt .= sprintf (" :: %40s -repo=%s", $name, $repo );
452
            $fh->WriteLn($txt);
2439 dpurdie 453
 
454
            #
455
            #   Save in a readable form too
456
            #
457
            $Data{$name}{repo} = $repo;
458
            $Data{$name}{SVN} = 1 if $PackageData{$pkgid}{isSVN};
459
            $Data{$name}{youngest} = $youngest;
460
            $Data{$name}{ynr} = $youngestNonRipple;
461
            $Data{$name}{ynb} = $youngestNonBuildadm;
2764 dpurdie 462
            $Data{$name}{protected} = $Protected{$PackageData{$pkgid}{name}}{mode} if exists $Protected{$PackageData{$pkgid}{name}};
392 dpurdie 463
        }
464
        $fh->Close();
465
    }
466
 
467
    my $file = "cc2svn.repo.dat";
468
    Message ("Create: $file");
469
    my $fh = ConfigurationFile::New( $file );
470
    $fh->DumpData(
471
        "\n# Repo Mapping.\n#\n",
472
        "ScmRepoMap", \%Data );
473
 
474
    $fh->Close();
475
}
476
 
477
#-------------------------------------------------------------------------------
2429 dpurdie 478
# Function        : generateHTMLHeader
392 dpurdie 479
#
2429 dpurdie 480
# Description     : Create an HTML Header
392 dpurdie 481
#
2429 dpurdie 482
# Inputs          : $section        - Section tag
392 dpurdie 483
#
2429 dpurdie 484
# Returns         : Handle to use
392 dpurdie 485
#
2429 dpurdie 486
sub generateHTMLHeader
392 dpurdie 487
{
2429 dpurdie 488
    my ($section) = @_;
489
    my $handle;
392 dpurdie 490
 
2429 dpurdie 491
    Error ("Bad HTML section id: $section") unless ( exists $htmlData{$section} );
492
    $currentSection = $section;
493
    my $fname = $htmlData{$section}{file};
494
    my $title = $htmlData{$section}{title};
495
    Message("Generating: $title");
392 dpurdie 496
 
2429 dpurdie 497
    open ($handle, '>', $fname) || Error ("Cannot create HTML: $fname");
498
    print $handle <<"HEADER";
499
<!DOCTYPE $handle PUBLIC "-//W3C//DTD $handle 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
392 dpurdie 500
<html>
501
<head>
2429 dpurdie 502
<title>$title</title>
392 dpurdie 503
<script type="text/javascript">
504
function click_expandingMenuHeader(obj,sectionName)
505
{ 
506
var x=document.getElementById("cssprop_" + sectionName).parentNode.className;
507
if (x.indexOf("expandingMenuNotSelected")>-1)
508
	{
509
	x=x.replace("expandingMenuNotSelected","expandingMenuSelected");
510
	document.getElementById("cssprop_" + sectionName).parentNode.className=x;
511
	document.getElementById("cssprop_" + sectionName).style.display="block";
512
	}
513
else
514
	{
515
	x=x.replace("expandingMenuSelected","expandingMenuNotSelected");
516
	document.getElementById("cssprop_" + sectionName).parentNode.className=x;
517
	document.getElementById("cssprop_" + sectionName).style.display="none";
518
	}
519
}
520
 
521
function flipStyleByName(style, prop, val, val2)
522
{
523
    var mysheet=document.styleSheets[0];
524
    var myrules=mysheet.cssRules? mysheet.cssRules: mysheet.rules
525
    for (i=0; i<myrules.length; i++)
526
    {
527
        if(myrules[i].selectorText.toLowerCase()==style)
528
        {
529
            targetrule=myrules[i];
530
 
531
            targetflag = 'ddpStuff.' + style
532
            targetrule[targetflag] = ! targetrule[targetflag];
533
            val = targetrule[targetflag] ? val : val2;
534
 
535
            targetrule.style.setProperty(prop, val,'important');
536
            break;
537
        }
538
    }
539
}
540
 
541
</script>
542
<style TYPE="text/css">
543
 
544
.nonEssential {}
545
.essential {}
546
 
547
.expandingMenu
548
{
549
xwidth:165px;
550
overflow:hidden;
551
}
552
 
553
.expandingMenuHeader
554
{
555
padding-left:12px;
556
margin-bottom:2px;
557
cursor:pointer;
558
}
559
 
560
.expandingMenuItem
561
{
562
width:145px;
563
padding-left:12px;
564
margin-bottom:3px;
565
}
566
 
567
.expandingMenuGroup {
568
xwidth:160px;
569
border:1px solid #d4d4d4;
570
margin-bottom:4px;
571
padding-top:4px;
572
padding-bottom:4px;
573
background-color:#f8f8f8;
574
}
575
 
576
.expandingMenuSelected {
577
background-image:url(http://www.w3schools.com/images/minus_arrow.gif);
578
background-repeat:no-repeat;
579
background-position:1px 3px;
580
}
581
 
582
.expandingMenuNotSelected {
583
background-image:url(http://www.w3schools.com//images/plus_arrow.gif);
584
background-repeat:no-repeat;
585
background-position:1px 3px;
586
}
587
 
588
.packageTitle {
589
    background-color:#FFFF99;
590
}
591
 
592
.listTitle {
593
    text-align:left;
594
    vertical-align:top;
595
}
596
 
597
.paddedTable {
598
    border-spacing: 10px 0px;
599
}
600
</style>
601
</head>
602
 
603
HEADER
2429 dpurdie 604
    print $handle "<body>\n";
605
    print $handle "<p>Generated: " . localtime() . "\n";
392 dpurdie 606
 
607
    #
608
    #   Generate an index
609
    #
2429 dpurdie 610
    print $handle htmlH1(anchor("Index", 'Index'));
392 dpurdie 611
 
2429 dpurdie 612
    print $handle "<dl>";
613
    foreach my $section ( sort keys %htmlData )
614
    {
615
        my $fname = $htmlData{$section}{file};
616
        my $title = $htmlData{$section}{title};
617
 
618
        print $handle "<dd>" . hRef("$fname"            ,$title);
619
 
620
    }
621
    print $handle "</dl>\n";
622
 
623
    unless ( $htmlData{$section}{noHeader} )
624
    {
625
        print $handle htmlH1('<hr>' . $title);
626
    }
627
 
628
    return $handle;
629
}
630
 
631
#-------------------------------------------------------------------------------
632
# Function        : generateHTMLTail
633
#
634
# Description     : 
635
#
636
# Inputs          : 
637
#
638
# Returns         : 
639
#
640
sub generateHTMLTail
641
{
642
    my ($handle) = @_;
643
    print $handle "</body>\n";
644
    print $handle "</html>\n";
645
    close $handle;
646
 
647
    $currentSection = '';
648
}
649
 
650
 
651
#-------------------------------------------------------------------------------
652
# Function        : generateHTML
653
#
654
# Description     : 
655
#                   Create per package data
656
#                   Create a nice HTML file so that it can be hyperlinked
657
#
658
# Inputs          : 
659
#
660
# Returns         : 
661
#
662
 
663
sub generateHTML
664
{
665
    my @PackageOrder;
666
    EnvImport('GBE_RM_URL');
667
    EnvImport('GBE_DM_URL');
668
    my $t;
669
    Message("Generate HTML");
670
    my $HTML = generateHTMLHeader ('S0');
671
    print $HTML "This page is a simple index into the other pages that contain the Clearcase to Subversion converstion details.\n";
672
 
392 dpurdie 673
    #
395 dpurdie 674
    #   BOM Projects
675
    #
1197 dpurdie 676
#    {
2429 dpurdie 677
#        print $HTML header('BOMIndex', 'Included BOM Projects');
678
#        print $HTML "BOM Projects included in processing. All branches and and SBOMS scanned for essential packages and versions\n";
1197 dpurdie 679
#
2429 dpurdie 680
#        print $HTML "<dl>\n";
1197 dpurdie 681
#        foreach my $project_id ( sort {$ScmAllBomProjects{$a}{project_name} cmp $ScmAllBomProjects{$b}{project_name} } keys %ScmAllBomProjects )
682
#        {
2429 dpurdie 683
#            print $HTML "<dd>" . linkBomProject($project_id,$ScmAllBomProjects{$project_id}{project_name});
1197 dpurdie 684
#        }
2429 dpurdie 685
#        print $HTML "</dl>\n";
1197 dpurdie 686
#    }
395 dpurdie 687
 
688
    #
392 dpurdie 689
    #   Release List
690
    #
691
    my %Projects;
692
    push @{$Projects{$ScmReleases{$_}{'pName'}}}, $_ foreach ( keys %ScmReleases );
693
 
2429 dpurdie 694
 
695
    $HTML = generateHTMLHeader ('S1');
696
    print $HTML "Releases that will be considered in the conversion process.\n";
697
    print $HTML "<br>Releases are scanned for packages and versions that are used.\n";
698
    print $HTML "<dl>\n";
392 dpurdie 699
    foreach ( sort keys %Projects )
700
    {
395 dpurdie 701
        foreach my $rtagid ( sort {$ScmReleases{$a}{name} cmp $ScmReleases{$b}{name}} @{$Projects{$_}} )
392 dpurdie 702
        {
703
            next if ( $ScmReleases{$rtagid}{'excluded'} );
2429 dpurdie 704
            print $HTML "<dd>" . linkRelease($rtagid);
392 dpurdie 705
        }
706
    }
2429 dpurdie 707
    print $HTML "</dl>\n";
708
    generateHTMLTail($HTML);
392 dpurdie 709
 
2429 dpurdie 710
 
711
    $HTML = generateHTMLHeader ('S2');
712
    print $HTML "Releases that will NOT be considered in the conversion process. These are releases that have been specificly excluded.\n";
713
    print $HTML "<dl>\n";
392 dpurdie 714
    foreach ( sort keys %Projects )
715
    {
395 dpurdie 716
        foreach my $rtagid ( sort {$ScmReleases{$a}{name} cmp $ScmReleases{$b}{name}} @{$Projects{$_}} )
392 dpurdie 717
        {
718
            next unless ( $ScmReleases{$rtagid}{'excluded'} );
2429 dpurdie 719
            print $HTML "<dd>" . linkRelease($rtagid);
392 dpurdie 720
        }
721
    }
2429 dpurdie 722
    print $HTML "</dl>\n";
723
    generateHTMLTail($HTML);
392 dpurdie 724
 
725
 
726
    my $currentChar = '';
727
    undef $t;
728
    @PackageOrder = ();
2429 dpurdie 729
    $HTML = generateHTMLHeader ('S3');
730
    print $HTML "Complete list of packages. This includes 'Essential Packages' and packages that ";
731
    print $HTML "are present in Release Manager, but are not currently used.";
732
    print $HTML "<br><button type=\"button\" onclick=\"flipStyleByName('.nonessential', 'display', 'none', '')\" >Show/Hide non Essential</button>";
733
    print $HTML "<button type=\"button\" onclick=\"flipStyleByName('.essential', 'display', 'none', '')\" >Show/Hide Essential</button>";
392 dpurdie 734
 
2764 dpurdie 735
    foreach my $pkgid ( sort {lc($ScmAllPackages{$a}{name}) cmp lc($ScmAllPackages{$b}{name}) } keys %ScmAllPackages )
392 dpurdie 736
    {
2764 dpurdie 737
        my $thisChar = uc(substr($ScmAllPackages{$pkgid}{name}, 0, 1 ));
392 dpurdie 738
        if ( $thisChar ne $currentChar )
739
        {
2429 dpurdie 740
            print $HTML $t->getTable if ( $t );
392 dpurdie 741
            $t = new HTML::Table();
742
 
2429 dpurdie 743
            endExpander($HTML) if ($currentChar);
744
            startExpander($HTML, "Letter2$thisChar", $thisChar);
392 dpurdie 745
            $currentChar = $thisChar;
746
        }
747
        my $packageRef;
748
        my $version_tree = '';
749
        my $import_log = '';
750
        my $marker = '';
751
        my $class;
752
        unless ( exists $PackageData{$pkgid} )
753
        {
2764 dpurdie 754
            $packageRef = $ScmAllPackages{$pkgid}{name};
1197 dpurdie 755
            $marker = 'Not being converted at this time';
392 dpurdie 756
            $class = 'nonEssential';
757
        }
758
        else
759
        {
760
            push @PackageOrder, $pkgid;
761
            $packageRef = linkPackageDetails($pkgid);
762
            $version_tree = linkImage($pkgid, '(Version Tree)');
763
            $import_log = linkImportLog( $pkgid, '(Import Log)');
764
 
765
            $marker = 'Converted to SVN'
766
                if ( $PackageData{$pkgid}{isSVN} );
767
            $class = 'essential';
768
        }
769
        $t->addRow($packageRef, linkPkg($pkgid, '(Release Manager)'),$version_tree, $import_log, $marker);
770
        $t->setRowClass  (-1, $class);
771
    }
2429 dpurdie 772
    print $HTML $t->getTable if ( $t );
773
    endExpander($HTML) if ($currentChar);
774
    generateHTMLTail($HTML);
392 dpurdie 775
 
776
    #
777
    #   Package Details
778
    #
2429 dpurdie 779
    $HTML = generateHTMLHeader ('S4');
392 dpurdie 780
    $t = new HTML::Table( -border=>1 );
781
    foreach my $pkgid ( @PackageOrder )
782
    {
783
        my @badVobs;
784
        $t->addRow('&nbsp;');
785
        $t->setRowClass  (-1, 'packageTitle');
786
        $t->setCellColSpan(-1, 1, 2);
787
 
2429 dpurdie 788
        $t->addRow( anchor("$PackageData{$pkgid}{name}", 'Name:'), linkPkg($pkgid) . linkImage($pkgid, ' (Version Tree)') . linkImportLog( $pkgid, ' (Import Log)' ) );
392 dpurdie 789
#        $t->setRowHead(-1,1);
790
 
791
        my $t2 = new HTML::Table( -border=>0, -padding=>0, -spacing=>0 );
792
        foreach my $pvid ( sort {$ScmPackages{$a}{fullVersion} cmp $ScmPackages{$b}{fullVersion} } @{$PackageSet{$pkgid}} )
793
        {
394 dpurdie 794
            my @markers;
795
            if ( $ScmPackages{$pvid}{BadVob} || $ScmPackages{$pvid}{BadCCView}  ) {
796
                push @markers, hRef( "#BadVcs_$pvid", ' -Bad Tag');
392 dpurdie 797
            }
798
 
394 dpurdie 799
            if ( $ScmPackages{$pvid}{sbomOsid} || $ScmPackages{$pvid}{sbomBase}  ) {
800
                push @markers, 'SBOM';
801
            }
802
 
803
 
804
            $t2->addRow( linkPvid($pvid, undef, 1), "@markers" );
805
 
392 dpurdie 806
            push @badVobs,$pvid if ($ScmPackages{$pvid}{BadVob});
807
        }
808
        $t->addRow("Versions used:", $t2->getTable);
809
        $t->addRow("Type:", $PackageData{$pkgid}{type});
810
        $t->addRow("Projects:",join (',', @{$PackageData{$pkgid}{suffixes}} ));
811
 
812
        my $youngest = $PackageData{$pkgid}{youngAge};
2429 dpurdie 813
        my $youngestNonRipple = $PackageData{$pkgid}{youngAgeNonRipple} || 0;
814
        my $youngestNonBuildadm = $PackageData{$pkgid}{nonBuildadm} || 0;
815
 
816
        $youngest = int($youngest);
817
        $youngestNonRipple = int($youngestNonRipple) || '-';
818
        $youngestNonBuildadm = int($youngestNonBuildadm) || '-';
819
 
820
        $t->addRow("Youngest:", "$youngestNonRipple Days (NonRipple). $youngestNonBuildadm Days (NonBuildadm). $youngest Days (any Build)" );
392 dpurdie 821
        $t->addRow("Views:", join (',', keys %{$PackageData{$pkgid}{view}}));
822
 
823
        if ( $PackageData{$pkgid}{MultiVob} )
824
        {
825
            my $t2 = new HTML::Table( -border=>0, -padding=>0, -spacing=>0, -class=>'paddedTable' );
826
            foreach my $vob ( keys %{$PackageData{$pkgid}{vobs}} )
827
            {
828
                $t2->addRow($vob);
829
                $t2->setRowHead(-1,1);
830
                $t2->setCellColSpan(-1, 1, 3);
831
                foreach my $pvid ( @{$PackageData{$pkgid}{vobs}{$vob}} )
832
                {
833
                    $t2->addRow('&nbsp;', linkPvid($pvid, undef, 1), "$ScmPackages{$pvid}{'vcstag'}" );
834
                }
835
            }
836
            $t2->setColClass (1, 'listTitle' );
395 dpurdie 837
            $t->addRow("MultiVobs:", $t2->getTable);
392 dpurdie 838
        }
839
        else
840
        {
841
            $t->addRow("Vobs:", join (',', keys %{$PackageData{$pkgid}{vobs}}));
842
        }
843
 
844
        if ( $PackageData{$pkgid}{MultiVob} )
845
        {
846
            my $t2 = new HTML::Table( -border=>0, -padding=>0, -spacing=>0, -class=>'paddedTable' );
847
            foreach my $vob ( keys %{$PackageData{$pkgid}{vobPath}} )
848
            {
849
                $t2->addRow($vob);
850
                $t2->setRowHead(-1,1);
851
                $t2->setCellColSpan(-1, 1, 2);
852
                foreach my $pvid ( @{$PackageData{$pkgid}{vobPath}{$vob}} )
853
                {
854
                    $t2->addRow('&nbsp;', linkPvid($pvid, undef, 1) );
855
                }
856
            }
857
            $t2->setColClass (1, 'listTitle' );
858
            $t->addRow("Paths:", $t2->getTable);
859
        }
860
        else
861
        {
862
            $t->addRow("Paths:", join (',', keys %{$PackageData{$pkgid}{vobPath}}));
863
        }
864
 
865
 
866
        if ( @badVobs )
867
        {
868
            my $t2 = new HTML::Table( -border=>0, -padding=>0, -spacing=>0, -class=>'paddedTable' );
869
            foreach my $pvid ( @badVobs )
870
            {
871
                $t2->addRow(linkPvid($pvid), "&nbsp;", $ScmPackages{$pvid}{'vcstag'} );
872
            }
873
            $t->addRow("Bad VCS:", $t2->getTable );
874
        }
875
 
876
        my $repo = $PackageData{$pkgid}{mappedRepo};
2429 dpurdie 877
        my %RepoList;
878
        foreach my $pvid ( @{$PackageSet{$pkgid}} )
879
        {
880
            my $repo = $ScmPackages{$pvid}{'vcstag'};
881
            if ( $repo =~ m~SVN::(.*)(/tags/|/branches/|/trunk)~i )
882
            {
883
                $RepoList{$1} = svnLink($1) unless exists $RepoList{$1};
884
            }
885
        }
886
        my $txt = join( '<br>', values %RepoList);
887
        $txt = ' : ' . $txt if ( $txt );
888
        $t->addRow("Repo:", hRef("#Repo_$repo", $repo). $txt );
2764 dpurdie 889
        if ( exists $Protected{$PackageData{$pkgid}{name}} )
890
        {
891
            my $entry = $Protected{$PackageData{$pkgid}{name}};
892
            my $comment = $entry->{comment} || '';
893
            my $t2 = new HTML::Table( -border=>0, -padding=>0, -spacing=>0, -class=>'paddedTable' );
894
 
895
            $t2->addRow($entry->{mode}, $comment );
896
            $t->addRow("Protected:", $t2->getTable);
897
        }
392 dpurdie 898
    }
899
    $t->setColClass (1, 'listTitle' );
2429 dpurdie 900
    print $HTML $t->getTable;
901
    generateHTMLTail($HTML);
392 dpurdie 902
    #
903
    #   Bad Package information
904
    #
905
    my %BadByProject;
2016 dpurdie 906
    my $last_proj_id = 0;
392 dpurdie 907
 
2429 dpurdie 908
    $HTML = generateHTMLHeader ('S5');
909
    print $HTML "These package-versions cannot be reproduced from ClearCase. This may be due to\n";
910
    print $HTML "<dl><dd>Invalid Release Manager information";
911
    print $HTML "<dd>Incorrect Release Manager Data";
912
    print $HTML "<dd>ClearCase label and Path do not result in a view with files";
913
    print $HTML "</dl>";
392 dpurdie 914
    $t = new HTML::Table( -border=>1 );
915
    $t->addRow( 'Package Version','VCS Tag' );
916
    $t->setRowHead(1,1);
917
    foreach my $pvid ( sort {lc($ScmPackages{$a}{name}) cmp lc($ScmPackages{$b}{name}) } keys %ScmPackages )
918
    {
919
        next unless ( $ScmPackages{$pvid}{BadVob} || $ScmPackages{$pvid}{BadCCView} );
920
 
921
        my $t2 = new HTML::Table( -border=>0, -padding=>0, -spacing=>0, -class=>'paddedTable' );
922
        $t2->addRow($ScmPackages{$pvid}{'vcstag'});
923
 
924
        my ($users, $iusers) = usedBy($pvid);
925
        if ( @$users )
926
        {
927
            $t2->addRow("Used Directly by:");
928
            $t2->addRow(linkRelease($_, $pvid)) foreach ( @$users );
929
            push @{$BadByProject{$_}{direct}}, $pvid foreach ( @$users );
930
        }
931
 
932
        if ( @$iusers )
933
        {
934
            $t2->addRow("Used Indirectly by:");
935
            $t2->addRow(linkRelease($_, $pvid)) foreach ( @$iusers );
936
            push @{$BadByProject{$_}{indirect}}, $pvid foreach ( @$iusers );
937
        }
2429 dpurdie 938
        $t->addRow( anchor("$pvid",linkPvid($pvid)), $t2->getTable );
392 dpurdie 939
    }
940
    $t->setColClass (1, 'listTitle' );
2429 dpurdie 941
    print $HTML $t->getTable;
942
    generateHTMLTail($HTML);
392 dpurdie 943
 
944
    #
945
    #   Bad package vesrions by project
946
    #
2429 dpurdie 947
    $HTML = generateHTMLHeader ('S6');
392 dpurdie 948
    $t = new HTML::Table( -border=>1 );
949
    $t->addRow( 'Release','Package');
950
    $t->setRowHead(1,1);
2016 dpurdie 951
    $last_proj_id = 0;
392 dpurdie 952
 
953
    sub sortReleases
954
    {
955
        my $rv = ( lc($ScmReleases{$a}{pName}) cmp lc($ScmReleases{$b}{pName}));
956
        unless ($rv )
957
        {
958
            $rv = (lc($ScmReleases{$a}{'rtag_id'}) cmp lc($ScmReleases{$b}{'rtag_id'}));
959
        }
960
        return $rv;
961
    }
962
 
963
    foreach my $rtag_id ( sort sortReleases keys %BadByProject  )
964
    {
965
        if ( $last_proj_id != $ScmReleases{$rtag_id}{proj_id} )
966
        {
967
            $last_proj_id = $ScmReleases{$rtag_id}{proj_id};
968
            $t->addRow( $ScmReleases{$rtag_id}{pName});
969
            $t->setCellColSpan(-1, 1, 2);
970
        }
971
 
972
        my $t2 = new HTML::Table(-border=>0, -padding=>0, -spacing=>0, -class=>'paddedTable' );
973
 
974
        if ( $BadByProject{$rtag_id}{direct} )
975
        {
976
                $t2->addRow('Directly uses:' );
977
                foreach my $pvid (@{$BadByProject{$rtag_id}{direct}})
978
                {
979
                    $t2->addRow( linkPvid($pvid, $rtag_id) , $ScmPackages{$pvid}{'vcstag'} );
980
                }
981
        }
982
 
983
        if ( $BadByProject{$rtag_id}{indirect} )
984
        {
985
            $t2->addRow('Indirectly uses:' );
986
            foreach my $pvid (@{$BadByProject{$rtag_id}{indirect}})
987
            {
988
                $t2->addRow( linkPvid($pvid, $rtag_id) , $ScmPackages{$pvid}{'vcstag'} );
989
            }
990
        }
991
        $t->addRow(linkRelease($rtag_id, undef, 1), $t2->getTable  );
992
    }
2016 dpurdie 993
 
392 dpurdie 994
    $t->setColClass (1, 'listTitle' );
995
    $t->setColHead(1,1);
2429 dpurdie 996
    print $HTML $t->getTable;
997
    generateHTMLTail($HTML);
392 dpurdie 998
 
1341 dpurdie 999
    #
1000
    #   Releases that have multiple instances of the same package in them
1001
    #
2429 dpurdie 1002
    $HTML = generateHTMLHeader ('S7');
1003
    print $HTML "Releases that have multiple instances of the same package\n";
1341 dpurdie 1004
#DebugDumpData("ReleasePackages", \%ReleasePackages );
1005
 
1006
    $t = new HTML::Table( -border=>1 );
1007
    $t->addRow( 'Release','Package');
1008
    $t->setRowHead(1,1);
1009
    $last_proj_id = 0;
1010
 
1011
    foreach my $rtag_id ( sort sortReleases keys %ReleasePackages )
1012
    {
1013
        my @multiples;
1014
        foreach my $name ( keys %{$ReleasePackages{$rtag_id}{name}} )
1015
        {
1016
            if ( $ReleasePackages{$rtag_id}{name}{$name}{count} > 1 )
1017
            {
1018
                push @multiples, $name;
1019
            }
1020
        }
1021
        next unless ( @multiples );
1022
 
1023
        if ( $last_proj_id != $ScmReleases{$rtag_id}{proj_id} )
1024
        {
1025
            $last_proj_id = $ScmReleases{$rtag_id}{proj_id};
1026
            $t->addRow( $ScmReleases{$rtag_id}{pName});
1027
            $t->setCellColSpan(-1, 1, 2);
1028
        }
1029
 
1030
        my $t2 = new HTML::Table(-border=>0, -padding=>0, -spacing=>0, -class=>'paddedTable' );
1031
 
1032
        foreach my $name ( sort {uc($a) cmp uc($b) } @multiples )
1033
        {
1034
            $t2->addRow('Package: ' . linkFindPkgs($name, $rtag_id),  );
1035
            $t2->setCellColSpan(-1, 1, 2);
1036
            foreach my $pvid ( @{$ReleasePackages{$rtag_id}{name}{$name}{pvid}} )
1037
            {
1038
                $t2->addRow( '&nbsp;', linkPvid($pvid, $rtag_id) );
1039
            }
1040
        }
1041
 
1042
        $t->addRow(linkRelease($rtag_id, undef, 1), $t2->getTable  );
1043
    }
1044
    $t->setColClass (1, 'listTitle' );
1045
    $t->setColHead(1,1);
2429 dpurdie 1046
    print $HTML $t->getTable;
1047
    generateHTMLTail($HTML);
392 dpurdie 1048
 
1341 dpurdie 1049
 
2429 dpurdie 1050
    $HTML = generateHTMLHeader ('S8');
1051
    print $HTML "A summary of proposed Repostories and Paths\n";
1341 dpurdie 1052
 
1053
    $t = new HTML::Table( -border=>0, -padding=>0, -spacing=>0, -class=>'paddedTable' );
1054
    $t->addRow( 'Name','', 'Count', 'Warnings'  );
1055
    $t->setCellColSpan(1, 1, 2);
1056
    foreach my $repo ( sort {uc($a) cmp uc($b) } keys %RepoSubIndex )
1057
    {
1058
            next if ( $repo eq 'UNKNOWN' );
1059
            next if ( $repo eq 'SVN' );
1060
            my $count = '';
1061
            if ( exists $RepoSubIndex{$repo}{'-'}   )
1062
            {
1063
                $count = @{$RepoSubIndex{$repo}{'-'}};
1064
            }
1065
            $t->addRow( hRef("#Repo_$repo", $repo), '', $count  );
1066
            $t->setCellColSpan($t->getTableRows(), 1, 2);
1067
 
1068
            foreach my $path ( sort {uc($a) cmp uc($b) } keys %{$RepoSubIndex{$repo}} )
1069
            {
1070
                    next if ( $path eq '-' );
1071
                    my $depth = $path =~ tr~/~~;
1072
                    my $warn = ($depth > 2) ? ' - Deeply nested' : '';
1073
                    my $count = (@{$RepoSubIndex{$repo}{$path}});
1074
                    $warn .= ' - Only One Package' if ( $count < 2 );
1075
 
1076
                    $t->addRow( '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;', hRef("#Repo_$repo/$path", $path), $count, $warn);
1077
            }
1078
 
1079
    }
1080
 
2429 dpurdie 1081
    print $HTML $t->getTable;
1082
    generateHTMLTail($HTML);
1341 dpurdie 1083
 
1084
 
1085
 
392 dpurdie 1086
#DebugDumpData("RepoSubIndex", \%RepoSubIndex);
1087
#DebugDumpData("Repos", \%Repos);
1088
 
1089
    #
1090
    #   Repo back reference
1091
    #
2429 dpurdie 1092
    $HTML = generateHTMLHeader ('S9');
1093
    print $HTML "Proposed and Converted Repostories and Paths with package mapping and ClearCase Path\n";
392 dpurdie 1094
 
1095
    $t = new HTML::Table( -border=>1 );
2429 dpurdie 1096
    $t->addRow( 'Repository Path', 'Package Name,Original Vob Path(s),Last Build NonBuildadm [ANY]' );
392 dpurdie 1097
 
1098
    foreach my $repo ( sort {uc($a) cmp uc($b) } keys %Repos )
1099
    {
1100
        next if ( $repo eq 'SVN' );
1101
        next if ( $repo eq 'UNKNOWN' );
1102
        my @data;
1103
        my $t1 = new HTML::Table( -border=>1,-width=>'100%', -style=>"border-collapse:collapse" );
2931 dpurdie 1104
 
1105
 
392 dpurdie 1106
        foreach my $pkgid ( @{$Repos{$repo}} )
1107
        {
2931 dpurdie 1108
            #
1109
            #   Flag packages that are
1110
            #       1) Known to be BAD
1111
            #       2) Held back
1112
            #
1113
            my $flag = '';
1114
            if ( exists $Protected{$PackageData{$pkgid}{name}} )
1115
            {
1116
                if ( $Protected{$PackageData{$pkgid}{name}}{mode} eq 'Protected' )
1117
                {
1118
                    $flag = ' [P]';
1119
                }
1120
                else
1121
                {
1122
                    $flag = ' [B]';
1123
                }
1124
            }
1125
 
392 dpurdie 1126
            my $t2 = new HTML::Table( -border=>0,-padding=>0, -spacing=>0, -class=>'paddedTable' );
1127
            foreach my $vob ( keys %{$PackageData{$pkgid}{vobPath}} )
1128
            {
2429 dpurdie 1129
                    if ($PackageData{$pkgid}{isSVN} && $vob !~ m~^/~ )
1130
                    {
1131
                        $vob = svnLink($vob);
1132
                        #$vob = "<span style=\"background-color:#B1FB17\">$vob</span>";
1133
                    }
392 dpurdie 1134
                    $t2->addRow( $vob );
1135
            }
2429 dpurdie 1136
            my $t2Text = '';
392 dpurdie 1137
            if ( $t2->getTableRows() )
1138
            {
1139
                $t2->setColClass (1, 'listTitle' );
2429 dpurdie 1140
                $t2Text = $t2->getTable();
392 dpurdie 1141
            }
2429 dpurdie 1142
            my $youngest = $PackageData{$pkgid}{youngAge};
1143
            my $youngestNonRipple = $PackageData{$pkgid}{youngAgeNonRipple} || 0;
1144
            my $youngestNonBuildadm = $PackageData{$pkgid}{nonBuildadm} || 0;
1145
 
1146
            $youngest =  int($youngest);
1147
            $youngestNonRipple =  int($youngestNonRipple) || '-';
1148
            $youngestNonBuildadm = int($youngestNonBuildadm) || '-';
1149
 
2931 dpurdie 1150
            $t1->addRow( linkPackageDetails($pkgid) . $flag, $t2Text, "$youngestNonBuildadm [$youngest]"  );
392 dpurdie 1151
        }
2429 dpurdie 1152
 
392 dpurdie 1153
        if ( $t1->getTableRows() )
1154
        {
1155
            $t1->setColWidth(1,'30%');
1156
            $t1->setColClass (1, 'listTitle' );
2429 dpurdie 1157
            $t1->setColWidth(3,'10%');
392 dpurdie 1158
        }
2429 dpurdie 1159
        $t->addRow( anchor("$repo",$repo), $t1->getTable() );
392 dpurdie 1160
 
1161
    }
1162
    $t->setColClass (1, 'listTitle' );
1163
    $t->setColHead(1,1);
2429 dpurdie 1164
    print $HTML $t->getTable;
1165
    generateHTMLTail($HTML);
392 dpurdie 1166
 
1167
    #
1168
    #   Highlight packages that have not been mapped to a Repo
1169
    #
2429 dpurdie 1170
    $HTML = generateHTMLHeader ('SA');
1171
    print $HTML "Packages that have not been mapped to a Repository\n";
392 dpurdie 1172
    $t = new HTML::Table( -border=>1 );
1173
    foreach my $pkgid ( @{$Repos{UNKNOWN}} )
1174
    {
1175
        my $flag_badCC;
1176
        my $flag_multi;
1177
        my $flag_badVob;
1178
 
1179
        $flag_multi  = 1 if $PackageData{$pkgid}{MultiVob};
1180
        $flag_badVob = 1 if $PackageData{$pkgid}{BadVob};
1181
 
1182
        foreach my $pvid ( @{$PackageSet{$pkgid}} )
1183
        {
1184
            $flag_badCC  = 1 if ( $ScmPackages{$pvid}{BadCCView} );
1185
            $flag_multi  = 1 if ( $ScmPackages{$pvid}{MultiVob} );
1186
            $flag_badVob = 1 if ( $ScmPackages{$pvid}{BadVob} );
1187
        }
1188
 
1189
        my @data;
1190
        push @data, "Bad ClearCase View" if $flag_badCC;
1191
        push @data, "Multiple Vobs" if $flag_multi;
1192
        push @data, "Bad VcsTag" if $flag_badVob;
1193
        $t->addRow( linkPackageDetails($pkgid), join( '<br>', @data) );
1194
    }
1195
 
1196
    $t->setColClass (1, 'listTitle' );
2429 dpurdie 1197
    print $HTML $t->getTable;
1198
    generateHTMLTail($HTML);
1199
 
392 dpurdie 1200
    #
1201
    #   Packages already under Subversion
1202
    #
2429 dpurdie 1203
    $HTML = generateHTMLHeader ('SB');
1204
    print $HTML "Packages that are currently in Subversion\n";
1205
    print $HTML "<br>Packages in Subversion   : ". scalar @{$Repos{SVN}} ."\n";
1206
    print $HTML "<br>Total Packages to convert: ". $totalPackageCount ."\n";
1207
    print $HTML "<p>" ,anchor("SVN",'SVN');
1270 dpurdie 1208
 
392 dpurdie 1209
    $t = new HTML::Table( -border=>1 );
1210
    foreach my $pkgid ( @{$Repos{SVN}} )
1211
    {
1212
        my %RepoList;
1213
        foreach my $pvid ( @{$PackageSet{$pkgid}} )
1214
        {
1215
            my $repo = $ScmPackages{$pvid}{'vcstag'};
1270 dpurdie 1216
            if ( $repo =~ m~SVN::(.*)(/tags/|/branches/|/trunk)~i )
1217
            {
1218
                $RepoList{$1} = svnLink($1) unless exists $RepoList{$1};
1219
            }
392 dpurdie 1220
        }
1270 dpurdie 1221
        $t->addRow( linkPackageDetails($pkgid), join( '<br>', values %RepoList) );
392 dpurdie 1222
    }
2429 dpurdie 1223
    print $HTML $t->getTable;
392 dpurdie 1224
 
2450 dpurdie 1225
    #
1226
    #   Packages with known issues
1227
    #
1228
    $HTML = generateHTMLHeader ('SC');
1229
    print $HTML "Packages that are not being migrated due to known issues\n";
1230
 
1231
    $t = new HTML::Table( -border=>1 );
1232
    $t->addRow( "Protected Packages - Migration delayed");
1233
    $t->setRowClass  (-1, 'packageTitle');
1234
    $t->setCellColSpan(-1, 1, 2);
1235
    foreach my $pkgname ( sort keys %Protected )
1236
    {
2764 dpurdie 1237
        next unless ( $Protected{$pkgname}{mode} eq 'Protected' );
2450 dpurdie 1238
        my $pkgid =  $ScmPkgNames{$pkgname};
1239
        my $txt = $pkgid ? linkPackageDetails($pkgid) : $pkgname;
2764 dpurdie 1240
        $t->addRow( $txt, $Protected{$pkgname}{comment});
2450 dpurdie 1241
    }
1242
 
1243
    $t->addRow( "Broken Packages - Migration not possible");
1244
    $t->setRowClass  (-1, 'packageTitle');
1245
    $t->setCellColSpan(-1, 1, 2);
1246
    foreach my $pkgname ( sort keys %Protected )
1247
    {
2764 dpurdie 1248
        next if ( $Protected{$pkgname}{mode} eq 'Protected' );
2450 dpurdie 1249
        my $pkgid =  $ScmPkgNames{$pkgname};
1250
        my $txt = $pkgid ? linkPackageDetails($pkgid) : $pkgname;
2764 dpurdie 1251
        $t->addRow( $txt, $Protected{$pkgname}{comment});
2450 dpurdie 1252
    }
1253
 
1254
    print $HTML $t->getTable;
1255
 
1256
 
2429 dpurdie 1257
    generateHTMLTail($HTML);
392 dpurdie 1258
Message ("Created: PackageConversion.html");
1259
}
1260
 
2429 dpurdie 1261
sub hRef
1262
{
1263
    my ($url, $text, $target) = @_;
1264
    my $ttext = '';
392 dpurdie 1265
 
2429 dpurdie 1266
    if ( $url =~ m~^#(.*?)_~ )
392 dpurdie 1267
    {
2429 dpurdie 1268
        my $tag = $1;
1269
        foreach my $section ( keys %htmlData )
392 dpurdie 1270
        {
2429 dpurdie 1271
            if ( $htmlData{$section}{tag} eq $1 )
392 dpurdie 1272
            {
2429 dpurdie 1273
                $url = $htmlData{$section}{file} . $url;
1274
                $target = '_Page'.$section unless ( $target );
392 dpurdie 1275
            }
1276
        }
1277
    }
1278
 
1279
    $ttext = ' TARGET="' . $target . '"' if ( defined $target );
1280
    return ( '<a href="' . $url . '"' . $ttext . '>' . $text . '</a>' );
1281
}
1282
 
1283
sub anchor
1284
{
1285
    my ($name, $text) = @_;
2429 dpurdie 1286
    my $prefix = '';
1287
    if ( $currentSection )
1288
    {
1289
        $prefix = $htmlData{$currentSection}{tag};
1290
        $prefix = $prefix . '_' if ( $prefix );
1291
    }
1292
    return ( '<a name="' . $prefix . $name . '">' . $text . '</a>' );
392 dpurdie 1293
}
1294
 
1295
 
1296
sub htmlH1
1297
{
1298
    my ($text) = @_;
1299
    return '<h1>' . $text . '</h1>';
1300
}
1301
 
395 dpurdie 1302
sub linkBomProject
1303
{
1304
    my ($projId, $text) = @_;
1305
    my $ref = $GBE_DM_URL . "/Default.asp?proj_id=$projId";
1306
 
1307
    return hRef($ref, $text, '_packageData');
1308
}
1309
 
1310
 
392 dpurdie 1311
sub linkRelease
1312
{
1313
    my ($pkgid, $pvid, $mode) = @_;
1314
    my $pkgid_ref = $GBE_RM_URL . "/fixed_issues.asp?rtag_id=$pkgid";
1315
    $pkgid_ref .= "&pv_id=$pvid" if defined $pvid;
1316
 
1317
    my $text = '';
1318
    $text .= "$ScmReleases{$pkgid}{pName} :: " unless ( $mode );
1319
    $text .= $ScmReleases{$pkgid}{name};
1320
 
1321
    $text = hRef($pkgid_ref, $text, '_packageData');
1322
}
1323
 
1324
sub linkPackageDetails
1325
{
1326
    my ($pkgid) = @_;
1327
    my $name = $PackageData{$pkgid}{name};
1328
    return hRef("#Package_${name}",$name);
1329
}
1330
 
1331
sub linkPvid
1332
{
1333
    my ($pvid, $rtagid, $mode) = @_;
1334
    my $pv_base = $GBE_RM_URL . "/fixed_issues.asp?pv_id=$pvid";
1335
    $pv_base .= "&rtag_id=$rtagid" if ($rtagid);
1336
 
1337
    my $text = '';
1338
    $text .= "$ScmPackages{$pvid}{'name'} " unless ( $mode );
1339
    $text .= $ScmPackages{$pvid}{'version'};
1340
    return hRef($pv_base, $text, '_packageData');
1341
}
1342
 
1341 dpurdie 1343
sub linkFindPkgs
1344
{
1345
    my ($name, $rtagid) = @_;
1346
    my $pv_base = $GBE_RM_URL . "/find.asp?searchtype=1&keyword=$name&btn=Find&envtab=3&rtag_id=$rtagid";
1347
    return hRef($pv_base, $name, '_packageData');
1348
}
1349
 
392 dpurdie 1350
sub linkPkg
1351
{
1352
    my ($pkgid, $utext) = @_;
1353
    my $rm_base = $GBE_RM_URL . "/view_by_version.asp?pkg_id=$pkgid";
1354
    my $text = $utext ? $utext : $PackageData{$pkgid}{name};
1355
    return hRef($rm_base, $text , '_packageData');
1356
}
1357
 
1358
sub linkImage
1359
{
1360
    my ($pkgid, $utext) = @_;
1361
    my $name = $PackageData{$pkgid}{name};
1362
    my $ref = $name . '.svg';
1363
    my $text = $utext ? $utext : $name;
1364
    return hRef($ref, $text, '_packageImage');
1365
}
1366
 
1367
sub linkImportLog
1368
{
1369
    my ($pkgid, $utext) = @_;
1370
    my $name = $PackageData{$pkgid}{name};
1371
    my $ref = $name . '.importlog';
1372
    my $text = $utext ? $utext : $name;
1373
    return hRef($ref, $text, '_packageLog');
1374
}
1375
 
1270 dpurdie 1376
sub svnLink
1377
{
1378
    my ($tag, $utext) = @_;
1379
    my $text = $utext ? $utext : $tag;
392 dpurdie 1380
 
1270 dpurdie 1381
    $tag =~ s~^SVN::~~;
1382
    my $url = SvnPath2Url ($tag);
1383
    return hRef($url, $text, '_SvnPage');
1384
}
392 dpurdie 1385
 
1270 dpurdie 1386
 
1387
 
392 dpurdie 1388
#-------------------------------------------------------------------------------
1389
# Function        : startExpander
1390
#                   endExpander
1391
#
1392
# Description     : Insert HTML code to start/end a Javascript expanding
1393
#                   division.
1394
#
1395
# Inputs          : $name           - Unique name for the Section
1396
#                   $text           - Header Text to be displayed
1397
#
1398
# Returns         : 
1399
#
1400
sub startExpander
1401
{
2429 dpurdie 1402
    my ($HTML, $name, $text) = @_;
1403
    print $HTML <<EXPANDER;
392 dpurdie 1404
<div class="expandingMenu expandingMenuNotSelected">
1405
    <div onclick='click_expandingMenuHeader(this,"$name")' class="expandingMenuHeader" >$text</div>
1406
	<div id="cssprop_$name" class="expandingMenuGroup" style="display:none;">
1407
EXPANDER
1408
}
1409
 
1410
sub endExpander
1411
{
2429 dpurdie 1412
    my ($HTML) = @_;
1413
    print $HTML "</div></div>\n";
392 dpurdie 1414
}
1415
 
1416
 
1417
#    if ( 0 )
1418
#    {
1419
#        my $file = "TagList.txt";
1420
#        my $count = 0;
1421
#        Message("Create CC Tag  List", $file);
1422
#        open ( my $fh, '>', $file ) || Error ("Cannot open $file", "Error: $!");
1423
#        my %PackageNames;
1424
#
1425
#        foreach ( sort @taglist )
1426
#        {
1427
#            print $fh "$_\n";
1428
#            $count++;
1429
#        }
1430
#        close $fh;
1431
#        Message("Tags: $count");
1432
#    }
1433
 
1434
 
1435
#    DebugDumpData("VersionTags", \%VersionTags);
1436
#    DebugDumpData("Vobs", \%Vobs);
1437
    #print "VOBS: ", join ("\n", sort keys %Vobs), "\n";
1438
 
1439
#-------------------------------------------------------------------------------
404 dpurdie 1440
# Function        : readInputData
392 dpurdie 1441
#
1442
# Description     : Write out data in a form to allow post processing
1443
#
1444
# Inputs          : 
1445
#
1446
# Returns         : 
1447
#
404 dpurdie 1448
sub readInputData
392 dpurdie 1449
{
1450
 
1451
    my $fname = 'cc2svn.raw.txt';
1452
    Message ("Reading: $fname");
1453
    Error "Cannot locate $fname" unless ( -f $fname );
1454
    require $fname;
1455
 
1456
    Error "Data in $fname is not valid\n"
1457
        unless ( keys(%ScmReleases) >= 0 );
1458
 
1459
#    DebugDumpData("ScmReleases", \%ScmReleases );
1460
#    DebugDumpData("ScmPackages", \%ScmPackages );
1461
#    DebugDumpData("ScmSuffixes", \%ScmSuffixes );
1462
 
1463
    %ScmSuffixes = ();
1464
}
1465
 
1466
##-------------------------------------------------------------------------------
1467
## Function        : getVobMapping
1468
##
1469
## Description     : Read in Package to Repository Mapping
1470
##
1471
## Inputs          :
1472
##
1473
## Returns         : Populates
1474
#                        #%VobMapping;                 # Vob -> Repo
1475
#                        #%PackageMapping;             # Package -> Repo
1476
#                        #%ViewMapping                 # View -> Repo
1477
#sub getVobMapping
1478
#{
1479
#    my $fname = 'cc2svn.mapping.txt';
1480
#    Message ("Reading: $fname");
1481
#    Error "Cannot locate $fname" unless ( -f $fname );
1482
#    require $fname;
1483
#
1484
#    Error "Data in $fname is not valid\n"
1485
#        unless ( keys(%PackageMapping) >= 0 );
1486
#
1487
#    DebugDumpData("PackageMapping", \%PackageMapping );
1488
#    DebugDumpData("VobMapping", \%VobMapping );
1489
#    DebugDumpData("ViewMapping", \%ViewMapping );
1490
#
1491
#}
1492
 
1493
 
1494
#-------------------------------------------------------------------------------
1495
# Function        : mapPackage
1496
#
1497
# Description     : Attempt to map a package to a repo
1498
#
1499
# Inputs          : PackageId
1500
#
1501
# Returns         : RepoPatch
1502
#
1503
sub mapPackage
1504
{
1505
    my ($pkgid) = @_;
1506
    my %Named = (
1507
        'Release_Manager'                       => 'DevTools/ManagerSuite',
1508
        'Access_Manager'                        => 'DevTools/ManagerSuite',
1509
        'Deployment_Manager'                    => 'DevTools/ManagerSuite',
1510
        'Production_Manager'                    => 'DevTools/ManagerSuite',
1511
        'schema_utilities'                      => 'DevTools/ManagerSuite',
1512
        'Release_Manager_Schema'                => 'DevTools/ManagerSuite',
1513
        'Manager_Suite'                         => 'DevTools/ManagerSuite',
1514
        'Manager_Suite_VM'                      => 'DevTools/ManagerSuite',
1515
 
1516
        'QtBuilder'                             => 'DevTools',
1517
        'buildtool'                             => 'DevTools',
1518
        'cabinet_packager'                      => 'DevTools',
1519
        'core_devl'                             => 'DevTools',
1520
        'debian_packager'                       => 'DevTools',
1521
        'deployfiles'                           => 'DevTools',
1522
        'dpkg_blat'                             => 'DevTools',
1523
        'dpkg_management'                       => 'DevTools',
1524
        'generate_release_notes'                => 'DevTools',
1525
        'jants'                                 => 'DevTools',
1526
        'linux_day0fs_tools'                    => 'DevTools',
1527
        'manifest-tool'                         => 'DevTools',
1528
        'nsis_packager'                         => 'DevTools',
2040 dpurdie 1529
        'nsis_library'                          => 'DevTools',
392 dpurdie 1530
        'shellbuild'                            => 'DevTools',
1531
        'wsdl-tools'                            => 'DevTools',
1532
        'binflow'                               => 'DevTools',
1533
        'zendguard_tools'                       => 'DevTools',
1534
        'cpptasks'                              => 'DevTools/ant',
1535
        'AdvisoryDependency'                    => 'DevTools/buildtool_tests',
1536
        'CommonDependency'                      => 'DevTools/buildtool_tests',
1537
        'GenericProduct'                        => 'DevTools/buildtool_tests',
1538
        'LinuxCentricProduct'                   => 'DevTools/buildtool_tests',
1539
        'CotsWithFunnyVersion'                  => 'DevTools/buildtool_tests',
2764 dpurdie 1540
        'xp_sequence'                           => 'MASS_Dev_Bus',
1541
        'dmrc_windows_proxy'                    => 'MASS_Dev_Infra/Dmrc',
1542
        'ExtDataImporter'                       => 'MASS_Dev_Infra/Dmrc',
1543
        'inqshim'                               => 'MASS_Dev_Infra/Dmrc',
3559 dpurdie 1544
        'reports_gui'                           => 'MASS_Dev_Infra/Dmrc',
392 dpurdie 1545
 
1546
        'GenAppaCE'                             => 'DPG_SWCode/utilities',
1547
 
1548
        'AtmelHAL'                              => 'MASS_Dev_Crypto',
1549
        'Netbula'                               => 'COTS',
1550
        'ObjectiveGrid'                         => 'COTS',
1551
        'lmos'                                  => 'DPG_SWBase',
2429 dpurdie 1552
#        'daf_cd_transap'                        => 'DPG_SWBase',
392 dpurdie 1553
        'basetypes'                             => 'MASS_Dev_Infra',
2429 dpurdie 1554
        'accesscontrol_ejb-api'                 => 'MASS_Dev_Infra/Security',
392 dpurdie 1555
        'tp5000_MUG'                            => 'MREF_Package',
1556
        'udman'                                 => 'MASS_Dev_Infra',
1557
        'emvud'                                 => 'DPG_SWBase/emvud',
1558
        'daf_mmi_ti'                            => 'DPG_SWBase',
2450 dpurdie 1559
        'daf_osa_mos'                           => 'DPG_SWBase/OSA',
392 dpurdie 1560
        'mos_api'                               => 'MOS',
1561
        'tp5700_Manifest'                       => 'MREF_Package',
2931 dpurdie 1562
#        'TRACS'                                 => 'ITSO_TRACS',
1563
        'SSW_Validator'                         => 'ITSO_TRACS/SSW_validator',
1564
        'itso_pcp_main'                         => 'ITSO_TRACS/itso_pcp',
392 dpurdie 1565
 
2931 dpurdie 1566
 
392 dpurdie 1567
        'jboss_config'                          => 'MASS_Dev_Bus/Business' ,
1568
        'jboss_service'                         => 'MASS_Dev_Bus/Business' ,
1197 dpurdie 1569
        'pgres'                                 => 'ITSO_TRACS/DataManagement' ,
395 dpurdie 1570
        'ERGcda_imports'                        => 'MREF_Package',
2764 dpurdie 1571
        'daf_dataman_extras'                    => 'DPG_SWCode/ProjectCD/seattle',
1572
        'daf_paper_variables'                   => 'DPG_SWCode/ProjectCD',
1573
 
2429 dpurdie 1574
        'XmlDocInterface'                       => 'MASS_Dev_Infra',
2450 dpurdie 1575
        'SPOS_IngenicoApp'                      => 'DPG_SWCode',
392 dpurdie 1576
 
2429 dpurdie 1577
 
1578
        # Kill single package subdirs
1579
        'application'                           => 'MASS_Dev_Bus',
1580
        'card'                                  => 'MASS_Dev_Bus',
1581
        'cardholder'                            => 'MASS_Dev_Bus',
1582
        'opman-database'                        => 'MASS_Dev_Bus',
1583
        'product'                               => 'MASS_Dev_Bus',
1584
        'VmtInterface'                          => 'MASS_Dev_Bus',
1585
        'systemcd_ejb-api'                      => 'MASS_Dev_Bus/CBP',
1586
        'boi'                                   => 'MASS_Dev_Bus/BOI',
1587
 
1588
        'mrviewer'                              => 'MASS_Dev_Infra/Reports',
1589
        'cdss'                                  => 'MASS_Dev_Infra/Cdss',
1590
        'InfraPSS'                              => 'MASS_Dev_Infra',
2764 dpurdie 1591
 
1592
 
1593
        'vsdev-proftpd-insecure'                => 'SmartSite',
1594
        'obe'                                   => 'ITSO_TRACS/obe',
1595
        'obme'                                  => 'ITSO_TRACS/obe',
1596
        'linuxaudio'                            => 'LinuxDevices/libraries',
1597
 
1598
 
1599
        #
1600
        #   Packages from the LMOS Vob
1601
        #   Too many rules - just hard code the lot of them
1602
        #
1603
        'rolff'                                 => 'DPG_SWBase/Dugite',
1604
        'ftplinux'                              => 'UNKNOWN',
1605
 
1606
        'linux-app-framework'              => 'DPG_SWBase/linux-app-framework',
1607
        'linux-app-upgrade'                => 'DPG_SWBase/linux-app-framework',
1608
        'linux-app-example'                => 'DPG_SWBase/linux-app-framework',
1609
        'linux-app-transfer'               => 'DPG_SWBase/linux-app-framework',
1610
 
1611
        'demo_cp6000'                      => 'LinuxDevices/apps',
1612
        'ivaldemo'                         => 'LinuxDevices/apps',
1613
        'linux-cotral-example'             => 'LinuxDevices/apps',
1614
        'lmos_utest'                       => 'LinuxDevices/apps',
1615
        'ublox-agps-example'               => 'LinuxDevices/apps',
1616
        'fdt-ads5121'                      => 'LinuxDevices/bootstrap',
1617
        'fdt-viper'                        => 'LinuxDevices/bootstrap',
1618
        'linux-grub'                       => 'LinuxDevices/bootstrap',
1619
        'romboot'                          => 'LinuxDevices/bootstrap',
1620
        'u-boot'                           => 'LinuxDevices/bootstrap',
1621
        'u-boot-cobra'                     => 'LinuxDevices/bootstrap',
1622
        'u-boot-hk'                        => 'LinuxDevices/bootstrap',
1623
        'u-boot_viper'                     => 'LinuxDevices/bootstrap',
1624
        'uboot-cobra-tools'                => 'LinuxDevices/bootstrap',
1625
        'uboot-viper-tools'                => 'LinuxDevices/bootstrap',
1626
        'viper-platform-setup'             => 'LinuxDevices/bootstrap',
1627
        'coalesce'                         => 'LinuxDevices/dams',
1628
        'dams_eb5600'                      => 'LinuxDevices/dams',
1629
        'dams_ival'                        => 'LinuxDevices/dams',
1630
        'dams_pcp5700'                     => 'LinuxDevices/dams',
1631
        'dams_tp5600'                      => 'LinuxDevices/dams',
1632
        'demo_msp_lnx_viper'               => 'LinuxDevices/devkit',
1633
        'devkit-tool'                      => 'LinuxDevices/devkit',
1634
        'idp_lnx_viper'                    => 'LinuxDevices/devkit',
1635
        'ival-devkit'                      => 'LinuxDevices/devkit',
1636
        'linux_infra_eb5600'               => 'LinuxDevices/devkit',
1637
        'linux_infra_tp5600'               => 'LinuxDevices/devkit',
1638
        'drivers_api_viper'                => 'LinuxDevices/drivers',
1639
        'gprsmodem-firmware'               => 'LinuxDevices/drivers',
1640
        'linux_driver_csc_cobra'           => 'LinuxDevices/drivers',
1641
        'linux_driver_csc_viper'           => 'LinuxDevices/drivers',
1642
        'linux_driver_ip_over_rs485'       => 'LinuxDevices/drivers',
1643
        'linux_drivers_api'                => 'LinuxDevices/drivers',
1644
        'linux_drivers_cobra'              => 'LinuxDevices/drivers',
1645
        'linux_drivers_eb5600'             => 'LinuxDevices/drivers',
1646
        'linux_drivers_etx86'              => 'LinuxDevices/drivers',
1647
        'linux_drivers_serpent-api'        => 'LinuxDevices/drivers',
1648
        'linux_drivers_tp5600'             => 'LinuxDevices/drivers',
1649
        'linux_drivers_viper'              => 'LinuxDevices/drivers',
1650
        'svgalib'                          => 'LinuxDevices/drivers',
1651
        'usb_gadget_host'                  => 'LinuxDevices/drivers',
1652
        'viper-pic-firmware'               => 'LinuxDevices/drivers',
1653
        'viper-tipsoc-firmware'            => 'LinuxDevices/drivers',
1654
        'viper_csc'                        => 'LinuxDevices/drivers',
1655
        'busybox_cobra'                    => 'LinuxDevices/filesystems',
1656
        'cobra_day0fs_base'                => 'LinuxDevices/filesystems',
1657
        'day0-cotral'                      => 'LinuxDevices/filesystems',
1658
        'e2fsimage'                        => 'LinuxDevices/filesystems',
1659
        'e2fsprogs'                        => 'LinuxDevices/filesystems',
1660
        'ERGDay0UpgradeServer'             => 'LinuxDevices/filesystems',
1661
        'linux_day0fs_base'                => 'LinuxDevices/filesystems',
1662
        'linux_day0fs_cobra'               => 'LinuxDevices/filesystems',
1663
        'linux_day0fs_cp6100_sl6087_fwup'  => 'LinuxDevices/filesystems',
1664
        'linux_day0fs_eb5600'              => 'LinuxDevices/filesystems',
1665
        'linux_day0fs_etx86'               => 'LinuxDevices/filesystems',
1666
        'linux_day0fs_tp5600'              => 'LinuxDevices/filesystems',
1667
        'linux_day0fs_viper'               => 'LinuxDevices/filesystems',
1668
        'linux_day0fs_viper_demo'          => 'LinuxDevices/filesystems',
1669
        'linux_day0fs_viper_dev'           => 'LinuxDevices/filesystems',
1670
        'ERGviper-kernel'                  => 'LinuxDevices/kernel',
1671
        'linux_kernel_bcp4600'             => 'LinuxDevices/kernel',
1672
        'linux_kernel_cobra'               => 'LinuxDevices/kernel',
1673
        'linux_kernel_eb5600'              => 'LinuxDevices/kernel',
1674
        'linux_kernel_etx86'               => 'LinuxDevices/kernel',
1675
        'linux_kernel_tp5600'              => 'LinuxDevices/kernel',
1676
        'linux_kernel_viper'               => 'LinuxDevices/kernel',
1677
        'libviper-mtp'                     => 'LinuxDevices/libraries',
1678
        'libviper-sam'                     => 'LinuxDevices/libraries',
1679
        'libviper-util'                    => 'LinuxDevices/libraries',
1680
        'setMAC'                           => 'LinuxDevices/libraries',
1681
        'support_serpent'                  => 'LinuxDevices/libraries',
1682
        'support_serpent-api'              => 'LinuxDevices/libraries',
1683
        'support_serpent-so'               => 'LinuxDevices/libraries',
1684
        'viper_setmac'                     => 'LinuxDevices/libraries',
1685
        'libviper-mcr'                     => 'LinuxDevices/mcr',
1686
        'linux-mcrfirmware'                => 'LinuxDevices/mcr',
1687
        'mcr400-firmware'                  => 'LinuxDevices/mcr',
1688
        'mcr400_emulator'                  => 'LinuxDevices/mcr',
1689
        'mcrdemo'                          => 'LinuxDevices/mcr',
1690
        'alsa'                             => 'LinuxDevices/opensource',
1691
        'can-utils'                        => 'LinuxDevices/opensource',
1692
        'canbus-j1708-monitor'             => 'LinuxDevices/opensource',
1693
        'dfbtool'                          => 'LinuxDevices/opensource',
1694
        'directfb'                         => 'LinuxDevices/opensource',
1695
        'expat-linux'                      => 'LinuxDevices/opensource',
1696
        'freetype'                         => 'LinuxDevices/opensource',
1697
        'gpsd'                             => 'LinuxDevices/opensource',
1698
        'iniparser'                        => 'LinuxDevices/opensource',
1699
        'iptables'                         => 'LinuxDevices/opensource',
1700
        'irda-utils'                       => 'LinuxDevices/opensource',
1701
        'libftdi'                          => 'LinuxDevices/opensource',
1702
        'libid3tag'                        => 'LinuxDevices/opensource',
1703
        'libjpeg'                          => 'LinuxDevices/opensource',
1704
        'libmad'                           => 'LinuxDevices/opensource',
1705
        'libmodbus'                        => 'LinuxDevices/opensource',
1706
        'libmysql'                         => 'LinuxDevices/opensource',
1707
        'linux-glibc'                      => 'LinuxDevices/opensource',
1708
        'linux-glibc-dbg'                  => 'LinuxDevices/opensource',
1709
        'lrzsz'                            => 'LinuxDevices/opensource',
1710
        'madplay'                          => 'LinuxDevices/opensource',
1711
        'mkimage'                          => 'LinuxDevices/opensource',
1712
        'mtd-utils'                        => 'LinuxDevices/opensource',
1713
        'ncurses'                          => 'LinuxDevices/opensource',
1714
        'openntpd'                         => 'LinuxDevices/opensource',
1715
        'oprofile'                         => 'LinuxDevices/opensource',
1716
        'oprofile-dev'                     => 'LinuxDevices/opensource',
1717
        'pmctst'                           => 'LinuxDevices/opensource',
1718
        'popt'                             => 'LinuxDevices/opensource',
1719
        'ppp'                              => 'LinuxDevices/opensource',
1720
        'rsync'                            => 'LinuxDevices/opensource',
1721
        'smcroute'                         => 'LinuxDevices/opensource',
1722
        'sshpass'                          => 'LinuxDevices/opensource',
1723
        'strace'                           => 'LinuxDevices/opensource',
1724
        'tcpdump'                          => 'LinuxDevices/opensource',
1725
        'tslib'                            => 'LinuxDevices/opensource',
1726
        'AT91load'                         => 'LinuxDevices/programingUtils',
1727
        'CobraLoad'                        => 'LinuxDevices/programingUtils',
1728
        'ERGAT91load_bcp4600'              => 'LinuxDevices/programingUtils',
1729
        'ERGAT91load_eb5600'               => 'LinuxDevices/programingUtils',
1730
        'ERGAT91load_tp5600'               => 'LinuxDevices/programingUtils',
1731
        'flash_copier_eb5600'              => 'LinuxDevices/programingUtils',
1732
        'flash_copier_pcp5700'             => 'LinuxDevices/programingUtils',
1733
        'flash_copier_tp5600'              => 'LinuxDevices/programingUtils',
1734
        'SDCardCopy'                       => 'LinuxDevices/programingUtils',
1735
        'ViperLoad'                        => 'LinuxDevices/programingUtils',
1736
        'arm-926ejs-linux-gnueabi'         => 'LinuxDevices/toolchain',
1737
        'binutils'                         => 'LinuxDevices/toolchain',
1738
        'crosstool-ng'                     => 'LinuxDevices/toolchain',
1739
        'gdb'                              => 'LinuxDevices/toolchain',
1740
        'imageviewer'                      => 'LinuxDevices/utilities',
1741
        'imgput'                           => 'LinuxDevices/utilities',
1742
        'thrash'                           => 'LinuxDevices/utilities',
1743
        'webviewer'                        => 'LinuxDevices/utilities',
1744
        'haserl'                           => 'LinuxDevices/webserver',
1745
        'lua'                              => 'LinuxDevices/webserver',
1746
        'thttpd'                           => 'LinuxDevices/webserver',
1747
        'compat-wireless'                  => 'LinuxDevices/wireless',
1748
        'hostapd-experimental'             => 'LinuxDevices/wireless',
1749
        'rt2571'                           => 'LinuxDevices/wireless',
1750
        'rt2870-firmware'                  => 'LinuxDevices/wireless',
1751
        'rt3070'                           => 'LinuxDevices/wireless',
1752
        'wireless_tools'                   => 'LinuxDevices/wireless',
1753
        'wpa-supplicant'                   => 'LinuxDevices/wireless',
1754
        'zd1211-firmware'                  => 'LinuxDevices/wireless',
1755
 
2931 dpurdie 1756
        # Plan to move these (and a few others too)
1757
        'dropbear'                         => 'LinuxDevices/opensource',
2764 dpurdie 1758
        'debian_dpkg'                      => 'LinuxDevices/opensource',
1759
        'openobex'                         => 'LinuxDevices/opensource',
1760
        'dtc'                              => 'LinuxDevices/opensource',
3045 dpurdie 1761
        'linux_gnu_tools'                  => 'LinuxDevices/toolchain',
2931 dpurdie 1762
            'watchdog'                         => 'LinuxDevices/opensource',
1763
            'zlib_linux'                       => 'LinuxDevices/opensource',
1764
            'sktcat'                           => 'LinuxDevices/opensource',
1765
            'mono'                             => 'LinuxDevices/opensource',
1766
            'libpng'                           => 'LinuxDevices/opensource',
2764 dpurdie 1767
 
2931 dpurdie 1768
        'viper-support'                    => 'LinuxDevices/libraries',
1769
        'linux_types'                      => 'LinuxDevices/libraries',
1770
 
1771
        'busybox'                          => 'LinuxDevices/filesystems',
1772
        'day0-upgrade'                     => 'LinuxDevices/filesystems',
392 dpurdie 1773
    );
1774
 
1775
    my %VobRename = (
2764 dpurdie 1776
        'LMOS'                      => 'LinuxDevices',
1777
        'MANUFACTURING'             => 'Manufacturing',
1778
        'MREF_Package'              => 'MREF_Package',
1779
        'MASS_Dev'                  => 'MASS_Dev_Bus',
2931 dpurdie 1780
        's4k_tracs'                 => 'ITSO_TRACS',
2764 dpurdie 1781
        'MASS_Dev_Tools'            => 'DevTools',
1197 dpurdie 1782
 
2764 dpurdie 1783
        'GMPTE2005'                 => 'ITSO_TRACS',
1784
        'GMPTE2005_obe'             => 'ITSO_TRACS/obe/dummyDir',
1785
        'UK_ITSO_COMPLIANT'         => 'ITSO_TRACS',
2429 dpurdie 1786
 
1787
        'MASS_Dev_Infra/security'   => 'MASS_Dev_Infra/Security',
1788
        'MASS_Dev_Infra/web'        => 'MASS_Dev_Infra/Web',
1789
        'MASS_Dev_Infra/cdss'       => 'MASS_Dev_Infra/Cdss',
2764 dpurdie 1790
 
1791
        'TRACS/faresets'            => 'ITSO_TRACS/faresets',
1792
        'ProjectCD'                 => 'DPG_SWCode/ProjectCD',
1793
 
392 dpurdie 1794
    );
1795
 
2429 dpurdie 1796
    my %PreferredPath = (
1797
        'MASS_Dev_Bus/Reports'      => 1,
1798
        'MASS_Dev_Bus/CBP'          => 1,
1799
        'MASS_Dev_Bus/Business'     => 1,
2764 dpurdie 1800
        'MASS_Dev_Bus/CIPP'         => 1,
2429 dpurdie 1801
 
1802
        'MASS_Dev_Infra/ProjectSpecific' => 1,
1803
    );
1804
 
392 dpurdie 1805
    # default is 1
1806
    my %VobDepth = (
1807
        'DPG_SWBase'                => 2,
1197 dpurdie 1808
        'ITSO_TRACS'                => 2,
1451 dpurdie 1809
        'ITSO_TRACS/Packages'       => 1,
392 dpurdie 1810
        'MASS_Dev_Bus'              => 2,
1811
        'MASS_Dev_Infra'            => 2,
1812
        'MPR'                       => 2,
2764 dpurdie 1813
        'DPG_SWCode/ProjectCD'      => 3,
392 dpurdie 1814
        'TRACS'                     => 2,
1815
        'VIX-PAYMENTS'              => 2,
1816
        'WINCE500'                  => 2,
1817
        'DAMS_mos_diag'             => 2,
1818
        'MASS_Dev_Bus/Financial'    => 3,
2764 dpurdie 1819
        'SmartSite'                 => 2,
392 dpurdie 1820
    );
1821
 
1822
    return ('SVN') if ( $PackageData{$pkgid}{isSVN} );
1823
    my $name = $PackageData{$pkgid}{name};
1824
 
1825
    # If only one VOB
1826
    #
1827
    my $path = '';
1828
    unless ( $PackageData{$pkgid}{BadVob} || $PackageData{$pkgid}{MultiVob} )
1829
    {
1197 dpurdie 1830
        my @paths = reverse sort keys %{$PackageData{$pkgid}{vobPath}};
392 dpurdie 1831
        $path = $paths[0] if exists $paths[0];
1832
    }
1833
 
1834
    #
1835
    #   Some path cleanup
1836
    #
1837
    if ( $path )
1838
    {
2429 dpurdie 1839
        $path =~ s~\s+~~i;
1840
        $path =~ s~/build.pl$~~i;
1841
        $path =~ s~/src$~~i;
395 dpurdie 1842
        $path =~ s~DPC_SWCode/~DPG_SWCode/~i;
392 dpurdie 1843
        $path =~ s~MASS_Dev/Bus/~MASS_Dev_Bus/~i;
1844
        $path =~ s~MASS_Dev_Bus/Cbp/~MASS_Dev_Bus/CBP/~i;
2429 dpurdie 1845
        $path =~ s~MASS_Dev_Bus/WebServices~MASS_Dev_Bus/WebServices~i;
392 dpurdie 1846
        $path =~ s~/Vastraffik/~/Vasttrafik/~;
1847
        $path =~ s~/MREF_Package/ergpostmongui$~/MREF_Package/ergpostmongui~i;
1848
    }
1849
 
1850
    #
1851
    #   Brute force VOB renaming
1852
    #
1853
    foreach my $name ( keys %VobRename  )
1854
    {
1855
        my $newName = $VobRename{$name};
1856
        $path =~ s~^/$name/~/$newName/~i;
1197 dpurdie 1857
        $path =~ s~^/$name$~/$newName~i;
392 dpurdie 1858
    }
1859
 
2764 dpurdie 1860
    $PackageData{$pkgid}{mappingPath} = $path;
1861
 
395 dpurdie 1862
    return $Named{$name}  if ( exists $Named{$name} );
1863
 
1864
    return 'DevTools/ant'  if ( $name =~ m~^ant~ );
1865
    return 'DevTools/ant'  if ( $name =~ m~^jant~ );
1866
 
1867
    return 'MASS_Dev_Dataman' if ( $name =~ m~^dm_~ );
1868
 
1869
    return 'MPR/EMV/emvl2' if ( $name =~ m~^cp[sf]-~ );
1870
 
1871
    return 'COTS' if ( $PackageData{$pkgid}{type} eq 'COTS' && ! exists $PackageData{$pkgid}{vobs}{'LMOS'});
1872
 
1873
    #
1874
    #   Must resolve Multivobs
1875
    #
1876
    if ( $PackageData{$pkgid}{MultiVob} )
1877
    {
1878
        $path = resolveMultiVob($name, $pkgid );
1879
    }
1880
 
392 dpurdie 1881
    my $vob = '';
1882
    my @pathBase;
1883
    my @pathFull;
1884
    $path =~ s~/$~~g;
1885
    $path =~ s~^/~~g;
1886
    @pathFull = split( '/', $path);
1887
    $vob = $pathFull[0] || $path;
1888
    push @pathFull, $vob unless ( @pathFull );
1889
 
1890
    @pathBase = @pathFull;
1891
    delete $pathBase[-1];
1892
    push @pathBase, $vob unless ( @pathBase );
1893
 
1894
#print "Full: @pathFull\n";
1895
#print "Base: @pathBase\n";
1896
 
2764 dpurdie 1897
    if ( $vob eq 'LinuxDevices' )
1898
    {
1899
        return 'UNKNOWN';
1900
    }
1901
 
1902
 
395 dpurdie 1903
    return 'MOS/images'  if (($vob eq 'COTS' || $vob eq 'MOS') &&  $name =~ m~^mos_~ && $name =~ m~\d\d\d\d~);
392 dpurdie 1904
 
1905
    return 'COTS' if ( $vob =~ m~^COTS_~ );
1906
    return 'COTS' if ( $vob eq 'COTS' );
1907
 
1908
    return 'DPG_SWBase/Demos'  if ($vob eq 'DPG_SWBase' &&  $name =~ m~^demo_~ );
1909
    return 'DPG_SWBase/Demos'  if ( $name =~ m~^qt_demo~ );
1910
 
1911
    return 'DPG_SWBase/daf_utils'  if ( $name =~ m~^time_ce~ );
1912
    return 'DPG_SWBase/daf_utils'  if ( $name =~ m~^daf_utils~ );
1913
    return 'DPG_SWBase/daf_utils'  if ( $name =~ m~^daf_bertlv~ );
1914
    return 'DPG_SWBase'            if ( $name =~ m~^daf_br_compiler~ );
1915
    return 'DPG_SWBase'            if ( $name =~ m~^hcp5000icons$~ );
1916
 
1917
    return 'DPG_SWBase/daf_components'  if ( $vob eq 'DPG_SWBase' && $name =~ m~^daf_component_~ );
1918
    return 'DPG_SWBase/daf_transap'  if ( $path =~ m~/transap$~ || $path =~ m~/transap/~ );
1919
#   return 'DPG_SWBase/daf'  if ( $vob eq 'DPG_SWBase' && $name =~ m~^daf_~ );
1920
    return 'DPG_SWBase/IDC'  if ( $vob =~ m~DPG_SW~ && $name =~ m~^IDC~ );
1921
 
1922
    return 'DPG_SWCode/dac'  if ( $name =~ m~^dac_~ );
1923
    return 'DPG_SWCode/ddu'  if ( $name =~ m~^ddu_~ );
1924
    return 'DPG_SWCode/utilities'  if ( $vob eq 'DPG_SWCode' && $path =~ m/utilities/ );
1925
 
1926
    if ( $name =~ m~^VIX~ || $name =~ m~^ERG~ )
1927
    {
1928
        return 'MREF_Package'
395 dpurdie 1929
            if ( $vob =~ m~^CORE~ || $vob =~ m~^MASS~ || $vob =~ m~^MREF~ );
392 dpurdie 1930
    }
1931
 
1932
#    if ( $vob ne 'MREF_Package' )
1933
#    {
1934
#print "---- $name, $path\n" if ( $name =~ m~^VIX~ );
1935
#print "---- $name, $path\n" if ( $name =~ m~^ERG~ );
1936
#    }
1937
 
1938
    #
1939
    #   ProjectCd is badly done
1940
    #   Many packages are in named directories, some are not.
1941
    #
2764 dpurdie 1942
    if ( defined $pathFull[1] && $pathFull[1] eq 'ProjectCD' )
392 dpurdie 1943
    {
2764 dpurdie 1944
        push @pathBase, $pathFull[2] if ( defined $pathFull[2]  );
392 dpurdie 1945
    }
1946
 
395 dpurdie 1947
    #
1948
    #   Detect core_xxx packages
1949
    #
1950
    if ( $vob eq 'MASS_Dev_Infra' && $path =~ m~/core_~ )
1951
    {
1952
        return "$vob/Core";
1953
    }
1954
 
392 dpurdie 1955
    return "UNKNOWN"
1956
        unless ( $vob );
1957
 
1958
    #
2429 dpurdie 1959
    #   Can we map the package into a preferred path
1960
    #
1961
    foreach my $ppath ( sort keys %PreferredPath )
1962
    {
1963
        if ( $path =~ m~${ppath}(/|$)~i )
1964
        {
1965
#print "---- Preferred path: $name, $ppath\n";
1966
            return $ppath;
1967
        }
1968
 
1969
        #
1970
        #   Try a little harder
1971
        #
1972
        foreach my $tpath  ( keys %{$PackageData{$pkgid}{vobPath}} )
1973
        {
1974
            if ( $tpath =~ m~${ppath}(/|$)~i )
1975
            {
1976
#print "---- Preferred path: $name, $ppath\n";
1977
                return $ppath;
1978
            }
1979
        }
1980
    }
1981
 
1982
    #
2764 dpurdie 1983
    #   Last resort
392 dpurdie 1984
    #   Determine depth for this path
1985
    #
1986
    my $depth = 1;
1987
    foreach ( reverse sort keys %VobDepth)
1988
    {
1989
        if ( $path =~ m~^$_~ )
1990
        {
1991
            $depth = $VobDepth{$_};
1992
            last;
1993
        }
1994
    }
2429 dpurdie 1995
 
392 dpurdie 1996
#print "--Joining: $name, $depth, @pathBase\n";
1997
    return pathJoin($depth, $path, $name, @pathBase);
1998
}
1999
 
2000
sub pathJoin
2001
{
2002
    my ($num, $path, $name, @data) = @_;
2003
    my $val = '';
2004
    my $char = '';
2005
    for( my $ii = 0; $ii < $num; $ii++)
2006
    {
2007
        last unless ( defined $data[$ii] );
2008
        $val = $val . $char . $data[$ii];
2009
        $char = '/'
2010
    }
2011
#print "----$path, $name: $num, @data --> $val\n";
2012
    return $val;
2013
}
2014
 
395 dpurdie 2015
 
392 dpurdie 2016
#-------------------------------------------------------------------------------
395 dpurdie 2017
# Function        : resolveMultiVob
2018
#
2019
# Description     : Time to resolve multivob issues
2020
#
2021
# Inputs          : $name           - Package Name
2022
#                   $pkgid          - Package ID
2023
#
2024
#
2025
# Returns         : Resulved path
2026
#
2027
sub resolveMultiVob
2028
{
2029
    my ($name, $pkgid) = @_;
2030
    my $path = '';
2031
 
2032
my %preferredVob = (
2033
        'uiconv'        => 'DPG_SWBase',
2034
        'gnupg'         => 'COTS',
2035
    );
2036
 
2037
 
2038
    my $pvob = $preferredVob{$name};
2039
    unless ( defined $pvob )
2040
    {
2041
        if ( exists ($PackageData{$pkgid}{vobs}{MASS_Dataman}) && exists ($PackageData{$pkgid}{vobs}{MASS_Dev_Dataman})  )
2042
        {
2043
            $pvob = 'MASS_Dev_Dataman';
2044
        }
2045
 
2046
        if ( exists ($PackageData{$pkgid}{vobs}{DPG_SWBase}) && exists ($PackageData{$pkgid}{vobs}{DPG_SWCode})  )
2047
        {
2048
            $pvob = 'DPG_SWCode';
2049
        }
2050
 
2051
        if ( exists ($PackageData{$pkgid}{vobs}{MREF_Package}) )
2052
        {
2053
            $pvob = 'MREF_Package';
2054
        }
2055
 
2056
        if ( exists ($PackageData{$pkgid}{vobs}{MASS_Dev}) && exists ($PackageData{$pkgid}{vobs}{MASS_Dev_Bus}))
2057
        {
2058
            $pvob = 'MASS_Dev_Bus';
2059
        }
2060
 
2061
        if ( exists ($PackageData{$pkgid}{vobs}{s4k_obe}) && exists ($PackageData{$pkgid}{vobs}{GMPTE2005}))
2062
        {
2063
            $pvob = 'GMPTE2005';
2064
        }
2065
 
2066
        if ( exists ($PackageData{$pkgid}{vobs}{s4k_obe}) && exists ($PackageData{$pkgid}{vobs}{GMPTE2005_obe}))
2067
        {
2068
            $pvob = 'GMPTE2005_obe';
2069
        }
2070
 
2071
        if ( exists ($PackageData{$pkgid}{vobs}{TRACS}) && exists ($PackageData{$pkgid}{vobs}{GMPTE2005}))
2072
        {
2073
            $pvob = 'GMPTE2005';
2074
        }
2075
 
2076
        if ( exists ($PackageData{$pkgid}{vobs}{MASS_Dev_Infra}) && exists ($PackageData{$pkgid}{vobs}{MASS_Dev_Tools}))
2077
        {
2078
            $pvob = 'MASS_Dev_Infra';
2079
        }
2080
 
2081
        if ( exists ($PackageData{$pkgid}{vobs}{COTS}) && exists ($PackageData{$pkgid}{vobs}{MOS}))
2082
        {
2083
            $pvob = 'MOS';
2084
        }
2085
 
2086
        if ( exists ($PackageData{$pkgid}{vobs}{COTS}) && exists ($PackageData{$pkgid}{vobs}{MPR}))
2087
        {
2088
            $pvob = 'MPR';
2089
        }
2090
 
2091
        if ( exists ($PackageData{$pkgid}{vobs}{COTS}) && exists ($PackageData{$pkgid}{vobs}{COTS_Java}))
2092
        {
2093
            $pvob = 'COTS';
2094
        }
2095
    }
2096
 
2097
    if ( defined $pvob )
2098
    {
2099
        if ( exists $PackageData{$pkgid}{vobResolver}{$pvob} )
2100
        {
2101
            $path = $PackageData{$pkgid}{vobResolver}{$pvob} ;
2102
        }
2103
    }
2104
    else
2105
    {
2106
        Message ("Unresolved multivob: $PackageData{$pkgid}{name}");
2107
#DebugDumpData("DATA", \$PackageData{$pkgid} );
2108
#exit 1;
2109
    $path = 'UNKNOWN';
2110
    }
2111
 
2112
    return $path;
2113
}
2114
 
2115
 
2116
#-------------------------------------------------------------------------------
392 dpurdie 2117
# Function        : examineVcsTag
2118
#
2119
# Description     : Examine a VCS Tag and determine if it looks like rubbish
2120
#
2121
# Inputs          : Tag to examine
2122
#
2123
# Returns         : Badness
2124
#
2125
sub examineVcsTag
2126
{
2127
    my ($vcstag) = @_;
2128
    my $bad = 0;
2129
    if ( $vcstag =~ m~^CC::(.*?)(::(.+))?$~ )
2130
    {
2131
        my $path = $1  || '';
2132
        my $label = $2 || '';
2133
#print "$vcstag, $bad, $path, $label\n";
2134
        $bad = 1 unless ( $label );
2135
        $bad = 1 if ( $label =~ m~^N/A$~i || $label  =~ m~^na$~i );
2136
 
2137
        $bad = 1 unless ( $path );
2138
        $bad = 1 if ( $path =~ m~^N/A$~i || $path  =~ m~^na$~i );
2764 dpurdie 2139
        $bad = 1 if ( $path =~ m~^/dpkg_archive~ || $path  =~ m~^dpkg_archive~ );
2140
        $bad = 1 if ( $path =~ m~^/devl/~ || $path  =~ m~^devl/~ );
395 dpurdie 2141
        $bad = 1 if ( $path =~ m~^CVS~ );
392 dpurdie 2142
        $bad = 1 if ( $path =~ m~^http:~i );
2143
        $bad = 1 if ( $path =~ m~^[A-Za-z]\:~ );
2144
        $bad = 1 if ( $path =~ m~^//~ );
2145
        $bad = 1 if ( $path =~ m~^/blade1/~ );
2146
        $bad = 1 if ( $path =~ m~^/devl/~ );
394 dpurdie 2147
        $bad = 1 if ( $path =~ m~^/*none~i );
2148
        $bad = 1 if ( $path =~ m~^/*NoWhere~i );
2149
        $bad = 1 if ( $path =~ m~^-$~i );
2764 dpurdie 2150
        $bad = 1 if ( $path =~ m~^cvsserver:~ );
2151
        $bad = 1 if ( $path =~ m~,\s*module:~ );
392 dpurdie 2152
        $bad = 1 if ( $path =~ m~[()]~ );
2153
#        $bad = 1 unless ( $path =~ m~^/~ );
2154
    }
2155
    else
2156
    {
2157
        $bad = 1;
2158
    }
2159
    return $bad;
2160
}
2161
 
2162
#-------------------------------------------------------------------------------
2163
# Function        : usedBy
2164
#
2165
# Description     : Given a pvid, determine which release(s) need it
2166
#
2167
# Inputs          : $pvid
2168
#
2169
# Returns         : Nothing
2170
#
2171
sub usedBy
2172
{
2173
    my ($pvid) = @_;
2174
    Error ("PVID is not an essential package") unless ( exists $ScmPackages{$pvid} );
2175
 
2176
    my @releases = @{$ScmPackages{$pvid}{'release'}} if exists($ScmPackages{$pvid}{'release'});
2177
    my @users = @{$ScmPackages{$pvid}{'usedBy'}} if exists($ScmPackages{$pvid}{'usedBy'});
2178
 
2179
    while ( @users )
2180
    {
2181
        my $pv = pop @users;
2182
        push @releases, @{$ScmPackages{$pv}{'release'}} if (exists $ScmPackages{$pv}{'release'});
2183
        push @users, @{$ScmPackages{$pv}{'usedBy'}} if (exists($ScmPackages{$pv}{'usedBy'}));
2184
    }
2185
 
2186
    my %releases;
2187
    my %ireleases;
2188
    my @dreleases = ();
2189
    my @ireleases;
2190
    foreach ( @releases )
2191
    {
2192
        if ( $ScmPackages{$pvid}{tlp}  )
2193
        {
2194
            next if ( exists $releases{$_} );
2195
            push @dreleases, $_;
2196
            $releases{$_} = 1;
2197
        }
2198
        else
2199
        {
2200
            next if ( exists $ireleases{$_} );
2201
            push @ireleases, $_;
2202
            $ireleases{$_} = 1;
2203
        }
2204
    }
2205
    return \@dreleases, \@ireleases;
2206
}
2207
 
2208
#-------------------------------------------------------------------------------
2209
# Function        : smartPackageType
2210
#
2211
# Description     : Have a look at the projects in the package set and
2212
#                   attempt to determine what sort of mechanism to use
2213
#
2214
# Inputs          : pkgid            - Package ID
2215
#
2216
# Returns         : Type, Array of suffixes
2217
#
2218
sub smartPackageType
2219
{
2220
    my ($pkgid) = @_;
2221
    my %suffixes;
2222
 
2223
    #
2224
    #   Suffixes for all packages
2225
    #
2226
    foreach  ( @{$PackageSet{$pkgid}} )
2227
    {
2228
        my $suffix = $ScmPackages{$_}{'suffix'};
2229
        $suffixes{$suffix}++;
2230
    }
2231
 
2232
    my $packageType = 'UNKNOWN';
2233
 
2234
    if ( exists $suffixes{'.cots'} ) {
2235
        $packageType = 'COTS';
2236
 
2237
    } elsif ( exists $suffixes{'.tool'} ) {
2238
        $packageType = 'TOOL';
2239
 
2240
    } elsif ( scalar (keys %suffixes ) == 1 ) {
2241
        $packageType = 'SINGLE_PROJECT';
2242
 
2243
    } else {
2244
        $packageType = 'MULTIPLE_PROJECT';
2245
    }
2246
 
2247
    return $packageType, keys %suffixes;
2248
}
2249
 
394 dpurdie 2250
 
392 dpurdie 2251
#-------------------------------------------------------------------------------
394 dpurdie 2252
# Function        : vcsCleanup
2253
#
2254
# Description     : Cleanup and rewrite a vcstag
2255
#
2256
#                   DUPLICATED IN:
2257
#                       - cc2svn_procdata
2429 dpurdie 2258
#                       - cc2svn_importpackage
394 dpurdie 2259
#
2260
# Inputs          : vcstag
2261
#
2262
# Returns         : Cleaned up vcs tag
2263
#
2264
sub vcsCleanup
2265
{
2266
    my ($tag) = @_;
2764 dpurdie 2267
    $tag =~ tr~\\/~/~;                              # Force use of /
2268
    $tag =~ s~/+$~~;                                # Trailing /
394 dpurdie 2269
    if ( $tag =~ m~^CC::~ )
2270
    {
2764 dpurdie 2271
        $tag =~ s~CC::/VOB:/~CC::/~;                # Kill stuff
2429 dpurdie 2272
        $tag =~ s~CC::load\s+~CC::~;                # Load rule
2273
        $tag =~ s~CC::\s+~CC::~;                    # Leading white space
2274
        $tag =~ s~CC::[A-Za-z]\:/~CC::/~;           # Leading driver letter
2275
        $tag =~ s~CC::/+~CC::/~;                    # Multiple initial /'s
2276
        $tag =~ s~/build.pl::~::~i;
2277
        $tag =~ s~/src::~::~i;
394 dpurdie 2278
        $tag =~ s~MASS_Dev_Bus/Cbp/~MASS_Dev_Bus/CBP/~i;
2279
        $tag =~ s~MASS_Dev_Bus~MASS_Dev_Bus~i;
2280
        $tag =~ s~/MASS_Dev/Infra~MASS_Dev_Infra~i;
2281
        $tag =~ s~/MASS_Dev/Bus/web~/MASS_Dev_Bus/web~i;
2282
 
2283
        $tag =~ s~/Vastraffik/~/Vasttrafik/~;
2284
        $tag =~ s~/MREF_Package/ergpostmongui$~/MREF_Package/ergpostmongui~i;
395 dpurdie 2285
        $tag =~ s~DPC_SWCode/~DPG_SWCode/~i;
394 dpurdie 2286
    }
2287
    return $tag;
2288
}
2289
 
2290
#-------------------------------------------------------------------------------
392 dpurdie 2291
# Function        : extractVob
2292
#
2293
# Description     : Extract the VOB for a package
2294
#
2295
# Inputs          : $entry              - pvid
2296
#
2297
# Returns         : Vob Name
2298
#
2299
sub extractVob
2300
{
2301
    my ($entry) = @_;
2302
 
394 dpurdie 2303
    $ScmPackages{$entry}{'vcstag'} = vcsCleanup($ScmPackages{$entry}{'vcstag'});
392 dpurdie 2304
 
2305
    my $tag = $ScmPackages{$entry}{vcstag};
2306
    my $package = $ScmPackages{$entry}{name};
2307
    if ( $tag =~ m~^SVN::~ )
2308
    {
2309
        $tag =~ m~SVN::(.*)(/tags/|/branches/|/trunk)~;
2310
        return 'SVN', $1;
2311
    }
2312
 
2313
    if ( $tag !~ m~^CC::~ || examineVcsTag ($tag)){
2314
        $ScmPackages{$entry}{BadVob} = 1;
2315
        return undef;
2316
    }
2317
 
2318
    $tag =~ m~^CC::(.*)::(.*)~;
2319
    my $path = '/' . $1;
2320
    $path =~ tr~\\/~/~s;
2321
    my @pelements = split( m'/+', $path);
2322
    my $vob = $pelements[1];
2323
    unless ( $vob )
2324
    {
2325
        $ScmPackages{$entry}{BadVob} = 1;
2326
        return undef;
2327
    }
2328
 
2329
    $ScmPackages{$entry}{VobName} = $vob;
2330
    $ScmPackages{$entry}{VobPath} = $path;
2331
    return $vob, $path;
2332
}
2333
 
2334
#-------------------------------------------------------------------------------
2335
# Function        : getBadLabelData
2336
#
2337
# Description     : Read in a previous log file and determine versions that
2338
#                   have already been examined
2339
#
2340
# Inputs          : 
2341
#
2342
# Returns         : 
2343
#
2344
sub getBadLabelData
2345
{
2346
    my $badFile = 'cc2svn_labeltest.bad.txt';
2347
    Message ("Reading Bad Label: $badFile");
2348
    open (my $fh, '<', $badFile ) || Error ("Cannot open $badFile");
2349
    while ( <$fh> )
2350
    {
2351
        #
2352
        #   Format of data is:
2353
        #       pvid, $name:, $tag, $rv
2354
        #
2355
        chomp;
2356
        next if ( m~^#~ );
2357
        my @data = split (/\s*,\s*/, $_);
2358
        next unless ( $data[0] );
2359
        $ScmPackages{$data[0]}{BadCCView} = 1 if exists ($ScmPackages{$data[0]});
2360
    }
2361
    close $fh;
2362
}
2363
 
2364
#-------------------------------------------------------------------------------
2450 dpurdie 2365
# Function        : getProtectedPackages
2366
#
2367
# Description     : Read in protected package data
2368
#
2369
# Inputs          : 
2370
#
2371
# Returns         : 
2372
#
2373
sub getProtectedPackages
2374
{
2375
    my $badFile = 'cc2svn_protected.txt';
2376
    Message ("Reading Protected Package: $badFile");
2377
    open (my $fh, '<', $badFile ) || Error ("Cannot open $badFile");
2764 dpurdie 2378
    my $section_comment;
2450 dpurdie 2379
    while ( <$fh> )
2380
    {
2381
        #
2382
        #   Format of data is:
2383
        #       packageName     - protected
2384
        #      -packageName     - Known Broken
2385
        #
2764 dpurdie 2386
        #   Line Comment is '#'
2387
        #   Package Comment is delimted by White space
2388
        #   Section Comment is [ comment ]
2389
        #
2450 dpurdie 2390
        s~\s+$~~;
2391
        s~^\s+~~;
2392
        next if ( m~^#~ );
2764 dpurdie 2393
        if ( m~^\s*\[\s*(.*?)\s*\]~ )
2394
        {
2395
            $section_comment = $1;
2396
            next;
2397
        }
2398
 
2450 dpurdie 2399
        $_ .= ' ';
2400
        my @data = split (/ /, $_, 2);
2401
        next unless ( $data[0] );
2402
        my $name = $data[0];
2764 dpurdie 2403
        my $comment = $data[1];
2404
        $comment =~ s~^\s+#~~;
2405
        $comment =~ s~^\s+~~;
2406
        $comment =~ s~\s+$~~;
2407
        $comment = $comment || $section_comment;
2450 dpurdie 2408
        my $mode = 'Protected';
2409
        if ( $name =~ m~^-(.*)~ )
2410
        {
2411
            $name = $1;
2412
            $mode = 'Broken'
2413
        }
2764 dpurdie 2414
        $Protected{$name}{mode} = $mode;
2415
        $Protected{$name}{comment} = $comment if ( $comment );
2450 dpurdie 2416
    }
2417
    close $fh;
2418
#    DebugDumpData('%Protected', \%Protected );
2419
}
2420
 
2421
#-------------------------------------------------------------------------------
392 dpurdie 2422
#   Documentation
2423
#
2424
 
2425
=pod
2426
 
2427
=for htmltoc    SYSUTIL::cc2svn::
2428
 
2429
=head1 NAME
2430
 
2431
cc2svn_procdata - Process CC2SVN Essential Package Data
2432
 
2433
=head1 SYNOPSIS
2434
 
2435
  jats cc2svn_procdata [options]
2436
 
2437
 Options:
2438
    -help              - brief help message
2439
    -help -help        - Detailed help message
2440
    -man               - Full documentation
2441
    -usedby=PVID       - Determine 'Releases' that use a specified PVID
2442
    -allpackages       - Generate data for ALL packages
2443
 
2444
=head1 OPTIONS
2445
 
2446
=over 8
2447
 
2448
=item B<-help>
2449
 
2450
Print a brief help message and exits.
2451
 
2452
=item B<-help -help>
2453
 
2454
Print a detailed help message with an explanation for each option.
2455
 
2456
=item B<-man>
2457
 
2458
Prints the manual page and exits.
2459
 
2460
=item B<-usedby=PVID>
2461
 
2462
This option will alter the operation of the program. It will display the
2463
releases that 'use' the specified PVID and then exit.
2464
 
2465
=back
2466
 
2467
=head1 DESCRIPTION
2468
 
2469
This program is a tool used in the conversion of ClearCase VOBS to subversion.
2470
 
2471
=over 8
2472
 
2473
=item *
2474
 
2475
It will process a datafile and generate infiormation used by other tools.
2476
 
2477
=item *
2478
 
2479
It will display suspect package versions.
2480
 
2481
=item *
2482
 
2483
It will generate an HTML file with a great deal of information about the
2484
packages in the conversion.
2485
 
2486
=item *
2487
 
2488
It can backtrack a PVID and report the Release or Releases that need the package
2489
version
2490
 
2491
=back
2492
 
2493
=cut
2494