Subversion Repositories DevTools

Rev

Rev 2553 | Rev 2652 | Go to most recent revision | Details | Compare with Previous | 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;
2449 dpurdie 44
our %ScmPkgNames;
392 dpurdie 45
our %ScmSuffixes;
46
our %ScmAllPackages;
395 dpurdie 47
our %ScmAllBomProjects;
48
our %ScmSboms;
2449 dpurdie 49
our %Protected;
392 dpurdie 50
 
2321 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 => '' },
2449 dpurdie 71
    SC =>  {file => 'PackageConversion_Issues.html'           , title => 'Packages with known issues'       , tag => '' },
2321 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();
2449 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}}, $_;
2449 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;
2553 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
2321 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
    }
2321 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
 
2321 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}};
2548 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
 
2548 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
#
2354 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 );
2635 dpurdie 291
 
292
    if ( exists $PackageData{$pkgid}{mappingPath} && $PackageData{$pkgid}{mappingPath} =~ m/LinuxDevices/ )
293
    {
294
        printf "%-35s %s\n",$PackageData{$pkgid}{name}, $PackageData{$pkgid}{mappingPath};
295
    }
296
 
297
 
2354 dpurdie 298
    my $repo_lc = lc $repo;
392 dpurdie 299
 
2354 dpurdie 300
    if (exists $Repos_lowercase{$repo_lc} && $Repos_lowercase{$repo_lc} ne $repo )
301
    {
302
        Error ("Package mapping: Mapped to Repo with same name, but different case",
303
               "Package: $PackageData{$pkgid}{name}",
304
               "Mapped repo   : $repo",
305
               "Already mapped: $Repos_lowercase{$repo_lc}");
306
    }
307
 
308
    $Repos_lowercase{$repo_lc} = $repo;
392 dpurdie 309
    $PackageData{$pkgid}{mappedRepo} = $repo;
310
    push @{$Repos{$repo}}, $pkgid;
2354 dpurdie 311
 
312
    if ( $repo eq 'SVN' )
313
    {
314
        my %RepoList;
315
        foreach my $pvid ( @{$PackageSet{$pkgid}} )
316
        {
317
            my $repo = $ScmPackages{$pvid}{'vcstag'};
318
            if ( $repo =~ m~SVN::AUPERASVN01/(.*)/(.*?)(/tags/|/branches/|/trunk)~i )
319
            {
320
                my $repo = $1;
321
                unless( exists $RepoList{$repo} )
322
                {
323
                    $RepoList{$repo} = 1 ;
324
                    $PackageData{$pkgid}{mappedRepo} = $repo;
325
                    push @{$Repos{$repo}}, $pkgid;
326
                }
327
            }
328
        }
329
 
330
    }
392 dpurdie 331
}
332
 
333
foreach ( keys %Repos )
334
{
335
    @{$Repos{$_}} = sort{ uc($PackageData{$a}{name}) cmp uc($PackageData{$b}{name}) } @{$Repos{$_}};
336
    my $base = $_;
337
    my $index = '-';
338
    if (m~^(.*?)/(.*)~ )
339
    {
340
        $base = $1;
341
        $index = $2;
342
    }
343
    push @{$RepoSubIndex{$base}{$index}}, @{$Repos{$_}};
344
    @{$Repos{$base}} = () unless ( exists $Repos{$base} );
345
}
346
#DebugDumpData("RepoSubIndex", \%RepoSubIndex);
347
#DebugDumpData("Repos", \%Repos);
348
 
349
#
350
#   Create a list of Packages
351
#
2354 dpurdie 352
my $totalPackageCount = 0;
392 dpurdie 353
{
354
    my $file = "PackageNames.txt";
355
    Message("Create Package Name List", $file);
356
    open ( my $fh, '>', $file ) || Error ("Cannot open $file", "Error: $!");
357
 
358
    foreach ( sort {$PackageData{$a}{name} cmp $PackageData{$b}{name} } keys %PackageData )
359
    {
360
        print $fh "$PackageData{$_}{name}\n";
2354 dpurdie 361
        $totalPackageCount++;
392 dpurdie 362
 
363
    }
364
    close $fh;
2354 dpurdie 365
    Message("Unique Package Names: $totalPackageCount");
392 dpurdie 366
#    DebugDumpData("PackageData", \%PackageData);
367
}
368
 
1341 dpurdie 369
#
370
#   Determine Releases that have multiple versions of a package
371
#   ie: xxxx.cr and xxxxx.ssw
372
#
373
 
374
 
375
 
1270 dpurdie 376
##=pod
377
###
378
###   Display MutiVob Packages
379
###
380
##    foreach my $pkgid (  keys %PackageData )
381
##    {
382
##        next unless ( $PackageData{$pkgid}{MultiVob}  );
383
##        Message("Multi VOB package: $PackageData{$pkgid}{name}");
384
##        foreach my $vob ( keys %{$PackageData{$pkgid}{vobs}} )
385
##        {
386
##            Message("    $vob");
387
##            foreach my $pvid ( @{$PackageData{$pkgid}{vobs}{$vob}} )
388
##            {
389
##                Message ("        $ScmPackages{$pvid}{'version'}, $ScmPackages{$pvid}{'vcstag'}");
390
##            }
391
##        }
392
###DebugDumpData("DATA",$PackageData{$pkgid} );
393
##    }
394
##=cut
392 dpurdie 395
 
1270 dpurdie 396
##=pod
397
##    foreach my $pkgid (  keys %PackageData )
398
##    {
399
##        next unless ( $PackageData{$pkgid}{isSVN}  );
400
##        Message("Fully SVN Converted: $PackageData{$pkgid}{name}");
401
##    }
402
##=cut
392 dpurdie 403
 
1270 dpurdie 404
##=pod
405
##    my @BadTags;
406
##    foreach my $pvid (  keys %ScmPackages )
407
##    {
408
##        next unless ( $ScmPackages{$pvid}{BadVob}  );
409
##        push @BadTags, $pvid;
410
##    }
411
##
412
##    Message("Bad VcsTag packages: ". scalar @BadTags);
413
##    foreach my $pvid ( @BadTags )
414
##    {
415
##        Message ("    $pvid, $ScmPackages{$pvid}{'name'}, $ScmPackages{$pvid}{'version'}, $ScmPackages{$pvid}{'vcstag'}");
416
##    }
417
##=cut
392 dpurdie 418
 
419
    generateHTML();
420
    generateImportData();
421
    exit 0;
422
 
423
#-------------------------------------------------------------------------------
424
# Function        : generateImportData
425
#
426
# Description     : Generate data to be used by the importPackage util.
427
#                   Will provide Target Repo
428
#
429
# Inputs          : Nothing
430
#
431
# Returns         : 
432
#
433
sub generateImportData
434
{
435
    my %Data;
1270 dpurdie 436
    Message("Generate Data for utilties");
392 dpurdie 437
    {
438
        my $file = "cc2svn.repo.txt";
439
        Message ("Create: $file");
440
        my $fh = ConfigurationFile::New( $file );
441
 
442
        foreach my $pkgid ( sort {$PackageData{$a}{name} cmp $PackageData{$b}{name} } keys %PackageData )
443
        {
444
            my $repo = $PackageData{$pkgid}{mappedRepo};
445
            my $name = $PackageData{$pkgid}{name};
2354 dpurdie 446
            my $svn = $PackageData{$pkgid}{isSVN} ? 'SVN' : '---';
447
 
448
            my $youngest = $PackageData{$pkgid}{youngAge};
449
            my $youngestNonRipple = $PackageData{$pkgid}{youngAgeNonRipple} || 0;
450
            my $youngestNonBuildadm = $PackageData{$pkgid}{nonBuildadm} || 0;
451
 
452
            $youngest =  int($youngest);
453
            $youngestNonRipple =  int($youngestNonRipple) || '9999';
454
            $youngestNonBuildadm = int($youngestNonBuildadm) || '9999';
455
 
456
            my $txt = sprintf ("Last:%5d, User:%5d, NonR:%5d, $svn", $youngest, $youngestNonBuildadm, $youngestNonRipple);
457
           $txt .= sprintf (" :: %40s -repo=%s", $name, $repo );
458
            $fh->WriteLn($txt);
2438 dpurdie 459
 
460
            #
461
            #   Save in a readable form too
462
            #
463
            $Data{$name}{repo} = $repo;
464
            $Data{$name}{SVN} = 1 if $PackageData{$pkgid}{isSVN};
465
            $Data{$name}{youngest} = $youngest;
466
            $Data{$name}{ynr} = $youngestNonRipple;
467
            $Data{$name}{ynb} = $youngestNonBuildadm;
2548 dpurdie 468
            $Data{$name}{protected} = $Protected{$PackageData{$pkgid}{name}}{mode} if exists $Protected{$PackageData{$pkgid}{name}};
392 dpurdie 469
        }
470
        $fh->Close();
471
    }
472
 
473
    my $file = "cc2svn.repo.dat";
474
    Message ("Create: $file");
475
    my $fh = ConfigurationFile::New( $file );
476
    $fh->DumpData(
477
        "\n# Repo Mapping.\n#\n",
478
        "ScmRepoMap", \%Data );
479
 
480
    $fh->Close();
481
}
482
 
483
#-------------------------------------------------------------------------------
2321 dpurdie 484
# Function        : generateHTMLHeader
392 dpurdie 485
#
2321 dpurdie 486
# Description     : Create an HTML Header
392 dpurdie 487
#
2321 dpurdie 488
# Inputs          : $section        - Section tag
392 dpurdie 489
#
2321 dpurdie 490
# Returns         : Handle to use
392 dpurdie 491
#
2321 dpurdie 492
sub generateHTMLHeader
392 dpurdie 493
{
2321 dpurdie 494
    my ($section) = @_;
495
    my $handle;
392 dpurdie 496
 
2321 dpurdie 497
    Error ("Bad HTML section id: $section") unless ( exists $htmlData{$section} );
498
    $currentSection = $section;
499
    my $fname = $htmlData{$section}{file};
500
    my $title = $htmlData{$section}{title};
2354 dpurdie 501
    Message("Generating: $title");
392 dpurdie 502
 
2321 dpurdie 503
    open ($handle, '>', $fname) || Error ("Cannot create HTML: $fname");
504
    print $handle <<"HEADER";
505
<!DOCTYPE $handle PUBLIC "-//W3C//DTD $handle 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
392 dpurdie 506
<html>
507
<head>
2321 dpurdie 508
<title>$title</title>
392 dpurdie 509
<script type="text/javascript">
510
function click_expandingMenuHeader(obj,sectionName)
511
{ 
512
var x=document.getElementById("cssprop_" + sectionName).parentNode.className;
513
if (x.indexOf("expandingMenuNotSelected")>-1)
514
	{
515
	x=x.replace("expandingMenuNotSelected","expandingMenuSelected");
516
	document.getElementById("cssprop_" + sectionName).parentNode.className=x;
517
	document.getElementById("cssprop_" + sectionName).style.display="block";
518
	}
519
else
520
	{
521
	x=x.replace("expandingMenuSelected","expandingMenuNotSelected");
522
	document.getElementById("cssprop_" + sectionName).parentNode.className=x;
523
	document.getElementById("cssprop_" + sectionName).style.display="none";
524
	}
525
}
526
 
527
function flipStyleByName(style, prop, val, val2)
528
{
529
    var mysheet=document.styleSheets[0];
530
    var myrules=mysheet.cssRules? mysheet.cssRules: mysheet.rules
531
    for (i=0; i<myrules.length; i++)
532
    {
533
        if(myrules[i].selectorText.toLowerCase()==style)
534
        {
535
            targetrule=myrules[i];
536
 
537
            targetflag = 'ddpStuff.' + style
538
            targetrule[targetflag] = ! targetrule[targetflag];
539
            val = targetrule[targetflag] ? val : val2;
540
 
541
            targetrule.style.setProperty(prop, val,'important');
542
            break;
543
        }
544
    }
545
}
546
 
547
</script>
548
<style TYPE="text/css">
549
 
550
.nonEssential {}
551
.essential {}
552
 
553
.expandingMenu
554
{
555
xwidth:165px;
556
overflow:hidden;
557
}
558
 
559
.expandingMenuHeader
560
{
561
padding-left:12px;
562
margin-bottom:2px;
563
cursor:pointer;
564
}
565
 
566
.expandingMenuItem
567
{
568
width:145px;
569
padding-left:12px;
570
margin-bottom:3px;
571
}
572
 
573
.expandingMenuGroup {
574
xwidth:160px;
575
border:1px solid #d4d4d4;
576
margin-bottom:4px;
577
padding-top:4px;
578
padding-bottom:4px;
579
background-color:#f8f8f8;
580
}
581
 
582
.expandingMenuSelected {
583
background-image:url(http://www.w3schools.com/images/minus_arrow.gif);
584
background-repeat:no-repeat;
585
background-position:1px 3px;
586
}
587
 
588
.expandingMenuNotSelected {
589
background-image:url(http://www.w3schools.com//images/plus_arrow.gif);
590
background-repeat:no-repeat;
591
background-position:1px 3px;
592
}
593
 
594
.packageTitle {
595
    background-color:#FFFF99;
596
}
597
 
598
.listTitle {
599
    text-align:left;
600
    vertical-align:top;
601
}
602
 
603
.paddedTable {
604
    border-spacing: 10px 0px;
605
}
606
</style>
607
</head>
608
 
609
HEADER
2321 dpurdie 610
    print $handle "<body>\n";
611
    print $handle "<p>Generated: " . localtime() . "\n";
392 dpurdie 612
 
613
    #
614
    #   Generate an index
615
    #
2321 dpurdie 616
    print $handle htmlH1(anchor("Index", 'Index'));
392 dpurdie 617
 
2321 dpurdie 618
    print $handle "<dl>";
619
    foreach my $section ( sort keys %htmlData )
620
    {
621
        my $fname = $htmlData{$section}{file};
622
        my $title = $htmlData{$section}{title};
623
 
624
        print $handle "<dd>" . hRef("$fname"            ,$title);
625
 
626
    }
627
    print $handle "</dl>\n";
628
 
629
    unless ( $htmlData{$section}{noHeader} )
630
    {
631
        print $handle htmlH1('<hr>' . $title);
632
    }
633
 
634
    return $handle;
635
}
636
 
637
#-------------------------------------------------------------------------------
638
# Function        : generateHTMLTail
639
#
640
# Description     : 
641
#
642
# Inputs          : 
643
#
644
# Returns         : 
645
#
646
sub generateHTMLTail
647
{
648
    my ($handle) = @_;
649
    print $handle "</body>\n";
650
    print $handle "</html>\n";
651
    close $handle;
652
 
653
    $currentSection = '';
654
}
655
 
656
 
657
#-------------------------------------------------------------------------------
658
# Function        : generateHTML
659
#
660
# Description     : 
661
#                   Create per package data
662
#                   Create a nice HTML file so that it can be hyperlinked
663
#
664
# Inputs          : 
665
#
666
# Returns         : 
667
#
668
 
669
sub generateHTML
670
{
671
    my @PackageOrder;
672
    EnvImport('GBE_RM_URL');
673
    EnvImport('GBE_DM_URL');
674
    my $t;
675
    Message("Generate HTML");
676
    my $HTML = generateHTMLHeader ('S0');
677
    print $HTML "This page is a simple index into the other pages that contain the Clearcase to Subversion converstion details.\n";
678
 
392 dpurdie 679
    #
395 dpurdie 680
    #   BOM Projects
681
    #
1197 dpurdie 682
#    {
2321 dpurdie 683
#        print $HTML header('BOMIndex', 'Included BOM Projects');
684
#        print $HTML "BOM Projects included in processing. All branches and and SBOMS scanned for essential packages and versions\n";
1197 dpurdie 685
#
2321 dpurdie 686
#        print $HTML "<dl>\n";
1197 dpurdie 687
#        foreach my $project_id ( sort {$ScmAllBomProjects{$a}{project_name} cmp $ScmAllBomProjects{$b}{project_name} } keys %ScmAllBomProjects )
688
#        {
2321 dpurdie 689
#            print $HTML "<dd>" . linkBomProject($project_id,$ScmAllBomProjects{$project_id}{project_name});
1197 dpurdie 690
#        }
2321 dpurdie 691
#        print $HTML "</dl>\n";
1197 dpurdie 692
#    }
395 dpurdie 693
 
694
    #
392 dpurdie 695
    #   Release List
696
    #
697
    my %Projects;
698
    push @{$Projects{$ScmReleases{$_}{'pName'}}}, $_ foreach ( keys %ScmReleases );
699
 
2321 dpurdie 700
 
701
    $HTML = generateHTMLHeader ('S1');
702
    print $HTML "Releases that will be considered in the conversion process.\n";
703
    print $HTML "<br>Releases are scanned for packages and versions that are used.\n";
704
    print $HTML "<dl>\n";
392 dpurdie 705
    foreach ( sort keys %Projects )
706
    {
395 dpurdie 707
        foreach my $rtagid ( sort {$ScmReleases{$a}{name} cmp $ScmReleases{$b}{name}} @{$Projects{$_}} )
392 dpurdie 708
        {
709
            next if ( $ScmReleases{$rtagid}{'excluded'} );
2321 dpurdie 710
            print $HTML "<dd>" . linkRelease($rtagid);
392 dpurdie 711
        }
712
    }
2321 dpurdie 713
    print $HTML "</dl>\n";
714
    generateHTMLTail($HTML);
392 dpurdie 715
 
2321 dpurdie 716
 
717
    $HTML = generateHTMLHeader ('S2');
718
    print $HTML "Releases that will NOT be considered in the conversion process. These are releases that have been specificly excluded.\n";
719
    print $HTML "<dl>\n";
392 dpurdie 720
    foreach ( sort keys %Projects )
721
    {
395 dpurdie 722
        foreach my $rtagid ( sort {$ScmReleases{$a}{name} cmp $ScmReleases{$b}{name}} @{$Projects{$_}} )
392 dpurdie 723
        {
724
            next unless ( $ScmReleases{$rtagid}{'excluded'} );
2321 dpurdie 725
            print $HTML "<dd>" . linkRelease($rtagid);
392 dpurdie 726
        }
727
    }
2321 dpurdie 728
    print $HTML "</dl>\n";
729
    generateHTMLTail($HTML);
392 dpurdie 730
 
731
 
732
    my $currentChar = '';
733
    undef $t;
734
    @PackageOrder = ();
2321 dpurdie 735
    $HTML = generateHTMLHeader ('S3');
736
    print $HTML "Complete list of packages. This includes 'Essential Packages' and packages that ";
737
    print $HTML "are present in Release Manager, but are not currently used.";
738
    print $HTML "<br><button type=\"button\" onclick=\"flipStyleByName('.nonessential', 'display', 'none', '')\" >Show/Hide non Essential</button>";
739
    print $HTML "<button type=\"button\" onclick=\"flipStyleByName('.essential', 'display', 'none', '')\" >Show/Hide Essential</button>";
392 dpurdie 740
 
2548 dpurdie 741
    foreach my $pkgid ( sort {lc($ScmAllPackages{$a}{name}) cmp lc($ScmAllPackages{$b}{name}) } keys %ScmAllPackages )
392 dpurdie 742
    {
2548 dpurdie 743
        my $thisChar = uc(substr($ScmAllPackages{$pkgid}{name}, 0, 1 ));
392 dpurdie 744
        if ( $thisChar ne $currentChar )
745
        {
2321 dpurdie 746
            print $HTML $t->getTable if ( $t );
392 dpurdie 747
            $t = new HTML::Table();
748
 
2321 dpurdie 749
            endExpander($HTML) if ($currentChar);
750
            startExpander($HTML, "Letter2$thisChar", $thisChar);
392 dpurdie 751
            $currentChar = $thisChar;
752
        }
753
        my $packageRef;
754
        my $version_tree = '';
755
        my $import_log = '';
756
        my $marker = '';
757
        my $class;
758
        unless ( exists $PackageData{$pkgid} )
759
        {
2548 dpurdie 760
            $packageRef = $ScmAllPackages{$pkgid}{name};
1197 dpurdie 761
            $marker = 'Not being converted at this time';
392 dpurdie 762
            $class = 'nonEssential';
763
        }
764
        else
765
        {
766
            push @PackageOrder, $pkgid;
767
            $packageRef = linkPackageDetails($pkgid);
768
            $version_tree = linkImage($pkgid, '(Version Tree)');
769
            $import_log = linkImportLog( $pkgid, '(Import Log)');
770
 
771
            $marker = 'Converted to SVN'
772
                if ( $PackageData{$pkgid}{isSVN} );
773
            $class = 'essential';
774
        }
775
        $t->addRow($packageRef, linkPkg($pkgid, '(Release Manager)'),$version_tree, $import_log, $marker);
776
        $t->setRowClass  (-1, $class);
777
    }
2321 dpurdie 778
    print $HTML $t->getTable if ( $t );
779
    endExpander($HTML) if ($currentChar);
780
    generateHTMLTail($HTML);
392 dpurdie 781
 
782
    #
783
    #   Package Details
784
    #
2321 dpurdie 785
    $HTML = generateHTMLHeader ('S4');
392 dpurdie 786
    $t = new HTML::Table( -border=>1 );
787
    foreach my $pkgid ( @PackageOrder )
788
    {
789
        my @badVobs;
790
        $t->addRow('&nbsp;');
791
        $t->setRowClass  (-1, 'packageTitle');
792
        $t->setCellColSpan(-1, 1, 2);
793
 
2321 dpurdie 794
        $t->addRow( anchor("$PackageData{$pkgid}{name}", 'Name:'), linkPkg($pkgid) . linkImage($pkgid, ' (Version Tree)') . linkImportLog( $pkgid, ' (Import Log)' ) );
392 dpurdie 795
#        $t->setRowHead(-1,1);
796
 
797
        my $t2 = new HTML::Table( -border=>0, -padding=>0, -spacing=>0 );
798
        foreach my $pvid ( sort {$ScmPackages{$a}{fullVersion} cmp $ScmPackages{$b}{fullVersion} } @{$PackageSet{$pkgid}} )
799
        {
394 dpurdie 800
            my @markers;
801
            if ( $ScmPackages{$pvid}{BadVob} || $ScmPackages{$pvid}{BadCCView}  ) {
802
                push @markers, hRef( "#BadVcs_$pvid", ' -Bad Tag');
392 dpurdie 803
            }
804
 
394 dpurdie 805
            if ( $ScmPackages{$pvid}{sbomOsid} || $ScmPackages{$pvid}{sbomBase}  ) {
806
                push @markers, 'SBOM';
807
            }
808
 
809
 
810
            $t2->addRow( linkPvid($pvid, undef, 1), "@markers" );
811
 
392 dpurdie 812
            push @badVobs,$pvid if ($ScmPackages{$pvid}{BadVob});
813
        }
814
        $t->addRow("Versions used:", $t2->getTable);
815
        $t->addRow("Type:", $PackageData{$pkgid}{type});
816
        $t->addRow("Projects:",join (',', @{$PackageData{$pkgid}{suffixes}} ));
817
 
818
        my $youngest = $PackageData{$pkgid}{youngAge};
2321 dpurdie 819
        my $youngestNonRipple = $PackageData{$pkgid}{youngAgeNonRipple} || 0;
820
        my $youngestNonBuildadm = $PackageData{$pkgid}{nonBuildadm} || 0;
821
 
822
        $youngest = int($youngest);
823
        $youngestNonRipple = int($youngestNonRipple) || '-';
824
        $youngestNonBuildadm = int($youngestNonBuildadm) || '-';
825
 
826
        $t->addRow("Youngest:", "$youngestNonRipple Days (NonRipple). $youngestNonBuildadm Days (NonBuildadm). $youngest Days (any Build)" );
392 dpurdie 827
        $t->addRow("Views:", join (',', keys %{$PackageData{$pkgid}{view}}));
828
 
829
        if ( $PackageData{$pkgid}{MultiVob} )
830
        {
831
            my $t2 = new HTML::Table( -border=>0, -padding=>0, -spacing=>0, -class=>'paddedTable' );
832
            foreach my $vob ( keys %{$PackageData{$pkgid}{vobs}} )
833
            {
834
                $t2->addRow($vob);
835
                $t2->setRowHead(-1,1);
836
                $t2->setCellColSpan(-1, 1, 3);
837
                foreach my $pvid ( @{$PackageData{$pkgid}{vobs}{$vob}} )
838
                {
839
                    $t2->addRow('&nbsp;', linkPvid($pvid, undef, 1), "$ScmPackages{$pvid}{'vcstag'}" );
840
                }
841
            }
842
            $t2->setColClass (1, 'listTitle' );
395 dpurdie 843
            $t->addRow("MultiVobs:", $t2->getTable);
392 dpurdie 844
        }
845
        else
846
        {
847
            $t->addRow("Vobs:", join (',', keys %{$PackageData{$pkgid}{vobs}}));
848
        }
849
 
850
        if ( $PackageData{$pkgid}{MultiVob} )
851
        {
852
            my $t2 = new HTML::Table( -border=>0, -padding=>0, -spacing=>0, -class=>'paddedTable' );
853
            foreach my $vob ( keys %{$PackageData{$pkgid}{vobPath}} )
854
            {
855
                $t2->addRow($vob);
856
                $t2->setRowHead(-1,1);
857
                $t2->setCellColSpan(-1, 1, 2);
858
                foreach my $pvid ( @{$PackageData{$pkgid}{vobPath}{$vob}} )
859
                {
860
                    $t2->addRow('&nbsp;', linkPvid($pvid, undef, 1) );
861
                }
862
            }
863
            $t2->setColClass (1, 'listTitle' );
864
            $t->addRow("Paths:", $t2->getTable);
865
        }
866
        else
867
        {
868
            $t->addRow("Paths:", join (',', keys %{$PackageData{$pkgid}{vobPath}}));
869
        }
870
 
871
 
872
        if ( @badVobs )
873
        {
874
            my $t2 = new HTML::Table( -border=>0, -padding=>0, -spacing=>0, -class=>'paddedTable' );
875
            foreach my $pvid ( @badVobs )
876
            {
877
                $t2->addRow(linkPvid($pvid), "&nbsp;", $ScmPackages{$pvid}{'vcstag'} );
878
            }
879
            $t->addRow("Bad VCS:", $t2->getTable );
880
        }
881
 
882
        my $repo = $PackageData{$pkgid}{mappedRepo};
2319 dpurdie 883
        my %RepoList;
884
        foreach my $pvid ( @{$PackageSet{$pkgid}} )
885
        {
886
            my $repo = $ScmPackages{$pvid}{'vcstag'};
887
            if ( $repo =~ m~SVN::(.*)(/tags/|/branches/|/trunk)~i )
888
            {
889
                $RepoList{$1} = svnLink($1) unless exists $RepoList{$1};
890
            }
891
        }
892
        my $txt = join( '<br>', values %RepoList);
893
        $txt = ' : ' . $txt if ( $txt );
894
        $t->addRow("Repo:", hRef("#Repo_$repo", $repo). $txt );
2548 dpurdie 895
        if ( exists $Protected{$PackageData{$pkgid}{name}} )
896
        {
897
            my $entry = $Protected{$PackageData{$pkgid}{name}};
898
            my $comment = $entry->{comment} || '';
899
            my $t2 = new HTML::Table( -border=>0, -padding=>0, -spacing=>0, -class=>'paddedTable' );
900
 
901
            $t2->addRow($entry->{mode}, $comment );
902
            $t->addRow("Protected:", $t2->getTable);
903
        }
392 dpurdie 904
    }
905
    $t->setColClass (1, 'listTitle' );
2321 dpurdie 906
    print $HTML $t->getTable;
907
    generateHTMLTail($HTML);
392 dpurdie 908
    #
909
    #   Bad Package information
910
    #
911
    my %BadByProject;
2016 dpurdie 912
    my $last_proj_id = 0;
392 dpurdie 913
 
2321 dpurdie 914
    $HTML = generateHTMLHeader ('S5');
915
    print $HTML "These package-versions cannot be reproduced from ClearCase. This may be due to\n";
916
    print $HTML "<dl><dd>Invalid Release Manager information";
917
    print $HTML "<dd>Incorrect Release Manager Data";
918
    print $HTML "<dd>ClearCase label and Path do not result in a view with files";
919
    print $HTML "</dl>";
392 dpurdie 920
    $t = new HTML::Table( -border=>1 );
921
    $t->addRow( 'Package Version','VCS Tag' );
922
    $t->setRowHead(1,1);
923
    foreach my $pvid ( sort {lc($ScmPackages{$a}{name}) cmp lc($ScmPackages{$b}{name}) } keys %ScmPackages )
924
    {
925
        next unless ( $ScmPackages{$pvid}{BadVob} || $ScmPackages{$pvid}{BadCCView} );
926
 
927
        my $t2 = new HTML::Table( -border=>0, -padding=>0, -spacing=>0, -class=>'paddedTable' );
928
        $t2->addRow($ScmPackages{$pvid}{'vcstag'});
929
 
930
        my ($users, $iusers) = usedBy($pvid);
931
        if ( @$users )
932
        {
933
            $t2->addRow("Used Directly by:");
934
            $t2->addRow(linkRelease($_, $pvid)) foreach ( @$users );
935
            push @{$BadByProject{$_}{direct}}, $pvid foreach ( @$users );
936
        }
937
 
938
        if ( @$iusers )
939
        {
940
            $t2->addRow("Used Indirectly by:");
941
            $t2->addRow(linkRelease($_, $pvid)) foreach ( @$iusers );
942
            push @{$BadByProject{$_}{indirect}}, $pvid foreach ( @$iusers );
943
        }
2321 dpurdie 944
        $t->addRow( anchor("$pvid",linkPvid($pvid)), $t2->getTable );
392 dpurdie 945
    }
946
    $t->setColClass (1, 'listTitle' );
2321 dpurdie 947
    print $HTML $t->getTable;
948
    generateHTMLTail($HTML);
392 dpurdie 949
 
950
    #
951
    #   Bad package vesrions by project
952
    #
2321 dpurdie 953
    $HTML = generateHTMLHeader ('S6');
392 dpurdie 954
    $t = new HTML::Table( -border=>1 );
955
    $t->addRow( 'Release','Package');
956
    $t->setRowHead(1,1);
2016 dpurdie 957
    $last_proj_id = 0;
392 dpurdie 958
 
959
    sub sortReleases
960
    {
961
        my $rv = ( lc($ScmReleases{$a}{pName}) cmp lc($ScmReleases{$b}{pName}));
962
        unless ($rv )
963
        {
964
            $rv = (lc($ScmReleases{$a}{'rtag_id'}) cmp lc($ScmReleases{$b}{'rtag_id'}));
965
        }
966
        return $rv;
967
    }
968
 
969
    foreach my $rtag_id ( sort sortReleases keys %BadByProject  )
970
    {
971
        if ( $last_proj_id != $ScmReleases{$rtag_id}{proj_id} )
972
        {
973
            $last_proj_id = $ScmReleases{$rtag_id}{proj_id};
974
            $t->addRow( $ScmReleases{$rtag_id}{pName});
975
            $t->setCellColSpan(-1, 1, 2);
976
        }
977
 
978
        my $t2 = new HTML::Table(-border=>0, -padding=>0, -spacing=>0, -class=>'paddedTable' );
979
 
980
        if ( $BadByProject{$rtag_id}{direct} )
981
        {
982
                $t2->addRow('Directly uses:' );
983
                foreach my $pvid (@{$BadByProject{$rtag_id}{direct}})
984
                {
985
                    $t2->addRow( linkPvid($pvid, $rtag_id) , $ScmPackages{$pvid}{'vcstag'} );
986
                }
987
        }
988
 
989
        if ( $BadByProject{$rtag_id}{indirect} )
990
        {
991
            $t2->addRow('Indirectly uses:' );
992
            foreach my $pvid (@{$BadByProject{$rtag_id}{indirect}})
993
            {
994
                $t2->addRow( linkPvid($pvid, $rtag_id) , $ScmPackages{$pvid}{'vcstag'} );
995
            }
996
        }
997
        $t->addRow(linkRelease($rtag_id, undef, 1), $t2->getTable  );
998
    }
2016 dpurdie 999
 
392 dpurdie 1000
    $t->setColClass (1, 'listTitle' );
1001
    $t->setColHead(1,1);
2321 dpurdie 1002
    print $HTML $t->getTable;
1003
    generateHTMLTail($HTML);
392 dpurdie 1004
 
1341 dpurdie 1005
    #
1006
    #   Releases that have multiple instances of the same package in them
1007
    #
2321 dpurdie 1008
    $HTML = generateHTMLHeader ('S7');
1009
    print $HTML "Releases that have multiple instances of the same package\n";
1341 dpurdie 1010
#DebugDumpData("ReleasePackages", \%ReleasePackages );
1011
 
1012
    $t = new HTML::Table( -border=>1 );
1013
    $t->addRow( 'Release','Package');
1014
    $t->setRowHead(1,1);
1015
    $last_proj_id = 0;
1016
 
1017
    foreach my $rtag_id ( sort sortReleases keys %ReleasePackages )
1018
    {
1019
        my @multiples;
1020
        foreach my $name ( keys %{$ReleasePackages{$rtag_id}{name}} )
1021
        {
1022
            if ( $ReleasePackages{$rtag_id}{name}{$name}{count} > 1 )
1023
            {
1024
                push @multiples, $name;
1025
            }
1026
        }
1027
        next unless ( @multiples );
1028
 
1029
        if ( $last_proj_id != $ScmReleases{$rtag_id}{proj_id} )
1030
        {
1031
            $last_proj_id = $ScmReleases{$rtag_id}{proj_id};
1032
            $t->addRow( $ScmReleases{$rtag_id}{pName});
1033
            $t->setCellColSpan(-1, 1, 2);
1034
        }
1035
 
1036
        my $t2 = new HTML::Table(-border=>0, -padding=>0, -spacing=>0, -class=>'paddedTable' );
1037
 
1038
        foreach my $name ( sort {uc($a) cmp uc($b) } @multiples )
1039
        {
1040
            $t2->addRow('Package: ' . linkFindPkgs($name, $rtag_id),  );
1041
            $t2->setCellColSpan(-1, 1, 2);
1042
            foreach my $pvid ( @{$ReleasePackages{$rtag_id}{name}{$name}{pvid}} )
1043
            {
1044
                $t2->addRow( '&nbsp;', linkPvid($pvid, $rtag_id) );
1045
            }
1046
        }
1047
 
1048
        $t->addRow(linkRelease($rtag_id, undef, 1), $t2->getTable  );
1049
    }
1050
    $t->setColClass (1, 'listTitle' );
1051
    $t->setColHead(1,1);
2321 dpurdie 1052
    print $HTML $t->getTable;
1053
    generateHTMLTail($HTML);
392 dpurdie 1054
 
1341 dpurdie 1055
 
2321 dpurdie 1056
    $HTML = generateHTMLHeader ('S8');
1057
    print $HTML "A summary of proposed Repostories and Paths\n";
1341 dpurdie 1058
 
1059
    $t = new HTML::Table( -border=>0, -padding=>0, -spacing=>0, -class=>'paddedTable' );
1060
    $t->addRow( 'Name','', 'Count', 'Warnings'  );
1061
    $t->setCellColSpan(1, 1, 2);
1062
    foreach my $repo ( sort {uc($a) cmp uc($b) } keys %RepoSubIndex )
1063
    {
1064
            next if ( $repo eq 'UNKNOWN' );
1065
            next if ( $repo eq 'SVN' );
1066
            my $count = '';
1067
            if ( exists $RepoSubIndex{$repo}{'-'}   )
1068
            {
1069
                $count = @{$RepoSubIndex{$repo}{'-'}};
1070
            }
1071
            $t->addRow( hRef("#Repo_$repo", $repo), '', $count  );
1072
            $t->setCellColSpan($t->getTableRows(), 1, 2);
1073
 
1074
            foreach my $path ( sort {uc($a) cmp uc($b) } keys %{$RepoSubIndex{$repo}} )
1075
            {
1076
                    next if ( $path eq '-' );
1077
                    my $depth = $path =~ tr~/~~;
1078
                    my $warn = ($depth > 2) ? ' - Deeply nested' : '';
1079
                    my $count = (@{$RepoSubIndex{$repo}{$path}});
1080
                    $warn .= ' - Only One Package' if ( $count < 2 );
1081
 
1082
                    $t->addRow( '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;', hRef("#Repo_$repo/$path", $path), $count, $warn);
1083
            }
1084
 
1085
    }
1086
 
2321 dpurdie 1087
    print $HTML $t->getTable;
1088
    generateHTMLTail($HTML);
1341 dpurdie 1089
 
1090
 
1091
 
392 dpurdie 1092
#DebugDumpData("RepoSubIndex", \%RepoSubIndex);
1093
#DebugDumpData("Repos", \%Repos);
1094
 
1095
    #
1096
    #   Repo back reference
1097
    #
2321 dpurdie 1098
    $HTML = generateHTMLHeader ('S9');
2354 dpurdie 1099
    print $HTML "Proposed and Converted Repostories and Paths with package mapping and ClearCase Path\n";
392 dpurdie 1100
 
1101
    $t = new HTML::Table( -border=>1 );
2354 dpurdie 1102
    $t->addRow( 'Repository Path', 'Package Name,Original Vob Path(s),Last Build NonBuildadm [ANY]' );
392 dpurdie 1103
 
1104
    foreach my $repo ( sort {uc($a) cmp uc($b) } keys %Repos )
1105
    {
1106
        next if ( $repo eq 'SVN' );
1107
        next if ( $repo eq 'UNKNOWN' );
1108
        my @data;
1109
        my $t1 = new HTML::Table( -border=>1,-width=>'100%', -style=>"border-collapse:collapse" );
1110
 
1111
        foreach my $pkgid ( @{$Repos{$repo}} )
1112
        {
1113
            my $t2 = new HTML::Table( -border=>0,-padding=>0, -spacing=>0, -class=>'paddedTable' );
1114
            foreach my $vob ( keys %{$PackageData{$pkgid}{vobPath}} )
1115
            {
2354 dpurdie 1116
                    if ($PackageData{$pkgid}{isSVN} && $vob !~ m~^/~ )
1117
                    {
1118
                        $vob = svnLink($vob);
1119
                        #$vob = "<span style=\"background-color:#B1FB17\">$vob</span>";
1120
                    }
392 dpurdie 1121
                    $t2->addRow( $vob );
1122
            }
2354 dpurdie 1123
            my $t2Text = '';
392 dpurdie 1124
            if ( $t2->getTableRows() )
1125
            {
1126
                $t2->setColClass (1, 'listTitle' );
2354 dpurdie 1127
                $t2Text = $t2->getTable();
392 dpurdie 1128
            }
2319 dpurdie 1129
            my $youngest = $PackageData{$pkgid}{youngAge};
2321 dpurdie 1130
            my $youngestNonRipple = $PackageData{$pkgid}{youngAgeNonRipple} || 0;
1131
            my $youngestNonBuildadm = $PackageData{$pkgid}{nonBuildadm} || 0;
2319 dpurdie 1132
 
2321 dpurdie 1133
            $youngest =  int($youngest);
1134
            $youngestNonRipple =  int($youngestNonRipple) || '-';
1135
            $youngestNonBuildadm = int($youngestNonBuildadm) || '-';
1136
 
2354 dpurdie 1137
            $t1->addRow( linkPackageDetails($pkgid), $t2Text, "$youngestNonBuildadm [$youngest]"  );
392 dpurdie 1138
        }
2319 dpurdie 1139
 
392 dpurdie 1140
        if ( $t1->getTableRows() )
1141
        {
1142
            $t1->setColWidth(1,'30%');
1143
            $t1->setColClass (1, 'listTitle' );
2319 dpurdie 1144
            $t1->setColWidth(3,'10%');
392 dpurdie 1145
        }
2321 dpurdie 1146
        $t->addRow( anchor("$repo",$repo), $t1->getTable() );
392 dpurdie 1147
 
1148
    }
1149
    $t->setColClass (1, 'listTitle' );
1150
    $t->setColHead(1,1);
2321 dpurdie 1151
    print $HTML $t->getTable;
1152
    generateHTMLTail($HTML);
392 dpurdie 1153
 
1154
    #
1155
    #   Highlight packages that have not been mapped to a Repo
1156
    #
2321 dpurdie 1157
    $HTML = generateHTMLHeader ('SA');
1158
    print $HTML "Packages that have not been mapped to a Repository\n";
392 dpurdie 1159
    $t = new HTML::Table( -border=>1 );
1160
    foreach my $pkgid ( @{$Repos{UNKNOWN}} )
1161
    {
1162
        my $flag_badCC;
1163
        my $flag_multi;
1164
        my $flag_badVob;
1165
 
1166
        $flag_multi  = 1 if $PackageData{$pkgid}{MultiVob};
1167
        $flag_badVob = 1 if $PackageData{$pkgid}{BadVob};
1168
 
1169
        foreach my $pvid ( @{$PackageSet{$pkgid}} )
1170
        {
1171
            $flag_badCC  = 1 if ( $ScmPackages{$pvid}{BadCCView} );
1172
            $flag_multi  = 1 if ( $ScmPackages{$pvid}{MultiVob} );
1173
            $flag_badVob = 1 if ( $ScmPackages{$pvid}{BadVob} );
1174
        }
1175
 
1176
        my @data;
1177
        push @data, "Bad ClearCase View" if $flag_badCC;
1178
        push @data, "Multiple Vobs" if $flag_multi;
1179
        push @data, "Bad VcsTag" if $flag_badVob;
1180
        $t->addRow( linkPackageDetails($pkgid), join( '<br>', @data) );
1181
    }
1182
 
1183
    $t->setColClass (1, 'listTitle' );
2321 dpurdie 1184
    print $HTML $t->getTable;
1185
    generateHTMLTail($HTML);
1186
 
392 dpurdie 1187
    #
1188
    #   Packages already under Subversion
1189
    #
2321 dpurdie 1190
    $HTML = generateHTMLHeader ('SB');
1191
    print $HTML "Packages that are currently in Subversion\n";
2354 dpurdie 1192
    print $HTML "<br>Packages in Subversion   : ". scalar @{$Repos{SVN}} ."\n";
1193
    print $HTML "<br>Total Packages to convert: ". $totalPackageCount ."\n";
1194
    print $HTML "<p>" ,anchor("SVN",'SVN');
1270 dpurdie 1195
 
392 dpurdie 1196
    $t = new HTML::Table( -border=>1 );
1197
    foreach my $pkgid ( @{$Repos{SVN}} )
1198
    {
1199
        my %RepoList;
1200
        foreach my $pvid ( @{$PackageSet{$pkgid}} )
1201
        {
1202
            my $repo = $ScmPackages{$pvid}{'vcstag'};
1270 dpurdie 1203
            if ( $repo =~ m~SVN::(.*)(/tags/|/branches/|/trunk)~i )
1204
            {
1205
                $RepoList{$1} = svnLink($1) unless exists $RepoList{$1};
1206
            }
392 dpurdie 1207
        }
1270 dpurdie 1208
        $t->addRow( linkPackageDetails($pkgid), join( '<br>', values %RepoList) );
392 dpurdie 1209
    }
2321 dpurdie 1210
    print $HTML $t->getTable;
392 dpurdie 1211
 
2449 dpurdie 1212
    #
1213
    #   Packages with known issues
1214
    #
1215
    $HTML = generateHTMLHeader ('SC');
1216
    print $HTML "Packages that are not being migrated due to known issues\n";
1217
 
1218
    $t = new HTML::Table( -border=>1 );
1219
    $t->addRow( "Protected Packages - Migration delayed");
1220
    $t->setRowClass  (-1, 'packageTitle');
1221
    $t->setCellColSpan(-1, 1, 2);
1222
    foreach my $pkgname ( sort keys %Protected )
1223
    {
2548 dpurdie 1224
        next unless ( $Protected{$pkgname}{mode} eq 'Protected' );
2449 dpurdie 1225
        my $pkgid =  $ScmPkgNames{$pkgname};
1226
        my $txt = $pkgid ? linkPackageDetails($pkgid) : $pkgname;
2548 dpurdie 1227
        $t->addRow( $txt, $Protected{$pkgname}{comment});
2449 dpurdie 1228
    }
1229
 
1230
    $t->addRow( "Broken Packages - Migration not possible");
1231
    $t->setRowClass  (-1, 'packageTitle');
1232
    $t->setCellColSpan(-1, 1, 2);
1233
    foreach my $pkgname ( sort keys %Protected )
1234
    {
2548 dpurdie 1235
        next if ( $Protected{$pkgname}{mode} eq 'Protected' );
2449 dpurdie 1236
        my $pkgid =  $ScmPkgNames{$pkgname};
1237
        my $txt = $pkgid ? linkPackageDetails($pkgid) : $pkgname;
2548 dpurdie 1238
        $t->addRow( $txt, $Protected{$pkgname}{comment});
2449 dpurdie 1239
    }
1240
 
1241
    print $HTML $t->getTable;
1242
 
1243
 
2321 dpurdie 1244
    generateHTMLTail($HTML);
392 dpurdie 1245
Message ("Created: PackageConversion.html");
1246
}
1247
 
2321 dpurdie 1248
sub hRef
1249
{
1250
    my ($url, $text, $target) = @_;
1251
    my $ttext = '';
392 dpurdie 1252
 
2321 dpurdie 1253
    if ( $url =~ m~^#(.*?)_~ )
392 dpurdie 1254
    {
2321 dpurdie 1255
        my $tag = $1;
1256
        foreach my $section ( keys %htmlData )
392 dpurdie 1257
        {
2321 dpurdie 1258
            if ( $htmlData{$section}{tag} eq $1 )
392 dpurdie 1259
            {
2321 dpurdie 1260
                $url = $htmlData{$section}{file} . $url;
1261
                $target = '_Page'.$section unless ( $target );
392 dpurdie 1262
            }
1263
        }
1264
    }
1265
 
1266
    $ttext = ' TARGET="' . $target . '"' if ( defined $target );
1267
    return ( '<a href="' . $url . '"' . $ttext . '>' . $text . '</a>' );
1268
}
1269
 
1270
sub anchor
1271
{
1272
    my ($name, $text) = @_;
2321 dpurdie 1273
    my $prefix = '';
1274
    if ( $currentSection )
1275
    {
1276
        $prefix = $htmlData{$currentSection}{tag};
1277
        $prefix = $prefix . '_' if ( $prefix );
1278
    }
1279
    return ( '<a name="' . $prefix . $name . '">' . $text . '</a>' );
392 dpurdie 1280
}
1281
 
1282
 
1283
sub htmlH1
1284
{
1285
    my ($text) = @_;
1286
    return '<h1>' . $text . '</h1>';
1287
}
1288
 
395 dpurdie 1289
sub linkBomProject
1290
{
1291
    my ($projId, $text) = @_;
1292
    my $ref = $GBE_DM_URL . "/Default.asp?proj_id=$projId";
1293
 
1294
    return hRef($ref, $text, '_packageData');
1295
}
1296
 
1297
 
392 dpurdie 1298
sub linkRelease
1299
{
1300
    my ($pkgid, $pvid, $mode) = @_;
1301
    my $pkgid_ref = $GBE_RM_URL . "/fixed_issues.asp?rtag_id=$pkgid";
1302
    $pkgid_ref .= "&pv_id=$pvid" if defined $pvid;
1303
 
1304
    my $text = '';
1305
    $text .= "$ScmReleases{$pkgid}{pName} :: " unless ( $mode );
1306
    $text .= $ScmReleases{$pkgid}{name};
1307
 
1308
    $text = hRef($pkgid_ref, $text, '_packageData');
1309
}
1310
 
1311
sub linkPackageDetails
1312
{
1313
    my ($pkgid) = @_;
1314
    my $name = $PackageData{$pkgid}{name};
1315
    return hRef("#Package_${name}",$name);
1316
}
1317
 
1318
sub linkPvid
1319
{
1320
    my ($pvid, $rtagid, $mode) = @_;
1321
    my $pv_base = $GBE_RM_URL . "/fixed_issues.asp?pv_id=$pvid";
1322
    $pv_base .= "&rtag_id=$rtagid" if ($rtagid);
1323
 
1324
    my $text = '';
1325
    $text .= "$ScmPackages{$pvid}{'name'} " unless ( $mode );
1326
    $text .= $ScmPackages{$pvid}{'version'};
1327
    return hRef($pv_base, $text, '_packageData');
1328
}
1329
 
1341 dpurdie 1330
sub linkFindPkgs
1331
{
1332
    my ($name, $rtagid) = @_;
1333
    my $pv_base = $GBE_RM_URL . "/find.asp?searchtype=1&keyword=$name&btn=Find&envtab=3&rtag_id=$rtagid";
1334
    return hRef($pv_base, $name, '_packageData');
1335
}
1336
 
392 dpurdie 1337
sub linkPkg
1338
{
1339
    my ($pkgid, $utext) = @_;
1340
    my $rm_base = $GBE_RM_URL . "/view_by_version.asp?pkg_id=$pkgid";
1341
    my $text = $utext ? $utext : $PackageData{$pkgid}{name};
1342
    return hRef($rm_base, $text , '_packageData');
1343
}
1344
 
1345
sub linkImage
1346
{
1347
    my ($pkgid, $utext) = @_;
1348
    my $name = $PackageData{$pkgid}{name};
1349
    my $ref = $name . '.svg';
1350
    my $text = $utext ? $utext : $name;
1351
    return hRef($ref, $text, '_packageImage');
1352
}
1353
 
1354
sub linkImportLog
1355
{
1356
    my ($pkgid, $utext) = @_;
1357
    my $name = $PackageData{$pkgid}{name};
1358
    my $ref = $name . '.importlog';
1359
    my $text = $utext ? $utext : $name;
1360
    return hRef($ref, $text, '_packageLog');
1361
}
1362
 
1270 dpurdie 1363
sub svnLink
1364
{
1365
    my ($tag, $utext) = @_;
1366
    my $text = $utext ? $utext : $tag;
392 dpurdie 1367
 
1270 dpurdie 1368
    $tag =~ s~^SVN::~~;
1369
    my $url = SvnPath2Url ($tag);
1370
    return hRef($url, $text, '_SvnPage');
1371
}
392 dpurdie 1372
 
1270 dpurdie 1373
 
1374
 
392 dpurdie 1375
#-------------------------------------------------------------------------------
1376
# Function        : startExpander
1377
#                   endExpander
1378
#
1379
# Description     : Insert HTML code to start/end a Javascript expanding
1380
#                   division.
1381
#
1382
# Inputs          : $name           - Unique name for the Section
1383
#                   $text           - Header Text to be displayed
1384
#
1385
# Returns         : 
1386
#
1387
sub startExpander
1388
{
2321 dpurdie 1389
    my ($HTML, $name, $text) = @_;
1390
    print $HTML <<EXPANDER;
392 dpurdie 1391
<div class="expandingMenu expandingMenuNotSelected">
1392
    <div onclick='click_expandingMenuHeader(this,"$name")' class="expandingMenuHeader" >$text</div>
1393
	<div id="cssprop_$name" class="expandingMenuGroup" style="display:none;">
1394
EXPANDER
1395
}
1396
 
1397
sub endExpander
1398
{
2321 dpurdie 1399
    my ($HTML) = @_;
1400
    print $HTML "</div></div>\n";
392 dpurdie 1401
}
1402
 
1403
 
1404
#    if ( 0 )
1405
#    {
1406
#        my $file = "TagList.txt";
1407
#        my $count = 0;
1408
#        Message("Create CC Tag  List", $file);
1409
#        open ( my $fh, '>', $file ) || Error ("Cannot open $file", "Error: $!");
1410
#        my %PackageNames;
1411
#
1412
#        foreach ( sort @taglist )
1413
#        {
1414
#            print $fh "$_\n";
1415
#            $count++;
1416
#        }
1417
#        close $fh;
1418
#        Message("Tags: $count");
1419
#    }
1420
 
1421
 
1422
#    DebugDumpData("VersionTags", \%VersionTags);
1423
#    DebugDumpData("Vobs", \%Vobs);
1424
    #print "VOBS: ", join ("\n", sort keys %Vobs), "\n";
1425
 
1426
#-------------------------------------------------------------------------------
404 dpurdie 1427
# Function        : readInputData
392 dpurdie 1428
#
1429
# Description     : Write out data in a form to allow post processing
1430
#
1431
# Inputs          : 
1432
#
1433
# Returns         : 
1434
#
404 dpurdie 1435
sub readInputData
392 dpurdie 1436
{
1437
 
1438
    my $fname = 'cc2svn.raw.txt';
1439
    Message ("Reading: $fname");
1440
    Error "Cannot locate $fname" unless ( -f $fname );
1441
    require $fname;
1442
 
1443
    Error "Data in $fname is not valid\n"
1444
        unless ( keys(%ScmReleases) >= 0 );
1445
 
1446
#    DebugDumpData("ScmReleases", \%ScmReleases );
1447
#    DebugDumpData("ScmPackages", \%ScmPackages );
1448
#    DebugDumpData("ScmSuffixes", \%ScmSuffixes );
1449
 
1450
    %ScmSuffixes = ();
1451
}
1452
 
1453
##-------------------------------------------------------------------------------
1454
## Function        : getVobMapping
1455
##
1456
## Description     : Read in Package to Repository Mapping
1457
##
1458
## Inputs          :
1459
##
1460
## Returns         : Populates
1461
#                        #%VobMapping;                 # Vob -> Repo
1462
#                        #%PackageMapping;             # Package -> Repo
1463
#                        #%ViewMapping                 # View -> Repo
1464
#sub getVobMapping
1465
#{
1466
#    my $fname = 'cc2svn.mapping.txt';
1467
#    Message ("Reading: $fname");
1468
#    Error "Cannot locate $fname" unless ( -f $fname );
1469
#    require $fname;
1470
#
1471
#    Error "Data in $fname is not valid\n"
1472
#        unless ( keys(%PackageMapping) >= 0 );
1473
#
1474
#    DebugDumpData("PackageMapping", \%PackageMapping );
1475
#    DebugDumpData("VobMapping", \%VobMapping );
1476
#    DebugDumpData("ViewMapping", \%ViewMapping );
1477
#
1478
#}
1479
 
1480
 
1481
#-------------------------------------------------------------------------------
1482
# Function        : mapPackage
1483
#
1484
# Description     : Attempt to map a package to a repo
1485
#
1486
# Inputs          : PackageId
1487
#
1488
# Returns         : RepoPatch
1489
#
1490
sub mapPackage
1491
{
1492
    my ($pkgid) = @_;
1493
    my %Named = (
1494
        'Release_Manager'                       => 'DevTools/ManagerSuite',
1495
        'Access_Manager'                        => 'DevTools/ManagerSuite',
1496
        'Deployment_Manager'                    => 'DevTools/ManagerSuite',
1497
        'Production_Manager'                    => 'DevTools/ManagerSuite',
1498
        'schema_utilities'                      => 'DevTools/ManagerSuite',
1499
        'Release_Manager_Schema'                => 'DevTools/ManagerSuite',
1500
        'Manager_Suite'                         => 'DevTools/ManagerSuite',
1501
        'Manager_Suite_VM'                      => 'DevTools/ManagerSuite',
1502
 
1503
        'QtBuilder'                             => 'DevTools',
1504
        'buildtool'                             => 'DevTools',
1505
        'cabinet_packager'                      => 'DevTools',
1506
        'core_devl'                             => 'DevTools',
1507
        'debian_packager'                       => 'DevTools',
1508
        'deployfiles'                           => 'DevTools',
1509
        'dpkg_blat'                             => 'DevTools',
1510
        'dpkg_management'                       => 'DevTools',
1511
        'generate_release_notes'                => 'DevTools',
1512
        'jants'                                 => 'DevTools',
1513
        'linux_day0fs_tools'                    => 'DevTools',
1514
        'manifest-tool'                         => 'DevTools',
1515
        'nsis_packager'                         => 'DevTools',
2039 dpurdie 1516
        'nsis_library'                          => 'DevTools',
392 dpurdie 1517
        'shellbuild'                            => 'DevTools',
1518
        'wsdl-tools'                            => 'DevTools',
1519
        'binflow'                               => 'DevTools',
1520
        'zendguard_tools'                       => 'DevTools',
1521
        'cpptasks'                              => 'DevTools/ant',
1522
        'AdvisoryDependency'                    => 'DevTools/buildtool_tests',
1523
        'CommonDependency'                      => 'DevTools/buildtool_tests',
1524
        'GenericProduct'                        => 'DevTools/buildtool_tests',
1525
        'LinuxCentricProduct'                   => 'DevTools/buildtool_tests',
1526
        'CotsWithFunnyVersion'                  => 'DevTools/buildtool_tests',
2548 dpurdie 1527
        'xp_sequence'                           => 'MASS_Dev_Bus',
1528
        'dmrc_windows_proxy'                    => 'MASS_Dev_Infra/Dmrc',
1529
        'ExtDataImporter'                       => 'MASS_Dev_Infra/Dmrc',
1530
        'inqshim'                               => 'MASS_Dev_Infra/Dmrc',
392 dpurdie 1531
 
1532
        'GenAppaCE'                             => 'DPG_SWCode/utilities',
1533
 
1534
        'AtmelHAL'                              => 'MASS_Dev_Crypto',
1535
        'Netbula'                               => 'COTS',
1536
        'ObjectiveGrid'                         => 'COTS',
1537
        'lmos'                                  => 'DPG_SWBase',
2354 dpurdie 1538
#        'daf_cd_transap'                        => 'DPG_SWBase',
392 dpurdie 1539
        'basetypes'                             => 'MASS_Dev_Infra',
2412 dpurdie 1540
        'accesscontrol_ejb-api'                 => 'MASS_Dev_Infra/Security',
392 dpurdie 1541
        'tp5000_MUG'                            => 'MREF_Package',
1542
        'udman'                                 => 'MASS_Dev_Infra',
1543
        'emvud'                                 => 'DPG_SWBase/emvud',
1544
        'daf_mmi_ti'                            => 'DPG_SWBase',
2449 dpurdie 1545
        'daf_osa_mos'                           => 'DPG_SWBase/OSA',
392 dpurdie 1546
        'mos_api'                               => 'MOS',
1547
        'tp5700_Manifest'                       => 'MREF_Package',
1548
        'TRACS'                                 => 'TRACS',
1549
 
1550
        'jboss_config'                          => 'MASS_Dev_Bus/Business' ,
1551
        'jboss_service'                         => 'MASS_Dev_Bus/Business' ,
1197 dpurdie 1552
        'pgres'                                 => 'ITSO_TRACS/DataManagement' ,
395 dpurdie 1553
        'ERGcda_imports'                        => 'MREF_Package',
2553 dpurdie 1554
        'daf_dataman_extras'                    => 'DPG_SWCode/ProjectCD/seattle',
1555
        'daf_paper_variables'                   => 'DPG_SWCode/ProjectCD',
1556
 
2354 dpurdie 1557
        'XmlDocInterface'                       => 'MASS_Dev_Infra',
2449 dpurdie 1558
        'SPOS_IngenicoApp'                      => 'DPG_SWCode',
392 dpurdie 1559
 
2412 dpurdie 1560
 
2354 dpurdie 1561
        # Kill single package subdirs
1562
        'application'                           => 'MASS_Dev_Bus',
1563
        'card'                                  => 'MASS_Dev_Bus',
1564
        'cardholder'                            => 'MASS_Dev_Bus',
1565
        'opman-database'                        => 'MASS_Dev_Bus',
1566
        'product'                               => 'MASS_Dev_Bus',
1567
        'VmtInterface'                          => 'MASS_Dev_Bus',
1568
        'systemcd_ejb-api'                      => 'MASS_Dev_Bus/CBP',
1569
        'boi'                                   => 'MASS_Dev_Bus/BOI',
1570
 
2412 dpurdie 1571
        'mrviewer'                              => 'MASS_Dev_Infra/Reports',
1572
        'cdss'                                  => 'MASS_Dev_Infra/Cdss',
1573
        'InfraPSS'                              => 'MASS_Dev_Infra',
2635 dpurdie 1574
 
1575
 
1576
        'arm-926ejs-linux-gnueabi'              => 'LinuxDevices/linux/compilers',
1577
        'linux_gnu_tools'                       => 'LinuxDevices/linux/compilers',
1578
        'vsdev-proftpd-insecure'                => 'SmartSite',
1579
        'obe'                                   => 'ITSO_TRACS/obe',
1580
        'obme'                                  => 'ITSO_TRACS/obe',
2412 dpurdie 1581
 
392 dpurdie 1582
    );
1583
 
1584
    my %VobRename = (
2635 dpurdie 1585
        'LMOS'                      => 'LinuxDevices',
1586
        'MANUFACTURING'             => 'Manufacturing',
1587
        'MREF_Package'              => 'MREF_Package',
1588
        'MASS_Dev'                  => 'MASS_Dev_Bus',
1589
        's4k_tracs'                 => 'TRACS',
1590
        'MASS_Dev_Tools'            => 'DevTools',
1197 dpurdie 1591
 
2635 dpurdie 1592
        'GMPTE2005'                 => 'ITSO_TRACS',
1593
        'GMPTE2005_obe'             => 'ITSO_TRACS/obe',
1594
        'UK_ITSO_COMPLIANT'         => 'ITSO_TRACS',
2412 dpurdie 1595
 
1596
        'MASS_Dev_Infra/security'   => 'MASS_Dev_Infra/Security',
1597
        'MASS_Dev_Infra/web'        => 'MASS_Dev_Infra/Web',
1598
        'MASS_Dev_Infra/cdss'       => 'MASS_Dev_Infra/Cdss',
2548 dpurdie 1599
 
1600
        'TRACS/faresets'            => 'ITSO_TRACS/faresets',
2553 dpurdie 1601
        'ProjectCD'                 => 'DPG_SWCode/ProjectCD',
2635 dpurdie 1602
 
1603
        'LinuxDevices/linux/tools'      => 'LinuxDevices/tools',
1604
        'LinuxDevices/apps/iVal-AFC'    => 'LinuxDevices/iVal-AFC'
392 dpurdie 1605
    );
1606
 
2354 dpurdie 1607
    my %PreferredPath = (
1608
        'MASS_Dev_Bus/Reports'      => 1,
1609
        'MASS_Dev_Bus/CBP'          => 1,
1610
        'MASS_Dev_Bus/Business'     => 1,
2635 dpurdie 1611
        'MASS_Dev_Bus/CIPP'         => 1,
2412 dpurdie 1612
 
1613
        'MASS_Dev_Infra/ProjectSpecific' => 1,
2354 dpurdie 1614
    );
1615
 
392 dpurdie 1616
    # default is 1
1617
    my %VobDepth = (
1618
        'DPG_SWBase'                => 2,
1197 dpurdie 1619
        'ITSO_TRACS'                => 2,
1451 dpurdie 1620
        'ITSO_TRACS/Packages'       => 1,
392 dpurdie 1621
        'MASS_Dev_Bus'              => 2,
1622
        'MASS_Dev_Infra'            => 2,
1623
        'MPR'                       => 2,
2553 dpurdie 1624
        'DPG_SWCode/ProjectCD'      => 3,
392 dpurdie 1625
        'TRACS'                     => 2,
1626
        'VIX-PAYMENTS'              => 2,
1627
        'WINCE500'                  => 2,
1628
        'DAMS_mos_diag'             => 2,
1629
        'MASS_Dev_Bus/Financial'    => 3,
2635 dpurdie 1630
        'LinuxDevices'              => 2,
1631
        'LinuxDevices/linux'        => 3,
1632
        'SmartSite'                 => 2,
392 dpurdie 1633
    );
1634
 
1635
    return ('SVN') if ( $PackageData{$pkgid}{isSVN} );
1636
    my $name = $PackageData{$pkgid}{name};
1637
 
1638
    # If only one VOB
1639
    #
1640
    my $path = '';
1641
    unless ( $PackageData{$pkgid}{BadVob} || $PackageData{$pkgid}{MultiVob} )
1642
    {
1197 dpurdie 1643
        my @paths = reverse sort keys %{$PackageData{$pkgid}{vobPath}};
392 dpurdie 1644
        $path = $paths[0] if exists $paths[0];
1645
    }
1646
 
1647
    #
1648
    #   Some path cleanup
1649
    #
1650
    if ( $path )
1651
    {
2354 dpurdie 1652
        $path =~ s~\s+~~i;
2319 dpurdie 1653
        $path =~ s~/build.pl$~~i;
1654
        $path =~ s~/src$~~i;
395 dpurdie 1655
        $path =~ s~DPC_SWCode/~DPG_SWCode/~i;
392 dpurdie 1656
        $path =~ s~MASS_Dev/Bus/~MASS_Dev_Bus/~i;
1657
        $path =~ s~MASS_Dev_Bus/Cbp/~MASS_Dev_Bus/CBP/~i;
2354 dpurdie 1658
        $path =~ s~MASS_Dev_Bus/WebServices~MASS_Dev_Bus/WebServices~i;
392 dpurdie 1659
        $path =~ s~/Vastraffik/~/Vasttrafik/~;
1660
        $path =~ s~/MREF_Package/ergpostmongui$~/MREF_Package/ergpostmongui~i;
1661
    }
1662
 
1663
    #
1664
    #   Brute force VOB renaming
1665
    #
1666
    foreach my $name ( keys %VobRename  )
1667
    {
1668
        my $newName = $VobRename{$name};
1669
        $path =~ s~^/$name/~/$newName/~i;
1197 dpurdie 1670
        $path =~ s~^/$name$~/$newName~i;
392 dpurdie 1671
    }
1672
 
2635 dpurdie 1673
    $PackageData{$pkgid}{mappingPath} = $path;
1674
 
395 dpurdie 1675
    return $Named{$name}  if ( exists $Named{$name} );
1676
 
1677
    return 'DevTools/ant'  if ( $name =~ m~^ant~ );
1678
    return 'DevTools/ant'  if ( $name =~ m~^jant~ );
1679
 
1680
    return 'MASS_Dev_Dataman' if ( $name =~ m~^dm_~ );
1681
 
1682
    return 'MPR/EMV/emvl2' if ( $name =~ m~^cp[sf]-~ );
1683
 
1684
    return 'COTS' if ( $PackageData{$pkgid}{type} eq 'COTS' && ! exists $PackageData{$pkgid}{vobs}{'LMOS'});
1685
 
1686
    #
1687
    #   Must resolve Multivobs
1688
    #
1689
    if ( $PackageData{$pkgid}{MultiVob} )
1690
    {
1691
        $path = resolveMultiVob($name, $pkgid );
1692
    }
1693
 
392 dpurdie 1694
    my $vob = '';
1695
    my @pathBase;
1696
    my @pathFull;
1697
    $path =~ s~/$~~g;
1698
    $path =~ s~^/~~g;
1699
    @pathFull = split( '/', $path);
1700
    $vob = $pathFull[0] || $path;
1701
    push @pathFull, $vob unless ( @pathFull );
1702
 
1703
    @pathBase = @pathFull;
1704
    delete $pathBase[-1];
1705
    push @pathBase, $vob unless ( @pathBase );
1706
 
1707
#print "Full: @pathFull\n";
1708
#print "Base: @pathBase\n";
1709
 
395 dpurdie 1710
    return 'MOS/images'  if (($vob eq 'COTS' || $vob eq 'MOS') &&  $name =~ m~^mos_~ && $name =~ m~\d\d\d\d~);
392 dpurdie 1711
 
1712
    return 'COTS' if ( $vob =~ m~^COTS_~ );
1713
    return 'COTS' if ( $vob eq 'COTS' );
1714
 
1715
    return 'DPG_SWBase/Demos'  if ($vob eq 'DPG_SWBase' &&  $name =~ m~^demo_~ );
1716
    return 'DPG_SWBase/Demos'  if ( $name =~ m~^qt_demo~ );
1717
 
1718
    return 'DPG_SWBase/daf_utils'  if ( $name =~ m~^time_ce~ );
1719
    return 'DPG_SWBase/daf_utils'  if ( $name =~ m~^daf_utils~ );
1720
    return 'DPG_SWBase/daf_utils'  if ( $name =~ m~^daf_bertlv~ );
1721
    return 'DPG_SWBase'            if ( $name =~ m~^daf_br_compiler~ );
1722
    return 'DPG_SWBase'            if ( $name =~ m~^hcp5000icons$~ );
1723
 
1724
    return 'DPG_SWBase/daf_components'  if ( $vob eq 'DPG_SWBase' && $name =~ m~^daf_component_~ );
1725
    return 'DPG_SWBase/daf_transap'  if ( $path =~ m~/transap$~ || $path =~ m~/transap/~ );
1726
#   return 'DPG_SWBase/daf'  if ( $vob eq 'DPG_SWBase' && $name =~ m~^daf_~ );
1727
    return 'DPG_SWBase/IDC'  if ( $vob =~ m~DPG_SW~ && $name =~ m~^IDC~ );
1728
 
1729
    return 'DPG_SWCode/dac'  if ( $name =~ m~^dac_~ );
1730
    return 'DPG_SWCode/ddu'  if ( $name =~ m~^ddu_~ );
1731
    return 'DPG_SWCode/utilities'  if ( $vob eq 'DPG_SWCode' && $path =~ m/utilities/ );
1732
 
1733
    if ( $name =~ m~^VIX~ || $name =~ m~^ERG~ )
1734
    {
1735
        return 'MREF_Package'
395 dpurdie 1736
            if ( $vob =~ m~^CORE~ || $vob =~ m~^MASS~ || $vob =~ m~^MREF~ );
392 dpurdie 1737
    }
1738
 
1739
#    if ( $vob ne 'MREF_Package' )
1740
#    {
1741
#print "---- $name, $path\n" if ( $name =~ m~^VIX~ );
1742
#print "---- $name, $path\n" if ( $name =~ m~^ERG~ );
1743
#    }
1744
 
1745
    #
1746
    #   ProjectCd is badly done
1747
    #   Many packages are in named directories, some are not.
1748
    #
2553 dpurdie 1749
    if ( defined $pathFull[1] && $pathFull[1] eq 'ProjectCD' )
392 dpurdie 1750
    {
2553 dpurdie 1751
        push @pathBase, $pathFull[2] if ( defined $pathFull[2]  );
392 dpurdie 1752
    }
1753
 
395 dpurdie 1754
    #
1755
    #   Detect core_xxx packages
1756
    #
1757
    if ( $vob eq 'MASS_Dev_Infra' && $path =~ m~/core_~ )
1758
    {
1759
        return "$vob/Core";
1760
    }
1761
 
392 dpurdie 1762
    return "UNKNOWN"
1763
        unless ( $vob );
1764
 
1765
    #
2354 dpurdie 1766
    #   Can we map the package into a preferred path
1767
    #
1768
    foreach my $ppath ( sort keys %PreferredPath )
1769
    {
2412 dpurdie 1770
        if ( $path =~ m~${ppath}(/|$)~i )
2354 dpurdie 1771
        {
1772
#print "---- Preferred path: $name, $ppath\n";
1773
            return $ppath;
1774
        }
2412 dpurdie 1775
 
1776
        #
1777
        #   Try a little harder
1778
        #
1779
        foreach my $tpath  ( keys %{$PackageData{$pkgid}{vobPath}} )
1780
        {
1781
            if ( $tpath =~ m~${ppath}(/|$)~i )
1782
            {
1783
#print "---- Preferred path: $name, $ppath\n";
1784
                return $ppath;
1785
            }
1786
        }
2354 dpurdie 1787
    }
1788
 
2635 dpurdie 1789
    if ( $vob eq 'LinuxDevices' )
1790
    {
1791
        @pathBase = @pathFull;
1792
    }
1793
 
2354 dpurdie 1794
    #
2635 dpurdie 1795
    #   Last resort
392 dpurdie 1796
    #   Determine depth for this path
1797
    #
1798
    my $depth = 1;
1799
    foreach ( reverse sort keys %VobDepth)
1800
    {
1801
        if ( $path =~ m~^$_~ )
1802
        {
1803
            $depth = $VobDepth{$_};
1804
            last;
1805
        }
1806
    }
2354 dpurdie 1807
 
392 dpurdie 1808
#print "--Joining: $name, $depth, @pathBase\n";
1809
    return pathJoin($depth, $path, $name, @pathBase);
1810
}
1811
 
1812
sub pathJoin
1813
{
1814
    my ($num, $path, $name, @data) = @_;
1815
    my $val = '';
1816
    my $char = '';
1817
    for( my $ii = 0; $ii < $num; $ii++)
1818
    {
1819
        last unless ( defined $data[$ii] );
1820
        $val = $val . $char . $data[$ii];
1821
        $char = '/'
1822
    }
1823
#print "----$path, $name: $num, @data --> $val\n";
1824
    return $val;
1825
}
1826
 
395 dpurdie 1827
 
392 dpurdie 1828
#-------------------------------------------------------------------------------
395 dpurdie 1829
# Function        : resolveMultiVob
1830
#
1831
# Description     : Time to resolve multivob issues
1832
#
1833
# Inputs          : $name           - Package Name
1834
#                   $pkgid          - Package ID
1835
#
1836
#
1837
# Returns         : Resulved path
1838
#
1839
sub resolveMultiVob
1840
{
1841
    my ($name, $pkgid) = @_;
1842
    my $path = '';
1843
 
1844
my %preferredVob = (
1845
        'uiconv'        => 'DPG_SWBase',
1846
        'gnupg'         => 'COTS',
1847
    );
1848
 
1849
 
1850
    my $pvob = $preferredVob{$name};
1851
    unless ( defined $pvob )
1852
    {
1853
        if ( exists ($PackageData{$pkgid}{vobs}{MASS_Dataman}) && exists ($PackageData{$pkgid}{vobs}{MASS_Dev_Dataman})  )
1854
        {
1855
            $pvob = 'MASS_Dev_Dataman';
1856
        }
1857
 
1858
        if ( exists ($PackageData{$pkgid}{vobs}{DPG_SWBase}) && exists ($PackageData{$pkgid}{vobs}{DPG_SWCode})  )
1859
        {
1860
            $pvob = 'DPG_SWCode';
1861
        }
1862
 
1863
        if ( exists ($PackageData{$pkgid}{vobs}{MREF_Package}) )
1864
        {
1865
            $pvob = 'MREF_Package';
1866
        }
1867
 
1868
        if ( exists ($PackageData{$pkgid}{vobs}{MASS_Dev}) && exists ($PackageData{$pkgid}{vobs}{MASS_Dev_Bus}))
1869
        {
1870
            $pvob = 'MASS_Dev_Bus';
1871
        }
1872
 
1873
        if ( exists ($PackageData{$pkgid}{vobs}{s4k_obe}) && exists ($PackageData{$pkgid}{vobs}{GMPTE2005}))
1874
        {
1875
            $pvob = 'GMPTE2005';
1876
        }
1877
 
1878
        if ( exists ($PackageData{$pkgid}{vobs}{s4k_obe}) && exists ($PackageData{$pkgid}{vobs}{GMPTE2005_obe}))
1879
        {
1880
            $pvob = 'GMPTE2005_obe';
1881
        }
1882
 
1883
        if ( exists ($PackageData{$pkgid}{vobs}{TRACS}) && exists ($PackageData{$pkgid}{vobs}{GMPTE2005}))
1884
        {
1885
            $pvob = 'GMPTE2005';
1886
        }
1887
 
1888
        if ( exists ($PackageData{$pkgid}{vobs}{MASS_Dev_Infra}) && exists ($PackageData{$pkgid}{vobs}{MASS_Dev_Tools}))
1889
        {
1890
            $pvob = 'MASS_Dev_Infra';
1891
        }
1892
 
1893
        if ( exists ($PackageData{$pkgid}{vobs}{COTS}) && exists ($PackageData{$pkgid}{vobs}{MOS}))
1894
        {
1895
            $pvob = 'MOS';
1896
        }
1897
 
1898
        if ( exists ($PackageData{$pkgid}{vobs}{COTS}) && exists ($PackageData{$pkgid}{vobs}{MPR}))
1899
        {
1900
            $pvob = 'MPR';
1901
        }
1902
 
1903
        if ( exists ($PackageData{$pkgid}{vobs}{COTS}) && exists ($PackageData{$pkgid}{vobs}{COTS_Java}))
1904
        {
1905
            $pvob = 'COTS';
1906
        }
1907
    }
1908
 
1909
    if ( defined $pvob )
1910
    {
1911
        if ( exists $PackageData{$pkgid}{vobResolver}{$pvob} )
1912
        {
1913
            $path = $PackageData{$pkgid}{vobResolver}{$pvob} ;
1914
        }
1915
    }
1916
    else
1917
    {
1918
        Message ("Unresolved multivob: $PackageData{$pkgid}{name}");
1919
#DebugDumpData("DATA", \$PackageData{$pkgid} );
1920
#exit 1;
1921
    $path = 'UNKNOWN';
1922
    }
1923
 
1924
    return $path;
1925
}
1926
 
1927
 
1928
#-------------------------------------------------------------------------------
392 dpurdie 1929
# Function        : examineVcsTag
1930
#
1931
# Description     : Examine a VCS Tag and determine if it looks like rubbish
1932
#
1933
# Inputs          : Tag to examine
1934
#
1935
# Returns         : Badness
1936
#
1937
sub examineVcsTag
1938
{
1939
    my ($vcstag) = @_;
1940
    my $bad = 0;
1941
    if ( $vcstag =~ m~^CC::(.*?)(::(.+))?$~ )
1942
    {
1943
        my $path = $1  || '';
1944
        my $label = $2 || '';
1945
#print "$vcstag, $bad, $path, $label\n";
1946
        $bad = 1 unless ( $label );
1947
        $bad = 1 if ( $label =~ m~^N/A$~i || $label  =~ m~^na$~i );
1948
 
1949
        $bad = 1 unless ( $path );
1950
        $bad = 1 if ( $path =~ m~^N/A$~i || $path  =~ m~^na$~i );
2548 dpurdie 1951
        $bad = 1 if ( $path =~ m~^/dpkg_archive~ || $path  =~ m~^dpkg_archive~ );
1952
        $bad = 1 if ( $path =~ m~^/devl/~ || $path  =~ m~^devl/~ );
395 dpurdie 1953
        $bad = 1 if ( $path =~ m~^CVS~ );
392 dpurdie 1954
        $bad = 1 if ( $path =~ m~^http:~i );
1955
        $bad = 1 if ( $path =~ m~^[A-Za-z]\:~ );
1956
        $bad = 1 if ( $path =~ m~^//~ );
1957
        $bad = 1 if ( $path =~ m~^/blade1/~ );
1958
        $bad = 1 if ( $path =~ m~^/devl/~ );
394 dpurdie 1959
        $bad = 1 if ( $path =~ m~^/*none~i );
1960
        $bad = 1 if ( $path =~ m~^/*NoWhere~i );
1961
        $bad = 1 if ( $path =~ m~^-$~i );
2548 dpurdie 1962
        $bad = 1 if ( $path =~ m~^cvsserver:~ );
1963
        $bad = 1 if ( $path =~ m~,\s*module:~ );
392 dpurdie 1964
        $bad = 1 if ( $path =~ m~[()]~ );
1965
#        $bad = 1 unless ( $path =~ m~^/~ );
1966
    }
1967
    else
1968
    {
1969
        $bad = 1;
1970
    }
1971
    return $bad;
1972
}
1973
 
1974
#-------------------------------------------------------------------------------
1975
# Function        : usedBy
1976
#
1977
# Description     : Given a pvid, determine which release(s) need it
1978
#
1979
# Inputs          : $pvid
1980
#
1981
# Returns         : Nothing
1982
#
1983
sub usedBy
1984
{
1985
    my ($pvid) = @_;
1986
    Error ("PVID is not an essential package") unless ( exists $ScmPackages{$pvid} );
1987
 
1988
    my @releases = @{$ScmPackages{$pvid}{'release'}} if exists($ScmPackages{$pvid}{'release'});
1989
    my @users = @{$ScmPackages{$pvid}{'usedBy'}} if exists($ScmPackages{$pvid}{'usedBy'});
1990
 
1991
    while ( @users )
1992
    {
1993
        my $pv = pop @users;
1994
        push @releases, @{$ScmPackages{$pv}{'release'}} if (exists $ScmPackages{$pv}{'release'});
1995
        push @users, @{$ScmPackages{$pv}{'usedBy'}} if (exists($ScmPackages{$pv}{'usedBy'}));
1996
    }
1997
 
1998
    my %releases;
1999
    my %ireleases;
2000
    my @dreleases = ();
2001
    my @ireleases;
2002
    foreach ( @releases )
2003
    {
2004
        if ( $ScmPackages{$pvid}{tlp}  )
2005
        {
2006
            next if ( exists $releases{$_} );
2007
            push @dreleases, $_;
2008
            $releases{$_} = 1;
2009
        }
2010
        else
2011
        {
2012
            next if ( exists $ireleases{$_} );
2013
            push @ireleases, $_;
2014
            $ireleases{$_} = 1;
2015
        }
2016
    }
2017
    return \@dreleases, \@ireleases;
2018
}
2019
 
2020
#-------------------------------------------------------------------------------
2021
# Function        : smartPackageType
2022
#
2023
# Description     : Have a look at the projects in the package set and
2024
#                   attempt to determine what sort of mechanism to use
2025
#
2026
# Inputs          : pkgid            - Package ID
2027
#
2028
# Returns         : Type, Array of suffixes
2029
#
2030
sub smartPackageType
2031
{
2032
    my ($pkgid) = @_;
2033
    my %suffixes;
2034
 
2035
    #
2036
    #   Suffixes for all packages
2037
    #
2038
    foreach  ( @{$PackageSet{$pkgid}} )
2039
    {
2040
        my $suffix = $ScmPackages{$_}{'suffix'};
2041
        $suffixes{$suffix}++;
2042
    }
2043
 
2044
    my $packageType = 'UNKNOWN';
2045
 
2046
    if ( exists $suffixes{'.cots'} ) {
2047
        $packageType = 'COTS';
2048
 
2049
    } elsif ( exists $suffixes{'.tool'} ) {
2050
        $packageType = 'TOOL';
2051
 
2052
    } elsif ( scalar (keys %suffixes ) == 1 ) {
2053
        $packageType = 'SINGLE_PROJECT';
2054
 
2055
    } else {
2056
        $packageType = 'MULTIPLE_PROJECT';
2057
    }
2058
 
2059
    return $packageType, keys %suffixes;
2060
}
2061
 
394 dpurdie 2062
 
392 dpurdie 2063
#-------------------------------------------------------------------------------
394 dpurdie 2064
# Function        : vcsCleanup
2065
#
2066
# Description     : Cleanup and rewrite a vcstag
2067
#
2068
#                   DUPLICATED IN:
2069
#                       - cc2svn_procdata
2319 dpurdie 2070
#                       - cc2svn_importpackage
394 dpurdie 2071
#
2072
# Inputs          : vcstag
2073
#
2074
# Returns         : Cleaned up vcs tag
2075
#
2076
sub vcsCleanup
2077
{
2078
    my ($tag) = @_;
2548 dpurdie 2079
    $tag =~ tr~\\/~/~;                              # Force use of /
2080
    $tag =~ s~/+$~~;                                # Trailing /
394 dpurdie 2081
    if ( $tag =~ m~^CC::~ )
2082
    {
2548 dpurdie 2083
        $tag =~ s~CC::/VOB:/~CC::/~;                # Kill stuff
2354 dpurdie 2084
        $tag =~ s~CC::load\s+~CC::~;                # Load rule
2085
        $tag =~ s~CC::\s+~CC::~;                    # Leading white space
2086
        $tag =~ s~CC::[A-Za-z]\:/~CC::/~;           # Leading driver letter
2087
        $tag =~ s~CC::/+~CC::/~;                    # Multiple initial /'s
2319 dpurdie 2088
        $tag =~ s~/build.pl::~::~i;
2089
        $tag =~ s~/src::~::~i;
394 dpurdie 2090
        $tag =~ s~MASS_Dev_Bus/Cbp/~MASS_Dev_Bus/CBP/~i;
2091
        $tag =~ s~MASS_Dev_Bus~MASS_Dev_Bus~i;
2092
        $tag =~ s~/MASS_Dev/Infra~MASS_Dev_Infra~i;
2093
        $tag =~ s~/MASS_Dev/Bus/web~/MASS_Dev_Bus/web~i;
2094
 
2095
        $tag =~ s~/Vastraffik/~/Vasttrafik/~;
2096
        $tag =~ s~/MREF_Package/ergpostmongui$~/MREF_Package/ergpostmongui~i;
395 dpurdie 2097
        $tag =~ s~DPC_SWCode/~DPG_SWCode/~i;
394 dpurdie 2098
    }
2099
    return $tag;
2100
}
2101
 
2102
#-------------------------------------------------------------------------------
392 dpurdie 2103
# Function        : extractVob
2104
#
2105
# Description     : Extract the VOB for a package
2106
#
2107
# Inputs          : $entry              - pvid
2108
#
2109
# Returns         : Vob Name
2110
#
2111
sub extractVob
2112
{
2113
    my ($entry) = @_;
2114
 
394 dpurdie 2115
    $ScmPackages{$entry}{'vcstag'} = vcsCleanup($ScmPackages{$entry}{'vcstag'});
392 dpurdie 2116
 
2117
    my $tag = $ScmPackages{$entry}{vcstag};
2118
    my $package = $ScmPackages{$entry}{name};
2119
    if ( $tag =~ m~^SVN::~ )
2120
    {
2121
        $tag =~ m~SVN::(.*)(/tags/|/branches/|/trunk)~;
2122
        return 'SVN', $1;
2123
    }
2124
 
2125
    if ( $tag !~ m~^CC::~ || examineVcsTag ($tag)){
2126
        $ScmPackages{$entry}{BadVob} = 1;
2127
        return undef;
2128
    }
2129
 
2130
    $tag =~ m~^CC::(.*)::(.*)~;
2131
    my $path = '/' . $1;
2132
    $path =~ tr~\\/~/~s;
2133
    my @pelements = split( m'/+', $path);
2134
    my $vob = $pelements[1];
2135
    unless ( $vob )
2136
    {
2137
        $ScmPackages{$entry}{BadVob} = 1;
2138
        return undef;
2139
    }
2140
 
2141
    $ScmPackages{$entry}{VobName} = $vob;
2142
    $ScmPackages{$entry}{VobPath} = $path;
2143
    return $vob, $path;
2144
}
2145
 
2146
#-------------------------------------------------------------------------------
2147
# Function        : getBadLabelData
2148
#
2149
# Description     : Read in a previous log file and determine versions that
2150
#                   have already been examined
2151
#
2152
# Inputs          : 
2153
#
2154
# Returns         : 
2155
#
2156
sub getBadLabelData
2157
{
2158
    my $badFile = 'cc2svn_labeltest.bad.txt';
2159
    Message ("Reading Bad Label: $badFile");
2160
    open (my $fh, '<', $badFile ) || Error ("Cannot open $badFile");
2161
    while ( <$fh> )
2162
    {
2163
        #
2164
        #   Format of data is:
2165
        #       pvid, $name:, $tag, $rv
2166
        #
2167
        chomp;
2168
        next if ( m~^#~ );
2169
        my @data = split (/\s*,\s*/, $_);
2170
        next unless ( $data[0] );
2171
        $ScmPackages{$data[0]}{BadCCView} = 1 if exists ($ScmPackages{$data[0]});
2172
    }
2173
    close $fh;
2174
}
2175
 
2176
#-------------------------------------------------------------------------------
2449 dpurdie 2177
# Function        : getProtectedPackages
2178
#
2179
# Description     : Read in protected package data
2180
#
2181
# Inputs          : 
2182
#
2183
# Returns         : 
2184
#
2185
sub getProtectedPackages
2186
{
2187
    my $badFile = 'cc2svn_protected.txt';
2188
    Message ("Reading Protected Package: $badFile");
2189
    open (my $fh, '<', $badFile ) || Error ("Cannot open $badFile");
2548 dpurdie 2190
    my $section_comment;
2449 dpurdie 2191
    while ( <$fh> )
2192
    {
2193
        #
2194
        #   Format of data is:
2195
        #       packageName     - protected
2196
        #      -packageName     - Known Broken
2197
        #
2548 dpurdie 2198
        #   Line Comment is '#'
2199
        #   Package Comment is delimted by White space
2200
        #   Section Comment is [ comment ]
2201
        #
2449 dpurdie 2202
        s~\s+$~~;
2203
        s~^\s+~~;
2204
        next if ( m~^#~ );
2548 dpurdie 2205
        if ( m~^\s*\[\s*(.*?)\s*\]~ )
2206
        {
2207
            $section_comment = $1;
2208
            next;
2209
        }
2210
 
2449 dpurdie 2211
        $_ .= ' ';
2212
        my @data = split (/ /, $_, 2);
2213
        next unless ( $data[0] );
2214
        my $name = $data[0];
2548 dpurdie 2215
        my $comment = $data[1];
2216
        $comment =~ s~^\s+#~~;
2217
        $comment =~ s~^\s+~~;
2218
        $comment =~ s~\s+$~~;
2219
        $comment = $comment || $section_comment;
2449 dpurdie 2220
        my $mode = 'Protected';
2221
        if ( $name =~ m~^-(.*)~ )
2222
        {
2223
            $name = $1;
2224
            $mode = 'Broken'
2225
        }
2548 dpurdie 2226
        $Protected{$name}{mode} = $mode;
2227
        $Protected{$name}{comment} = $comment if ( $comment );
2449 dpurdie 2228
    }
2229
    close $fh;
2230
#    DebugDumpData('%Protected', \%Protected );
2231
}
2232
 
2233
#-------------------------------------------------------------------------------
392 dpurdie 2234
#   Documentation
2235
#
2236
 
2237
=pod
2238
 
2239
=for htmltoc    SYSUTIL::cc2svn::
2240
 
2241
=head1 NAME
2242
 
2243
cc2svn_procdata - Process CC2SVN Essential Package Data
2244
 
2245
=head1 SYNOPSIS
2246
 
2247
  jats cc2svn_procdata [options]
2248
 
2249
 Options:
2250
    -help              - brief help message
2251
    -help -help        - Detailed help message
2252
    -man               - Full documentation
2253
    -usedby=PVID       - Determine 'Releases' that use a specified PVID
2254
    -allpackages       - Generate data for ALL packages
2255
 
2256
=head1 OPTIONS
2257
 
2258
=over 8
2259
 
2260
=item B<-help>
2261
 
2262
Print a brief help message and exits.
2263
 
2264
=item B<-help -help>
2265
 
2266
Print a detailed help message with an explanation for each option.
2267
 
2268
=item B<-man>
2269
 
2270
Prints the manual page and exits.
2271
 
2272
=item B<-usedby=PVID>
2273
 
2274
This option will alter the operation of the program. It will display the
2275
releases that 'use' the specified PVID and then exit.
2276
 
2277
=back
2278
 
2279
=head1 DESCRIPTION
2280
 
2281
This program is a tool used in the conversion of ClearCase VOBS to subversion.
2282
 
2283
=over 8
2284
 
2285
=item *
2286
 
2287
It will process a datafile and generate infiormation used by other tools.
2288
 
2289
=item *
2290
 
2291
It will display suspect package versions.
2292
 
2293
=item *
2294
 
2295
It will generate an HTML file with a great deal of information about the
2296
packages in the conversion.
2297
 
2298
=item *
2299
 
2300
It can backtrack a PVID and report the Release or Releases that need the package
2301
version
2302
 
2303
=back
2304
 
2305
=cut
2306