如何从命令行为增量创建提取

时间:2018-06-14 04:43:18

标签: jade-platform

我有一个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

任何帮助都将不胜感激。

2 个答案:

答案 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";