openSUSE:Osc Collab

跳转到:导航搜索

OSC 协作 编辑


随着构建服务协作功能的引入,现在每个人都可以帮助 openSUSE 中的打包工作。例如,对于 GNOME,开发是在 GNOME:Factory (G:F) 项目中完成的,提交到那里的软件包然后将被提交到 openSUSE:Factory (oS:F),Factory 发行版就位于那里。

然而,所有这些的命令行可能对初次用户来说有点困难,并且一些通常的工作流程实际上可以自动化。这就是我们创建了 osc collab 插件的原因。该插件提供了三个非常有用的命令:osc collab todoosc collab updateosc collab setup。还有一些其他可用的命令。


Icon-warning.png
警告: osc collab 现在与 GNOME 相关项目无关,它可以与任何其他项目一起使用。它可以帮助您组织项目中的工作!对于高级功能(例如 todoupdatebuildsubmit),您可能需要要求服务器端进行设置,尽管如此。

典型工作流程示例


首先,让我们看看可以完成什么(以下是 todo 命令的输出已截断),针对 GNOME:Factory 项目

 vuntz@lyon ~/work/opensuse/tmp/>osc collab todo --project GNOME:Factory
 Downloading data in a cache. It might take a few seconds...
 Package                         | openSUSE:Factory | GNOME:Factory    | Upstream        
 --------------------------------+------------------+------------------+-----------------
 anjuta                          | 2.23.91          | 2.23.91          | 2.24.0.1 (r)    
 at-spi                          | 1.23.92          | 1.23.92          | 1.24.0          
 gdm                             | 2.23.92          | 2.23.92 (s)      | 2.24.0 (s)      
 gedit                           | 2.23.93          | 2.23.93          | 2.24.0

我们可以看到 anjutaat-spigdmgedit 都需要在 GNOME:Factory 中更新到更新的上游版本。我们注意到 anjuta 已经被其他人预订,所以我们可以忽略它。 同样,我们注意到有一个提交请求等待 GNOME:Factory 维护者批准的 gdm。所以让我们也忽略这个。可以使用一些参数自动删除这些行:osc collab todo --exclude-reserved --exclude-submitted(或者对于那些不喜欢输入长命令的人来说,osc collab t --xr --xs)。

所以让我们来更新 gedit

vuntz@lyon ~/work/opensuse/tmp/> osc collab update --project GNOME:Factory gedit
Package gedit has been reserved for 36 hours.
Do not forget to unreserve the package when done with it:
    osc collab unreserve gedit
A    /home/vuntz/work/opensuse/tmp/gedit
A    /home/vuntz/work/opensuse/tmp/gedit/gedit-2.23.93.tar.bz2
A    /home/vuntz/work/opensuse/tmp/gedit/gedit-desktop.patch
A    /home/vuntz/work/opensuse/tmp/gedit/gedit.changes
A    /home/vuntz/work/opensuse/tmp/gedit/gedit.spec
A    /home/vuntz/work/opensuse/tmp/gedit/ready
Package gedit has been checked out.
gedit.spec has been prepared.
gedit.changes has been prepared.
Looking for the upstream tarball...
gedit-2.24.0.tar.bz2 has been downloaded.
Finding NEWS and ChangeLog information...
NEWS between gedit-2.23.93.tar.bz2 and gedit-2.24.0.tar.bz2 is available in osc-gnome.NEWS
ChangeLog between gedit-2.23.93.tar.bz2 and gedit-2.24.0.tar.bz2 is available in osc-gnome.ChangeLog
Running quilt...
Patches still apply.
gedit-2.23.93.tar.bz2 has been removed from the package.
gedit-2.24.0.tar.bz2 has been added to the package.
Package gedit has been prepared for the update.

此命令的输出有点冗长,但这样,您可以确信正在发生什么。在这种特定情况下,一切都很好,所以看起来您只需要更新 gedit.changes

所以,您首先使用 cd gedit 将当前目录更改为检出的软件包。然后,您现在可以在您最喜欢的编辑器中打开 gedit.changes。您会注意到它已经预先填充了内容

-------------------------------------------------------------------
Tue Sep 30 16:37:35 CEST 2008 - vuntz@opensuse.org

- Update to version 2.24.0:
  + 

------------------------------------------------------------------- 

所以您只需要说明发生了什么变化。osc-collab.NEWSosc-collab.ChangeLog 文件应该对此有所帮助。

现在您已经更新了 gedit.changes,您应该确保软件包中的所有补丁仍然相关,并且构建和运行时依赖项是最新的。没有神奇的方法可以做到这一点,所以这都是手动工作。

接下来的步骤通常是提交您的更改,确保软件包构建正确,如果构建正确,则提交它。您可以在一个命令中完成所有这些操作:osc collab buildsubmit -m 'Update to 2.24.0'

在成功的 osc collab buildsubmit 之后,软件包将默认自动取消预订,除非您使用了 --no-unreserve 选项。您也可以手动取消预订软件包:osc collab unreserve --project GNOME:Factory gedit

buildsubmit 的替代方案

如果您不想使用 osc collab buildsubmit,可以使用以下说明,这些是构建服务中协作的典型命令。但是,osc collab buildsubmit 在大多数情况下就足够了。

  • 首先,您可以将您的更改提交到构建服务:osc commit -m 'Update to 2.24.0'
  • 完成此操作后,请确保软件包构建正确——通过检查构建服务(在网页上或通过 osc results home:vuntz:branches:GNOME:Factory gedit)或使用 osc build 来检查构建结果。
  • 如果构建成功,使用以下命令将您的软件包提交到 GNOME:Factory:osc submitreq create -m 'Update to 2.24.0'

可能出现的问题

  • 如果您尝试更新已经被其他人预订的软件包,您将收到一个错误。您可以使用 --ignore-reserved 选项来忽略此错误。您应该只在与预订软件包的人沟通后才这样做。
  • 有时,一些补丁不再适用。在这种情况下,您会看到“quilt”步骤失败。您首先需要修复这个问题。


}}

用户文档

本节提供了从安装到处理多个项目的基本步骤,以使您开始使用 osc collab


安装

安装这个绝妙插件的简单方法是通过 openSUSE:Tools 项目中的 osc-plugin-collab 软件包。

您还可以从 git 安装插件的最新版本

要确保安装了插件,只需运行 osc collab --help,您应该会看到插件的帮助摘要。

您第一次运行插件执行实际命令时,它会要求您提供一个电子邮件地址。此电子邮件地址保存在 ~/.oscrc 中,将在更新 .changes 文件时使用。


配置

插件有一些默认配置,您可以在 ~/.oscrc(在 [general] 部分)或通过一些命令行选项覆盖。请注意,命令行选项会覆盖 ~/.oscrc 中的配置。



变量 默认值 命令行选项 更改 ~/.oscrc 中的键 示例
项目 GNOME:Factory; --project collab_projects collab_projects = GNOME:Factory;X11:common:Factory;GNOME:Contrib;
仓库 openSUSE_Factory --repo collab_repo collab_repo = openSUSE_11.1
架构 i586;x86_64; --arch collab_archs collab_archs = i586;
软件包跟踪 0 collab_do_package_tracking collab_do_package_tracking = 1


例如,在 openSUSE 11.1 上使用 Moblin 的人可能应该在 ~/.oscrc 中使用此配置

 collab_projects = Moblin:UI;Moblin:Base;
 collab_repo = openSUSE_11.1

而对 openSUSE 11.1 上的 GNOME 2.26 感兴趣的人应该使用

 collab_projects = GNOME:STABLE:2.26;GNOME:Backports:2.26;
 collab_repo = openSUSE_11.1

关于软件包跟踪的说明

如果您不了解 软件包跟踪,您可以跳过此部分 :-)

由于 osc collab 的工作方式,当使用 setupupdate 命令时,软件包跟踪功能被禁用:osc collab 将软件包检出到扁平目录中,没有项目结构,这使得软件包跟踪无法使用。如果您作为用户想要强制使用软件包跟踪,则需要适当使用 osc collab(在每个项目的正确目录中调用它),并设置 collab_do_package_tracking 选项。

我能做什么?

在大团队中,一个问题是人们常常不知道他们能做什么:有太多事情要做,因为您不知道应该做什么以及人们正在做什么而感到迷茫。osc collab todo 可以帮助您。它将显示所有需要更新到新上游版本的软件包。通常,这是开始处理软件包的最简单方法。

您可以使用 --exclude-reserved--exclude-submitted 选项来隐藏已经被其他人处理的软件包,或者隐藏已经提交的软件包。这些软件包在正常输出中用 (r)(s) 标识。

预订系统

为了避免人们重复工作,我们使用一个非常简单的预订系统。当您运行 osc collab updateosc collab setup 时,您会自动为该软件包预订工作。要忽略此预订步骤,您可以使用 --no-reserve 选项。

预订持续 36 小时。在此时间之后,预订到期并自动删除。在成功的 osc collab buildsubmit 之后,软件包也会自动取消预订,除非您使用了 --no-unreserve 选项。要手动删除预订,可以使用 osc collab unreserve 命令。

请注意,您可以使用 osc collab reserve 手动为工作预订软件包。仅为完整起见提供此命令,因为您通常会使用 osc collab updateosc collab setup

可以使用 osc collab listreserved 查看谁正在处理什么,还可以使用 osc collab isreserved 命令检查软件包是否已预订。

将软件包更新到新的上游版本

在 openSUSE 新版本的早期开发周期中,最常见的任务是将软件包更新到新的上游版本。osc collab update 命令可用于此目的。

此命令将执行以下操作

  • 检查软件包是否有更新。如果不是这种情况,则命令停止。
  • 检查是否有人正在处理该软件包,除非使用了 --ignore-reserved 选项。
  • 为您预订软件包,除非使用了 --no-reserve 选项。
  • 从 devel 项目分支软件包并将其检出到当前目录。
  • 对 .spec 文件进行必要的更新(通常,更新版本标签)。
  • 添加一个新的 .changes 条目,您稍后将填写它。
  • 下载上游 tarball。
  • 提取此新的上游 tarball 的相关 NEWS 和 ChangeLog 信息。
  • 检查新的上游 tarball 中的补丁是否仍然适用。
  • 从构建服务中删除旧的 tarball,并将新的 tarball 添加到构建服务。

通常,运行此命令后唯一需要做的就是填写 .changes 文件。您还必须确保所有补丁仍然相关,并且所有构建和运行时依赖项都是最新的。


处理软件包

处理软件包的另一个常见任务是修改软件包、添加新的补丁或修复打包问题。osc collab setup 命令可以帮助您准备软件包。

此命令将执行以下操作

  • 检查是否有人正在处理该软件包,除非使用了 --ignore-reserved 选项。
  • 为您预订软件包,除非使用了 --no-reserve 选项。
  • 从 devel 项目分支软件包并将其检出到当前目录。

然后您可以轻松完成您想要完成的工作。


构建软件包

一旦更改准备就绪,确保更新的软件包仍然可以编译非常重要。您可以使用 osc build 在本地编译软件包,或者您可以提交并等待构建服务成功构建。osc collab build 命令是一个方便的命令,它会将更改提交到构建服务,并监控构建,以便您可以轻松检查构建状态。

可以使用 --repo--arch 参数指定构建的目标。


构建并提交软件包

在通常的工作流程中,如果软件包构建良好,您希望将您的更改提交到父项目。osc collab buildsubmit 允许您执行此操作:它与 osc collab build 命令完全相同,但此外,如果构建成功,它会将构建提交到父项目。

有些人将此命令称为“发射后忘记”命令,因为您可以执行您的更改,然后运行此命令;如果一切正常,您不必担心此软件包,因为它将自动提交。您甚至可以使用 --forward 选项自动转发到目标项目(有关转发功能的说明,请参见下文)。


处理多个项目

在简单的用例中,您只需要处理生活在单个项目中的软件包。但是,许多 osc collab 的用户需要与生活在不同项目中的软件包进行交互。通常,这完全是直观的,因为这些项目的软件包之间没有交集(例如,GNOME:Factory 和 X11:common:Factory 之间)。

但是,有时您需要处理具有相同名称的软件包。一个很好的例子是 GNOME:Factory 和 GNOME:STABLE:2.26。在这种情况下,如果您使用 --project GNOME:Factory --project GNOME:STABLE:2.26,则对两个项目中都存在的软件包名称执行的所有操作都将对第一个项目(此处为 GNOME:Factory)生效。这仍然应该保持直观。

请注意,始终可以使用单个 --project 选项强制使用您想要使用的项目。



其他有用命令

osc collab 中还有一些其他命令可能对您有兴趣。

管理员任务

osc collab todoadmin 允许您对某些项目进行健全性检查。它将显示一个您可能想要执行以清理项目的列表。例如,使用 GNOME:Factory

  • 具有不再适用的补丁的软件包
  • 不是链接到 openSUSE:Factory 的软件包
  • 不应该存在于 GNOME:Factory 中的软件包(因为它们已失效或在其他地方维护)
  • 应该存在于 GNOME:Factory 中的软件包(通常,这是尚未链接到 GNOME:Factory 的新软件包)
  • 应该提交到 openSUSE:Factory 的软件包
  • 等等。

您可以使用 --exclude-submitted 选项来隐藏提交到 openSUSE:Factory 但仍在等待审核的软件包。

通常,解决这些问题对于管理员来说非常简单。作为参考,以下命令通常会有帮助

  • osc linkpac openSUSE:Factory $pkg GNOME:Factory:将 openSUSE:Factory 中的软件包链接到 GNOME:Factory
  • osc checkout -u GNOME:Factory $pkg:以未展开模式检出软件包,以修复不再适用的补丁,例如。

转发软件包

osc collab forward 允许您直接从用户分支将提交的更改转发到目标项目,绕过更改在 devel 项目中停留一段时间的步骤。 内部地,提交将被接受到 devel 项目,然后从 devel 项目到目标项目创建一个新的提交。

举例说明:假设提交 #12345 是从 home:vuntz:branches:GNOME:Factory 到 GNOME:Factory 的 gnome-panel 提交,osc collab forward 12345 将在 GNOME:Factory 中接受此提交,并为 gnome-panel 软件包从 GNOME:Factory 到 openSUSE:Factory 创建一个新的提交。


贡献

欢迎大家参与 osc-plugin-collab 插件的开发。 欢迎报告错误并向开发邮件列表发送补丁

该插件在 github 上的 git 仓库 中开发。 您也可以克隆您在 github 或互联网上的 git 分支,以方便参与开发过程。

后端细节

目前,osc collab 的工作原理是依赖于由各种脚本创建的数据库。 这些脚本位于 osc-plugin-collab/server/ 中。 欢迎查看并改进它们。

对于打包人员:您可以在这里获取有关如何将您的软件包提交到跟踪器的提示:SDB:Upstream Tracker#Submit your package to the tracker。(这适用于 OBS 上存在的所有软件包)