Subversion Repositories DevTools

Rev

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

Rev 1272 Rev 1341
Line 66... Line 66...
66
my $opt_workDir = '/work';
66
my $opt_workDir = '/work';
67
my $opt_vobMap;
67
my $opt_vobMap;
68
my $opt_preserveProjectBase;
68
my $opt_preserveProjectBase;
69
my $opt_ignoreProjectBaseErrors;
69
my $opt_ignoreProjectBaseErrors;
70
my $opt_delete;
70
my $opt_delete;
-
 
71
my $opt_recentAge = 14;             # Days
71
 
72
 
72
################################################################################
73
################################################################################
73
#   List of Projects Suffixes and Branch Names to be used within SVN
74
#   List of Projects Suffixes and Branch Names to be used within SVN
74
#
75
#
75
#       Name        - Name of branch for the project
76
#       Name        - Name of branch for the project
Line 211... Line 212...
211
my $noTransfer;
212
my $noTransfer;
212
my $rippleCount = 0;
213
my $rippleCount = 0;
213
my $svnRepo;
214
my $svnRepo;
214
my $processCount = 0;
215
my $processCount = 0;
215
my $processTotal = 0;
216
my $processTotal = 0;
-
 
217
my $recentCount = 0;
216
 
218
 
217
our $GBE_RM_URL;
219
our $GBE_RM_URL;
218
my $UNIX = $ENV{'GBE_UNIX'};
220
my $UNIX = $ENV{'GBE_UNIX'};
219
 
221
 
220
my $result = GetOptions (
222
my $result = GetOptions (
221
                "help+"         => \$opt_help,          # flag, multiple use allowed
223
                "help+"         => \$opt_help,          # flag, multiple use allowed
222
                "manual:3"      => \$opt_help,
224
                "manual:3"      => \$opt_help,
223
                "verbose:+"     => \$opt_verbose,       # Versose
225
                "verbose:+"     => \$opt_verbose,       # Versose
224
                "repository:s"  => \$opt_repo,          # Name of repository
226
                "repository:s"  => \$opt_repo,          # Name of repository
-
 
227
                'rbase:s'       => \$opt_repo_base,     # Base of the repo
225
                "flat!"         => \$opt_flat,          # Flat structure
228
                "flat!"         => \$opt_flat,          # Flat structure
226
                "test!"         => \$opt_test,          # Test operations
229
                "test!"         => \$opt_test,          # Test operations
227
                "reuse!"        => \$opt_reuse,         # Reuse ClearCase views
230
                "reuse!"        => \$opt_reuse,         # Reuse ClearCase views
228
                "age:i"         => \$opt_age,           # Only recent versions
231
                "age:i"         => \$opt_age,           # Only recent versions
229
                "dump:1"        => \$opt_dump,          # Dump Data
232
                "dump:1"        => \$opt_dump,          # Dump Data
Line 854... Line 857...
854
            }
857
            }
855
        }
858
        }
856
 
859
 
857
        #
860
        #
858
        #   Keep recent versions
861
        #   Keep recent versions
-
 
862
        #       Keep versions created in the last N days
-
 
863
        #       Will keep recent ripples too
859
        #
864
        #
860
        if ( $pruneMode == 1 )
865
        if ( $pruneMode == 1 )
861
        {
866
        {
862
            foreach my $entry ( keys(%versions) )
867
            foreach my $entry ( keys(%versions) )
863
            {
868
            {
864
                next if ( $versions{$entry}{Age} > 10  );
869
                next unless ( $versions{$entry}{Age} <= $opt_recentAge  );
865
                 $versions{$entry}{keepRecent} = 1;
870
                $versions{$entry}{keepRecent} = 1;
-
 
871
                $recentCount++;
866
print "--- Recent version $versions{$entry}{vname}\n";
872
#print "--- Recent version $versions{$entry}{vname}, $versions{$entry}{Age} <= $opt_recentAge\n";
867
            }
873
            }
868
 
874
 
-
 
875
#            #
-
 
876
#            #   Keep the tip of each branch
-
 
877
#            #
-
 
878
#            foreach my $entry ( @endPoints )
-
 
879
#            {
-
 
880
#                next if exists $versions{$entry}{keepRecent};
-
 
881
#                $versions{$entry}{keepRecent} = 1;
-
 
882
##print "--- Tip version $versions{$entry}{vname}\n";
-
 
883
#            }
869
        }
884
        }
870
        
885
        
871
 
-
 
872
        #
886
        #
873
        #   Keep versions that are common parents to Essential Versions
887
        #   Keep versions that are common parents to Essential Versions
874
        #       Mark paths through the tree to essential versions
888
        #       Mark paths through the tree to essential versions
875
        #       Mark nodes with the number of essential versions that they sprout
889
        #       Mark nodes with the number of essential versions that they sprout
876
        #   Don't do it if we are ripple pruning
890
        #   Don't do it if we are ripple pruning
Line 1135... Line 1149...
1135
    Message("Retained entries: $processTotal" );
1149
    Message("Retained entries: $processTotal" );
1136
    Message("Pruned entries: $pruneCount");
1150
    Message("Pruned entries: $pruneCount");
1137
    Message("Deadwood entries: $trimCount");
1151
    Message("Deadwood entries: $trimCount");
1138
    Message("Bad Singletons: $badSingletonCount");
1152
    Message("Bad Singletons: $badSingletonCount");
1139
    Message("Ripples: $rippleCount");
1153
    Message("Ripples: $rippleCount");
-
 
1154
    Message("Recent entries: $recentCount");
1140
}
1155
}
1141
 
1156
 
1142
sub calculateWalkOrder
1157
sub calculateWalkOrder
1143
{
1158
{
1144
    my ($entry) = @_;
1159
    my ($entry) = @_;
Line 1353... Line 1368...
1353
    Message ("------------------------------------------------------------------" );
1368
    Message ("------------------------------------------------------------------" );
1354
    Message ("Package $processCount of $processTotal");
1369
    Message ("Package $processCount of $processTotal");
1355
 
1370
 
1356
    Message ("New package-version: " . GetVname($entry) . " Tag: " . $versions{$entry}{vcsTag} );
1371
    Message ("New package-version: " . GetVname($entry) . " Tag: " . $versions{$entry}{vcsTag} );
1357
 
1372
 
-
 
1373
    #
-
 
1374
    #   Detect user abort
-
 
1375
    #
-
 
1376
    if ( -f $cwd . '/stopfile' )
-
 
1377
    {
-
 
1378
        $globalError = 1;
-
 
1379
        Message ("Stop file located");
-
 
1380
    }
1358
 
1381
 
1359
    #
1382
    #
1360
    #   If we have a global error,then we pretend to process, but we
1383
    #   If we have a global error,then we pretend to process, but we
1361
    #   report errors for the logging system
1384
    #   report errors for the logging system
1362
    #
1385
    #
Line 1402... Line 1425...
1402
            $timestamp,
1425
            $timestamp,
1403
            $duration,
1426
            $duration,
1404
            $data{errStr} || ''
1427
            $data{errStr} || ''
1405
            );
1428
            );
1406
    logToFile( $cwd . '/importsummary.txt', ";$line;");
1429
    logToFile( $cwd . '/importsummary.txt', ";$line;");
1407
 
-
 
1408
    #
1430
    #
1409
    #   Sava data
1431
    #   Sava data
1410
    #
1432
    #
1411
    $data{errFlags} = $flags;
1433
    $data{errFlags} = $flags;
1412
    $data{duration} = $duration;
1434
    $data{duration} = $duration;
1413
    $versions{$entry}{rmRef} = $data{rmRef};
1435
    $versions{$entry}{rmRef} = $data{rmRef};
1414
    delete $data{rmRef};
1436
    delete $data{rmRef};
1415
    delete $data{tag};
1437
    delete $data{tag};
1416
    delete $data{ViewRoot};
1438
    ##delete $data{ViewRoot};
1417
    $versions{$entry}{data} = \%data;
1439
    $versions{$entry}{data} = \%data;
1418
 
1440
 
1419
    #
1441
    #
1420
    #   Delete the created view
1442
    #   Delete the created view
1421
    #   Its just a directory, so delete it
1443
    #   Its just a directory, so delete it
1422
    #
1444
    #
1423
    if ( $data{ViewRoot} && -d $data{ViewRoot})
1445
    if ( $data{ViewRoot} && -d $data{ViewRoot})
1424
    {
1446
    {
-
 
1447
        if ( !$opt_reuse || $rv )
-
 
1448
        {
-
 
1449
            Message ("Delete View: $data{ViewRoot}");
1425
        RmDirTree ($data{ViewRoot} ) if ( !$opt_reuse || $rv );
1450
            RmDirTree ($data{ViewRoot} );
-
 
1451
        }
-
 
1452
        else
-
 
1453
        {
-
 
1454
            Message ("Retaining View: $data{ViewRoot}");
-
 
1455
        }
-
 
1456
 
-
 
1457
    }
-
 
1458
    else
-
 
1459
    {
-
 
1460
        Message ("No view to delete");
1426
    }
1461
    }
1427
 
1462
 
1428
 
1463
 
1429
    #
1464
    #
1430
    #   If this version has any 'ripples' then process them while we have the
1465
    #   If this version has any 'ripples' then process them while we have the
Line 1590... Line 1625...
1590
        #
1625
        #
1591
        #   Look in ViewPath
1626
        #   Look in ViewPath
1592
        #   If it contains only ONE directory then we can suck it up
1627
        #   If it contains only ONE directory then we can suck it up
1593
        #
1628
        #
1594
        my $testDir = findDirWithStuff( $data->{ViewPath} );
1629
        my $testDir = findDirWithStuff( $data->{ViewPath} );
-
 
1630
 
1595
        unless ( $data->{ViewPath} eq $testDir  )
1631
        unless ( $data->{ViewPath} eq $testDir  )
1596
        {
1632
        {
1597
            Message ("Adjust Base Dir: $testDir");
1633
            Message ("Adjust Base Dir: $testDir");
1598
            $data->{adjustedPath} = $data->{ViewPath};
1634
            $data->{adjustedPath} = $data->{ViewPath};
1599
            $data->{ViewPath} = $testDir;
1635
            $data->{ViewPath} = $testDir;
Line 1951... Line 1987...
1951
    #
1987
    #
1952
    #   Perform the branch
1988
    #   Perform the branch
1953
    #
1989
    #
1954
    if ( defined $src_label )
1990
    if ( defined $src_label )
1955
    {
1991
    {
-
 
1992
        #
-
 
1993
        #   Backtrack source label to a branch
-
 
1994
        #   Will make the output version tree much prettier
-
 
1995
        #
-
 
1996
        $src_label = backTrackSvnLabel( $src_label );
-
 
1997
 
1956
        my @opts;
1998
        my @opts;
1957
        push (@opts, '-date', $date) if ( $date );
1999
        push (@opts, '-date', $date) if ( $date );
1958
        push (@opts, '-author', $author) if ( $author );
2000
        push (@opts, '-author', $author) if ( $author );
1959
        
2001
        
1960
        JatsToolPrint ( 'jats_svnlabel',
2002
        JatsToolPrint ( 'jats_svnlabel',
1961
                        '-packagebase', "$svnRepo/$packageNames",
2003
                        '-packagebase', "$svnRepo/$packageNames",
1962
                        'tags/' . $src_label,
2004
                        $src_label,
1963
                        '-branch',
2005
                        '-branch',
1964
                        '-clone', $tgt_label,
2006
                        '-clone', $tgt_label,
1965
                        @opts
2007
                        @opts
1966
                      );
2008
                      );
1967
    }
2009
    }
Line 2180... Line 2222...
2180
 
2222
 
2181
    while ( $base )
2223
    while ( $base )
2182
    {
2224
    {
2183
    my $fileCount = 0;
2225
    my $fileCount = 0;
2184
    my $dirCount = 0;
2226
    my $dirCount = 0;
-
 
2227
    my $firstDir;
2185
 
2228
 
2186
    my @list = glob( $base . '/*');
2229
    my @list = glob( $base . '/*');
2187
    foreach ( @list )
2230
    foreach ( @list )
2188
    {
2231
    {
2189
        next if ( $_ eq '.' );
2232
        next if ( $_ eq '.' );
2190
        next if ( $_ eq '..' );
2233
        next if ( $_ eq '..' );
2191
        if ( -d $_ )
2234
        if ( -d $_ )
2192
        {
2235
        {
2193
            $dirCount++;
2236
            $dirCount++;
-
 
2237
            $firstDir = $_ unless ( defined $firstDir );
2194
            return $base if ( $dirCount > 1  );
2238
            return $base if ( $dirCount > 1  );
2195
        }
2239
        }
2196
        else
2240
        elsif ( -e $_ )
2197
        {
2241
        {
2198
            return $base;
2242
            return $base;
2199
        }
2243
        }
-
 
2244
 
-
 
2245
        # else its probably a dead symlink
2200
    }
2246
    }
2201
    return $base unless ( $dirCount == 1  );
2247
    return $base unless ( $dirCount == 1  );
2202
    $base = $list[0];
2248
    $base = $firstDir;
2203
    }
2249
    }
2204
}
2250
}
2205
 
2251
 
2206
 
2252
 
2207
#-------------------------------------------------------------------------------
2253
#-------------------------------------------------------------------------------
Line 2816... Line 2862...
2816
        push @text, 'Bad Singletions : ' . $badSingletonCount;
2862
        push @text, 'Bad Singletions : ' . $badSingletonCount;
2817
        push @text, 'Deadwood entries : ' . $trimCount;
2863
        push @text, 'Deadwood entries : ' . $trimCount;
2818
        push @text, 'Walking Mode : Flat' if ($opt_flat);
2864
        push @text, 'Walking Mode : Flat' if ($opt_flat);
2819
        push @text, 'Pruned Mode : ' . $pruneModeString;
2865
        push @text, 'Pruned Mode : ' . $pruneModeString;
2820
        push @text, 'Pruned entries : ' . $pruneCount;
2866
        push @text, 'Pruned entries : ' . $pruneCount;
-
 
2867
        push @text, 'Recent entries : ' . $recentCount;
2821
 
2868
 
2822
        if ( @unknownProjects )
2869
        if ( @unknownProjects )
2823
        {
2870
        {
2824
            push @text, '|';
2871
            push @text, '|';
2825
            push @text, 'Unknown Projects';
2872
            push @text, 'Unknown Projects';
Line 2892... Line 2939...
2892
        push @text, 'B: Bad VCS Tag';
2939
        push @text, 'B: Bad VCS Tag';
2893
        push @text, 'D: DeadWood';
2940
        push @text, 'D: DeadWood';
2894
        push @text, 'E: Essential Release Version';
2941
        push @text, 'E: Essential Release Version';
2895
        push @text, 'G: Glued into Version Tree';
2942
        push @text, 'G: Glued into Version Tree';
2896
        push @text, 'r: Recent version';
2943
        push @text, 'r: Recent version';
-
 
2944
        push @text, 'R: Ripple';
2897
        push @text, 'S: Splitpoint';
2945
        push @text, 'S: Splitpoint';
2898
        push @text, 't: Glued into Project Tree';
2946
        push @text, 't: Glued into Project Tree';
2899
        push @text, 'T: Tip version';
2947
        push @text, 'T: Tip version';
2900
        push @text, 'V: In SVN';
2948
        push @text, 'V: In SVN';
2901
        push @text, '+: In Subversion';
2949
        push @text, '+: In Subversion';
Line 2963... Line 3011...
2963
        $stateText .= 'B' if (exists $versions{$entry}{badVcsTag});
3011
        $stateText .= 'B' if (exists $versions{$entry}{badVcsTag});
2964
        $stateText .= 'G' if (exists $versions{$entry}{GluedIn});
3012
        $stateText .= 'G' if (exists $versions{$entry}{GluedIn});
2965
        $stateText .= 't' if (exists $versions{$entry}{MakeTree});
3013
        $stateText .= 't' if (exists $versions{$entry}{MakeTree});
2966
        $stateText .= 'E' if (exists $versions{$entry}{Essential});
3014
        $stateText .= 'E' if (exists $versions{$entry}{Essential});
2967
        $stateText .= 'D' if (exists $versions{$entry}{DeadWood});
3015
        $stateText .= 'D' if (exists $versions{$entry}{DeadWood});
-
 
3016
        $stateText .= 'R' if ( $versions{$entry}{isaRipple} );
2968
        $stateText .= 'r' if (exists $versions{$entry}{keepRecent} && $versions{$entry}{keepRecent} );
3017
        $stateText .= 'r' if (exists $versions{$entry}{keepRecent} && $versions{$entry}{keepRecent} );
2969
        $stateText .= 'S' if (exists $versions{$entry}{EssentialSplitPoint} && $versions{$entry}{EssentialSplitPoint} > 1 );
3018
        $stateText .= 'S' if (exists $versions{$entry}{EssentialSplitPoint} && $versions{$entry}{EssentialSplitPoint} > 1 );
2970
        $stateText .= 'T' if (exists $versions{$entry}{Tip} );
3019
        $stateText .= 'T' if (exists $versions{$entry}{Tip} );
2971
        $stateText .= 'V' if (exists $versions{$entry}{isSvn} );
3020
        $stateText .= 'V' if (exists $versions{$entry}{isSvn} );
2972
        $stateText .= '+' if (exists $versions{$entry}{svnVersion} );
3021
        $stateText .= '+' if (exists $versions{$entry}{svnVersion} );
Line 3456... Line 3505...
3456
    #   Return 0 to keep on going
3505
    #   Return 0 to keep on going
3457
    return 0;
3506
    return 0;
3458
}
3507
}
3459
 
3508
 
3460
 
3509
 
-
 
3510
#-------------------------------------------------------------------------------
-
 
3511
# Function        : backTrackSvnLabel
-
 
3512
#
-
 
3513
# Description     : Examine a Svn Tag and packtrack until we find the branch
-
 
3514
#                   that was used to create the label
-
 
3515
#
-
 
3516
# Inputs          : $src_label              - Label to process
-
 
3517
#
-
 
3518
#                   Assumes "$svnRepo/$packageNames"
-
 
3519
#
-
 
3520
# Returns         : label
-
 
3521
#
-
 
3522
sub backTrackSvnLabel
-
 
3523
{
-
 
3524
    my ($src_label) = @_;
-
 
3525
 
-
 
3526
    #
-
 
3527
    #   Re-init data
-
 
3528
    #
-
 
3529
    @svnDataItems = ();
-
 
3530
    %svnData = ();
-
 
3531
    
-
 
3532
    #
-
 
3533
    #   Create an SVN session
-
 
3534
    #
-
 
3535
    return unless ( $svnRepo );
-
 
3536
    my $svn = NewSessionByUrl ( "$svnRepo/$packageNames" );
-
 
3537
    return unless ( $svn );
-
 
3538
 
-
 
3539
    #
-
 
3540
    #   extract data
-
 
3541
    #
-
 
3542
#    DebugDumpData("SVN", $svn );
-
 
3543
    $svn->SvnCmd ( 'log', '-v', '--xml', '--stop-on-copy', $svn->Full() . '/tags/' . $src_label
-
 
3544
                    , { 'credentials' => 1,
-
 
3545
                        'process' => \&ProcessSvnLog,
-
 
3546
                         }
-
 
3547
                        );
-
 
3548
 
-
 
3549
    #
-
 
3550
    #   Process data
-
 
3551
    #
-
 
3552
#    DebugDumpData("svnDataItems", \@svnDataItems );
-
 
3553
#    DebugDumpData("svnData", \%svnData );
-
 
3554
 
-
 
3555
    my $branch;
-
 
3556
    foreach my $entry ( @svnDataItems )
-
 
3557
    {
-
 
3558
        my $name;
-
 
3559
        my $isaBranch;
-
 
3560
        my $target = $entry->{target};
-
 
3561
 
-
 
3562
        if ( $target =~ m~/tags/$src_label$~ )
-
 
3563
        {
-
 
3564
            my $parent = $entry->{fromPath};
-
 
3565
            if ( $parent =~ m~(.+)/((tags|branches|trunk)(/|$).*)~ )
-
 
3566
            {
-
 
3567
                $branch = $2 . '@' . $entry->{fromRev};
-
 
3568
                last;
-
 
3569
            }
-
 
3570
        }
-
 
3571
    }
-
 
3572
 
-
 
3573
    #
-
 
3574
    #   Return nice value or original value
-
 
3575
    #
-
 
3576
    unless ( $branch )
-
 
3577
    {
-
 
3578
        $branch = 'tags/' . $src_label;
-
 
3579
    }
-
 
3580
 
-
 
3581
    Message( "backTrackSvnLabel: $src_label -> $branch");
-
 
3582
    return $branch;
-
 
3583
}
3461
 
3584
 
3462
#-------------------------------------------------------------------------------
3585
#-------------------------------------------------------------------------------
3463
# Function        : saveData
3586
# Function        : saveData
3464
#
3587
#
3465
# Description     : Save essential data
3588
# Description     : Save essential data