Script for recursive add-to-source control: How to

2019-10-17 03:13发布

我有这个问题已被窃听我相当长的一段时间了。 这也许是最好的参照以下(知名)脚本解释说:

@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 ”。
现在,为了避免任何误解,脚本工作就好了; 余按照步骤(概述的上述网站上)以再现附加递归 - 源控制功能。

这个问题(或问题相当),我有是这样的:

我们如何在这里排除带有特定扩展名文件 *.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"); 

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

Answer 1:

由于这种古老的线程说明 ,最好是有文件忽略把ClearCase视图,而不是内部的外面 ;)

如此说来,您需要结合ct lsview -r (或更详细的版本,命令的,如“显示我如何确定我的ClearCase本地查看哪些文件还没有被添加到源代码管理? ”)与一个grep
这意味着你会从参数读取包含要忽略的文件的所有grep的正则表达式的文件的路径,你会把CT lsview -r的结果,通过每个“ grep -v xxx ”(以排除匹配特定模式)的任何文件

对于Windows,GOW(GNU在Windows上)将为你提供一个全功能grep (连同其他130 Unix命令编译为本地Win32二进制文件)。

该运Mahyar报道:

由于一些(内部UNIX应用程序的Gow )造成了与其他本地程序冲突,我不得不切换回使用findstr
所以,基本上我所做的仅仅是使用

cleartool ls -view_only -r -s | findstr /vi "\.asv" f > $list_file. 

这样做$list_file产生,只是因为它应该是(即包括所有查看私人元素除了asv-files )。
此外,嵌入的Perl脚本时,脚本运行顺利到最后,指出只有那些已经存在的错误。


关于第二个问题,我不知道改变的大小clearpromptcleardlg (和一旦产生,它们甚至不能被重新调整大小)。



文章来源: Script for recursive add-to-source control: How to ignore specific files and folders