我有这个问题已经困扰了我很长一段时间了。最好通过参考以下(众所周知的)脚本来解释:
@rem= 'PERL for Windows NT -- ccperl must be in search path
@echo off
ccperl %0 %1 %2 %3 %4 %5 %6 %7 %8 %9
goto endofperl
@rem ';
###########################################
# Begin of Perl section
$start_dir = $ARGV[0];
#
# Fixed variable
#
$S = "\\";
$list_file = "c:".$S."list_file";
$list_add = "c:".$S."list_add";
$choosed = "c:".$S."choosed";
sub clean_file
{
$status = system("del $list_file > NUL 2> NUL");
$status = system("del $list_add > NUL 2> NUL");
$status = system("del $choosed > NUL 2> NUL");
}
#
# Start of the script...
#
printf("add-to-src-control $start_dir...\n");
clean_file();
$status = system("cleartool ls -view_only -r -s $start_dir > $list_file");
open(LIST_ELEMENT,$list_file);
while ($element=<LIST_ELEMENT>)
{
chop $element;
# printf " Processing $element ";
if ($element =~ /CHECKEDOUT/)
{
# printf(" checkedout file \n");
}
else
{
# printf " view private \n";
printf " Processing $element ...\n";
#
# For files with spaces...
#
if ($element =~ / /)
{
$status = system("cmd /c echo \"$element\" >> $list_add");
}
else
{
$status = system("cmd /c echo $element >> $list_add");
}
}
}
close(LIST_ELEMENT);
if (-e $list_add)
{
$listelement = `type $list_add`;
$listelement =~ s/\n/,/g;
$status = `echo $listelement > $list_add`;
$status = system("clearprompt list -outfile $choosed -dfile $list_add -choices
-prompt \"Choose element(s) to put over version control : \" -prefer_gui");
if ($status != 0)
{
# printf("\n Aborting ...\n");
clean_file();
exit $status;
}
#
$listtoadd = `type $choosed`;
$listtoadd =~ s/\n//g;
printf("\n cleardlg /addtosrc $listtoadd");
$status = system("cleardlg /addtosrc $listtoadd");
clean_file();
exit $status;
}
else
{
# printf("\n No files founded...\n");
clean_file();
exit $status;
}
# End of Perl section
__END__
:endofperl
可以在“ClearCase: The ten best scripts”上找到。
现在,为了避免任何误解,脚本工作得很好;我按照上面的网站(在上面的网站上概述)重现了递归的添加源控制功能。
我所拥有的问题(或问题)是:
我们如何在此处排除具有特定扩展名的文件(例如*.asv
或*.dll
)从添加到源代码管理(更多)确切地说,从被添加到返回的元素列表中;请参阅下面的第二个问题)?
(和文件夹类似。)
是行:
$status = system("cleartool ls -view_only -r -s $start_dir > $list_file");
要关注的那个?
我的第二个问题是相当“化妆”的性质
运行脚本后生成的输入框(在我的情况下,至少)太小,无法容纳要添加到源控件的元素的整个路径。
有没有办法确保完整路径始终可见?
这是否需要修改
$status = system("clearprompt list -outfile $choosed -dfile $list_add -choices
-prompt \"Choose element(s) to put over version control : \" -prefer_gui");
还是我完全弄错了?这就是现在。任何帮助将不胜感激!
答案 0 :(得分:0)
作为此old thread illustrates,最好让文件忽略将放在 ClearCase视图之外而不是放在内部;)
话虽如此,您需要将ct lsview -r
(或该命令的更精细版本,如“How do I determine what files in my ClearCase local view have not yet been added to source control?”中所示)与 grep
。
这意味着您将从参数中读取包含您要忽略的文件的所有grep regexp的文件的路径,并且您将把ct lsview -r的结果通过每个“grep -v xxx
”(按顺序)排除任何与该特定模式匹配的文件)
对于Windows,GoW(Windows上的Gnu)将为您提供功能齐全的grep
(以及编译为本机win32二进制文件的130个其他Unix命令)。
op Mahyar报告:
由于某些UNIX应用程序(
Gow
内)与其他本地例程发生冲突,因此我不得不切换回使用findstr
。 所以,基本上我所做的只是使用
cleartool ls -view_only -r -s | findstr /vi "\.asv" f > $list_file.
这样生成
$list_file
就像它应该一样(也就是说,包括asv-files
以外的所有View Private元素。)
此外,当嵌入Perl-Script时,脚本会顺利运行到最后,只指出那些已经存在的错误。
关于第二个问题,我不知道要更改 clearprompt
或cleardlg
的大小(一旦创建,它们甚至无法重新调整大小)。