贡献代码到Tizen

1 引言

本文介绍有关如何贡献代码到Tizen的方法,包括以下内容:

  • 提交补丁到Gerrit上
  • 在Gerrit上审查补丁
  • 提交软件包到编译系统
  • 审查和接受编译服务器上的安装包(仅适用于发布工程师)

更多关于整个工作流程的信息,请参考Tizen开发工作机制

2 Gerrit上补丁的提交和审查

本节介绍如何在Gerrit上提交和审查补丁。

2.1 提交补丁到Gerrit

本节介绍如何提交补丁到Gerrit。

提交补丁到Gerrit上,包含以下步骤:

  1. 切换到项目目录下,进行本地开发。

  2. 执行以下命令,保存修改内容:

    $ git add <Revised_File>...
    
  3. 执行以下命令,提交修改内容:

    $ git commit
    
  4. 执行以下命令推送补丁到Gerrit上:

    $ git push origin HEAD:refs/for/<remote_branch_name>
    

    :<remote_branch_name>的有效形式如下:

    • tizen_2.1:对应Tizen 2.1分支
    • tizen_2.2:对应Tizen 2.2分支
    • tizen_3.0:对应Tizen 3.0分支

更多信息,请考Gerrit文档。

2.2 审查Gerrit上的补丁

经过Gerrit 网站上审查,发表意见和打分后,根据打分结果,一个补丁会被合并或者丢弃。

具体来讲 ,以下情况下补丁可以被合并:

  • 该补丁在审查阶段至少获得一个“+2”并且没有人评“-2”的情况。
  • 该补丁在验证阶段至少获得一个“+1”并没有评“-1”的情况。

:打分为“+2”需要适当的权限级别。 此外,超过两个“+1”将会当做“+2”.

当某个补丁满足以上情况,拥有特殊权限的用户可以点击提交和合并按钮将该补丁合并到Gerrit仓库中。

3 编译系统上的安装包的提交和审查

本节介绍开发者如何提交软件包,发布工程师如何审查和接受编译系统上的更改。

3.1 提交软件包到编译系统

本节包含以下内容:

  • 提交一个软件包
  • 提交一组软件包

3.1.1 提交一个软件包

执行以下命令,提交一个软件包到编译系统:

$ gbs submit -c <Commit_ID> -m "<Comments>"

提交时,GBS会自动以以下格式产生一个有注释性的标签:

submit/$Tizen_Version/$(%Y%m%d.%H%M%S)

如果代码已经被合并到Gerrit,合并请求会被创建,会通知发布工程师进行审查。

特别注意:如果该补丁还没有被合并到Gerrit上,后台服务器会中断操作,并发送邮件通知该补丁的所有者该补丁在被合并后需要重新提交到编译系统。

3.1.2 提交一组软件包到编译系统

对于有多个变化并有相互依赖的包,必须当做一组来提交,也就是说,所有的包都必须有一个统一的提交标签。 这就是所谓的组提交。

这个特点需要Tizen客户端开发工具(GBS)和Tizen后端服务器共同支持。

对于平台开发者,GBS提供--tag <TAG>选项,接受开发者在“gbs submit”命令中指定的“TAG”。 所有的具有相同的提交标签的包都认为是一个组。 在同一个组里的包在编译系统上会被放在一起处理。

例如:

ail,一个底层的库,会被aul所依赖。 ail的发者改变了些API,aul也必须要更新以适配ail的新API。 因此,一旦相关补丁分并到ail和aul,这个两个包需要以一组的形式进行提交。

处理过程如下:

  1. 提交该组里的一个包,创建一个标签。

    $ cd platform/core/appfw/aul-1/
    $ gbs submit -m "<Comments>"
    
  2. 获取以上命令的输出信息的标签名字,使用相的标签提交该组里的其他包。

    $ cd platform/core/appfw/ail/
    $ gbs submit --tag <same_tag> -m "<Comments>"
    

实际上,开发者可以自己指定标签,然后对一个组的包使用相同的标签进行提交。 这种情况下,标签必须遵循上节讲的相同规则,或者跟一些额外的尾缀,例如:

submit/$Tizen_Version/$(%Y%m%d.%H%M%S).N (N stand for a choiced number)

Tizen的后台服务器会将相同标签的提交放在一起编译。

3.3 审查编译服务器上包(仅适用于发布工程师)

开发者适用gbs submit命令提交以后,Tizen后台服务器同时开始进行预-发布和发布处理。 在预-发布处理期间,安装包和包含特定包的Tizen镜像会提供给发布工程师和质量检验(QA)工程师进行审查。

QA工程师负责单独测试每个包,也会验证Tizen镜像里的包,然后给发布工程师提供综合信息,以便决定是接受还是拒绝这个包,主要包括以下内容:

  • 这个包是否影响其他依赖包的编译
  • 这个包是否引入了新的bug。
  • 这个包是否会导致问题的回退。
  • 这个包是否会影响Tizen镜像的性能。

在发布工程师接受以后,正常的发布处理会创建一致的镜像,可以在这里获取到