windows-nt/Source/XPSP1/NT/admin/pchealth/build/tools/sdslm/addfile.pl
2020-09-26 16:20:57 +08:00

156 lines
3.5 KiB
Perl

# __________________________________________________________________________________
#
# Purpose:
# PERL Script to emulate SLM's 'addfile' 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 or there
# were no arguments given
#
if ($Usage or $InvalidFlag or $NoArgumentsGiven)
{
print $ErrorMessage;
&Usage;
exit 1;
}
#
# Need to have a file list
#
if ((!@FileList) and (!@DirList))
{
print "\n";
print "Error: No files specified\n";
print "\n";
&Usage;
exit 1;
}
#
# Get lists of dirs and files in the current directory
#
opendir CurrentDir, ".";
@LocalFiles = grep -f, readdir CurrentDir;
closedir CurrentDir;
opendir CurrentDir, ".";
@LocalDirs = grep -d, readdir CurrentDir;
closedir CurrentDir;
#
# Initialize lists
#
@AddFilesFileList = ();
@AddFilesDirList = ();
#
# Check for every local file if it is in @OriginalFileList
#
foreach $FileName (@LocalFiles)
{
if (SlmSubs::InList($FileName, \@OriginalFileList))
{
push @AddFilesFileList, qq/"$FileName"/;
}
}
#
# Check for every local directory if it is in @OriginalFileList
#
foreach $DirName (@LocalDirs)
{
if (SlmSubs::InList($DirName, \@OriginalFileList))
{
push @AddFilesDirList, qq/"$DirName"/;
}
}
#
# Get Perforce ready to add files from $AddFilesFileList and subdirectories from
# $AddFilesDirList
#
if (@AddFilesFileList)
{
system "$SourceControlClient add @AddFilesFileList | findstr can't";
}
if ($Recursive and @AddFilesDirList)
{
system "del $ENV{tmp}\\TmpListFile >nul 2>&1";
foreach $Dir (@AddFilesDirList)
{
if (($Dir ne qq/"."/) and ($Dir ne qq/".."/))
{
system "dir /b /a-d /s $Dir >> $ENV{tmp}\\TmpListFile";
}
}
system "$SourceControlClient -x $ENV{tmp}\\TmpListFile add | findstr can't";
system "del $ENV{tmp}\\TmpListFile >nul 2>&1";
}
#
# Initialize lists
#
@AddFilesList = ();
SlmSubs::CreateSubmitList("add", \@AddFilesList);
if (@AddFilesList)
{
@SubmitOutput = SlmSubs::PerforceRequest("submit", \@AddFilesList);
print "@SubmitOutput";
}
else
{
print "There are no valid files to add\n";
}
sub Usage
# __________________________________________________________________________________
#
# Prints out a usage statement for this script. In this case usurped from SLM's
# 'addfile' usage statement
#
# Parameters:
# None
#
# Output:
# The usage statement
#
# __________________________________________________________________________________
{
print q/addfile - adds file(s) to a project
Usage: addfile [-?fhr] [-c comment] [file1] [file2... ]
Arguments:
-h prints out this message.
-r (recursive) adds to the project all files in a given directory, and
every subdirectory under that directory, along with the files in those
subdirectories. If no directory is specified in the file argument, the
current directory is assumed. If a pattern is included in the file
argument, only adds files that match the pattern.
-c supplies the same comment for all files (otherwise, you are prompted
for one).
/;
}