windows-nt/Source/XPSP1/NT/admin/pchealth/build/tools/sdslm/ssync.pl

175 lines
4.5 KiB
Perl
Raw Normal View History

2020-09-26 03:20:57 -05:00
# __________________________________________________________________________________
#
# Purpose:
# PERL Script to emulate SLM's 'ssync' command
#
# Parameters:
# See Usage below
#
# Output:
# Perforce output or the appropriate error message or usage statement
#
# __________________________________________________________________________________
#
# Load common SLM wrapper subroutine module
#
use SlmSubs;
#
# Parse command line arguments
#
SlmSubs::ParseArgs(@ARGV);
#
# Call usage and exit if ParseArgs has set the Usage or InvalidFlag flags
#
if ($Usage or $InvalidFlag)
{
print $ErrorMessage;
&Usage;
exit 1;
}
#
# Deal with ghost and unghost
#
if ($Ghost or $UnGhost)
{
#
# Set @CurrentClientList equal to $SourceControlClient client output
#
open(CLIENT, "$SourceControlClient client -o |");
@CurrentClientList = <CLIENT>;
close (CLIENT);
if ((@FileList) or (@DirList))
{
foreach $FileName (@FileList)
{
if ($FileName =~ /$\"(.*)\"/)
{
$FileName = $1;
}
if (($FileName eq "*") and ($main::Recursive))
{
$FileName = '...';
}
if ($UnGhost)
{
push @CurrentClientList, "\t$DepotMap$FileName $LocalMap\/$FileName\n";
}
else
{
push @CurrentClientList, "\t-$DepotMap$FileName $LocalMap\/$FileName\n";
}
}
foreach $DirName (@DirList)
{
if ($DirName =~ /$\"(.*)\"/)
{
$DirName = $1;
}
if ($DirName =~ /\.\.\./)
{
if ($UnGhost)
{
push @CurrentClientList, "\t$DepotMap$DirName $LocalMap\/$DirName\n";
}
else
{
push @CurrentClientList, "\t-$DepotMap$DirName $LocalMap\/$DirName\n";
}
}
}
}
else
{
$ModifiedAllFilesSymbol = $AllFilesSymbol;
if (!$Recursive)
{
$ModifiedAllFilesSymbol = "*";
}
if ($UnGhost)
{
push @CurrentClientList, "\t$DepotMap$ModifiedAllFilesSymbol $LocalMap\/$ModifiedAllFilesSymbol\n";
}
else
{
push @CurrentClientList, "\t-$DepotMap$ModifiedAllFilesSymbol $LocalMap\/$ModifiedAllFilesSymbol\n";
}
}
&SlmSubs::CleanUpList(\@CurrentClientList);
open( TemporaryClientFile, ">$ENV{tmp}\\TmpClientFile");
print TemporaryClientFile @CurrentClientList;
close (TemporaryClientFile);
system "$SourceControlClient client -i < $ENV{tmp}\\TmpClientFile >nul";
unlink "$ENV{tmp}\\TmpClientFile";
}
if ((@FileList) or (@DirList))
{
open(SSYNCNOUTPUT, "$SourceControlClient sync -n $ExtraSsyncFlags @FileList @DirList 2>&1|");
system "$SourceControlClient sync $ExtraSsyncFlags @FileList @DirList";
system "$SourceControlClient resolve -af @FileList @DirList 2>nul";
}
else
{
open(SSYNCNOUTPUT, "$SourceControlClient sync -n $ExtraSsyncFlags $AllFilesSymbol 2>&1|");
system "$SourceControlClient sync $ExtraSsyncFlags $AllFilesSymbol";
system "$SourceControlClient resolve -af $AllFilesSymbol 2>nul";
}
#
# Set @SyncOutput equal to $SourceControlClient sync output
#
@SsyncnOutput = <SSYNCNOUTPUT>;
close (SSYNCNOUTPUT);
#
# Remove any empty directories if we see deleted in $SourceControlClient sync -n's output.
#
if ($Recursive)
{
if (grep { /deleted/ } @SsyncnOutput)
{
system "mtdir /d /e";
}
}
sub Usage
# __________________________________________________________________________________
#
# Prints out a usage statement for this script. In this case usurped from SLM's
# 'ssync' usage statement
#
# Parameters:
# None
#
# Output:
# The usage statement
#
# __________________________________________________________________________________
{
print q/ssync - synchronizes enlisted directories
Usage: ssync [-?!fhrgu] [file1] [file2... ]
Arguments:
-h prints out this message.
-! forces a fresh copy of all files specified.
-r (recursive) synchronizes all files in a given directory and in every
subdirectory beneath it. If a pattern is given, matches the pattern.
-g (ghost) remove the local copies of the specified files from your local
project directories.
-u (un-ghost) make local copies of the current version of the specified
files so that they can be checked out and used.
/;
}