递归添加源控制的脚本:如何忽略特定文件和文件夹

时间:2012-08-09 16:44:31

标签: version-control clearcase cleartool

我有这个问题已经困扰了我很长一段时间了。最好通过参考以下(众所周知的)脚本来解释:

@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"); 

还是我完全弄错了?这就是现在。任何帮助将不胜感激!

1 个答案:

答案 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的大小(一旦创建,它们甚至无法重新调整大小)。