1

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

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

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

4

1 回答 1

0

正如这个旧线程所示,最好将要忽略的文件放在ClearCase 视图之外而不是内部;)

话虽如此,您需要将ct lsview -r(或该命令的更详细版本,如“如何确定我的 ClearCase 本地视图中的哪些文件尚未添加到源代码控制? ”中所示)与grep.
这意味着您将从参数中读取包含您要忽略的文件的所有 grep 正则表达式的文件的路径,并将 ct lsview -r 的结果放在每个“ grep -v xxx”中(以排除任何文件匹配该特定模式)

对于 Windows,GoW(Windows 上的 Gnu)将为您提供功能齐全的grep(以及 130 个其他编译为本地 win32 二进制文件的 Unix 命令)。

行动 Mahyar报告:

由于某些 UNIX 应用程序(Gowfindstr.
所以,基本上我所做的只是使用

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

这样$list_file就生成了,就像它应该生成的那样(即,包括除 之外的所有 View Private 元素asv-files)。
此外,当嵌入到 Perl 脚本中时,脚本可以顺利运行到最后,只指出那些已经存在的错误。


关于第二个问题,我不知道改变clearpromptor的大小cleardlg(一旦创建,它们甚至不能重新调整大小)。

于 2012-08-10T08:22:25.877 回答