我有一个delta,里面有一些方法。 我想以自动方式创建一个仅包含delta中方法的模式提取,这样我就不必手动创建一个或使用Jade IDE中的仇恨选择树。
jadeworld文档建议我可以这样做: https://www.jadeworld.com/docs/jade-70/content/resources/userguide/chapter_10_-_extracting_and_loading_schemas/extracting_schemas_as_a_non-gui_client_application.htm
当我尝试时,不会创建任何提取文件。
这是我正在运行的命令:
jadclient path=E:\Jade63\System\ schema=JadeSchema ini=C:\Jade63\bin\jade.ini app=JadeBatchExtract endJade File d:\temp\delta.scm d:\temp\delta.ddb d:\temp\param.unl delta=TFS3274
任何帮助都将不胜感激。
答案 0 :(得分:2)
对于'文件'提取,您需要指定要提取的模式。在添加delta参数之前,这是UNL文件之后的第四个参数。我已将此添加到下面的示例中,假设' Delta'是模式名称。
jadclient path=E:\Jade63\System\ schema=JadeSchema ini=C:\Jade63\bin\jade.ini app=JadeBatchExtract endJade File d:\temp\delta.scm d:\temp\delta.ddb d:\temp\param.unl Delta delta=TFS3274
不幸的是,我不确定这是否只会提取指定delta中的方法。相反,我相信将提取UNL文件指定的所有内容,但是如果将任何方法签出到增量,则将提取指定增量中的版本。
您需要进行实验以确认,但根据我的经验,补丁更适合执行提取而无需指定更改内容。
答案 1 :(得分:1)
凯文已经回答了我提出的问题,我只是在这里为这样做的其他人添加这一点。我试图自动从delta创建一个UNL文件。以下perl脚本将从架构提取文件生成UNL文件。因此,您可以在IDE中从增量创建模式提取,然后在其上运行此脚本以创建UNL,然后可以使用该UNL创建后续提取。
#!/usr/bin/perl
$state="init";
$class="";
$method="";
@result=();
while(<>)
{
if($state eq "init")
{
if(m/typeDefinitions/)
{
$state="inTypes";
}
}
elsif($state eq "inTypes")
{
if(m/[^(]+\(\r/)
{
$state="inClass";
($class=$_) =~ s/\s*(\S+).*\(/$1/;
$class =~ s/[\r\n]//g;
}
elsif(m/inverseDefinitions/)
{
$state="done";
}
}
elsif($state eq "inClass")
{
if(m/jadeMethodDefinitions/)
{
$state="inMethod";
}
elsif(m/^\s*\)\r/)
{
$state="inTypes";
}
}
elsif($state eq "inMethod")
{
if(m/[^(]+[(]/)
{
($method=$_) =~ s/\s*(\S+)\(.*/$1/;
$method =~ s/[\r\n]//g;
$state="inClass";
push @result, "Method $class $method\n";
}
}
}
@result = sort @result;
print @result;
print "\n";