156 lines
3.5 KiB
Perl
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).
|
||
|
/;
|
||
|
}
|