您尚未登录。

#1 2014-10-04 03:27:02

danielhugo
偶爸刚弄死他
注册时间: 2012-07-31
帖子: 269
个人网站

OpenSUSE Build Service 的 Service 如何实现这种格式的版本号?

最近我在试用 OpenSUSE Build Service 为 Arch Linux 打包时遇到了一些难题,就是怎么样写 _service 来实现以下格式的版本号。

第一种

源代码是一个Git仓库,版本号是由

git describe --always | sed 's|-|.|g'

的结果决定的。

例子是 goldendict-git ,见 https://aur.archlinux.org/packages/go/g … t/PKGBUILD
目前的版本号应该是 1.5.0.RC.428.gebad891

我不知道怎么写_service才能实现自动填充版本号,有新的版本的话只需要执行 osc service rr 就可以。

目前我是这样写的:

  <services>
    <service name="tar_scm">
      <param name="scm">git</param>
      <param name="url">git://github.com/goldendict/goldendict.git</param>
      <param name="versionformat">g%h</param>
      <param name="versionprefix">1.5.0.RC.428</param>
      <param name="filename">goldendict</param>
    </service>
    <service name="recompress">
      <param name="file">*.tar</param>
      <param name="compression">gz</param>
    </service>
    <service name="set_version"/>
  </services>

=============================

第二种

源代码是一个Git仓库,版本号是由

printf "%s.%s" "$(git rev-list --count HEAD)" "$(git rev-parse --short HEAD)"

的结果决定的。例子是 oh-my-zsh-git ,见 https://aur.archlinux.org/packages/oh/o … t/PKGBUILD

目前的版本号应该是 2774.96e4e5d
我不知道怎么写_service才能实现自动填充版本号,有新的版本的话只需要执行 osc service rr 就可以。

目前我是这样写的:

<services>
  <service name="tar_scm">
    <param name="scm">git</param>
    <param name="url">git://github.com/robbyrussell/oh-my-zsh.git</param>
	<param name="versionformat">%h</param>
	<param name="versionprefix">2774</param>
    <param name="filename">oh-my-zsh</param>
  </service>
  <service name="recompress">
    <param name="file">*.tar</param>
    <param name="compression">gz</param>
  </service>
  <service name="set_version"/>
</services>

=============================

求指导!!!

最近编辑记录 danielhugo (2014-10-26 00:50:58)


本人的 Arch Linux 软件仓库:http://git.io/-1
本人的广告过滤及代·理规则订阅页面:http://git.io/f0x

离线

#2 2014-10-04 10:51:21

依云
会员
所在地: a.k.a. 百合仙子
注册时间: 2011-08-21
帖子: 8,478
个人网站

Re: OpenSUSE Build Service 的 Service 如何实现这种格式的版本号?

来社区的编译机上打包吧,那样就不用纠结 obs 的问题了~

离线

#3 2014-10-05 01:18:53

danielhugo
偶爸刚弄死他
注册时间: 2012-07-31
帖子: 269
个人网站

Re: OpenSUSE Build Service 的 Service 如何实现这种格式的版本号?

百合仙子 说:

来社区的编译机上打包吧,那样就不用纠结 obs 的问题了~

这篇帖子是照搬我在OpenSUSE论坛发的求助帖,所以对于 Arch Linux 用户来说,问题描述得似乎不是很清楚,这样吧,我把它细化一下。

OpenSUSE Build Service 在打包的时候是不支持联网的,所以所有下载源码的操作都必须在 _service 文件中阐明,然后这个 _service 支持下载 Git 仓库代码的操作,并且可以把下载下来的源码打包成tar,现在的问题是如何让 _service 实现原来的 pkgver() 函数的内容。

主要是这两个参数:

<param name="versionformat">
<description>
Auto-generate version from checked out source using this format
string. This parameter is used if the 'version' parameter is not
specified.
For git, the value is passed to git log --date=short --pretty=format:...
for the topmost commit, and the output from git is cleaned up to
remove some unhelpful characters. Here are some useful examples of
strings which are expanded, see the git-log documentation for more.
%ct Commit time as a UNIX timestamp, e.g. 1384855776.
This is the default.
%at Author time as a UNIX timestamp, e.g. 1384855776.
%cd Commit date in YYYYMMDD format, e.g. 20131119
%ad Author date in YYYYMMDD format, e.g. 20131119
%h Abbreviated hash, e.g. cc62c54
@PARENT_TAG@ the first tag that is reachable, e.g. v0.2.3
For hg, the value is passed to hg log --template=.... See the
hg documentation for more information. The default is '{rev}'
For bzr and svn, '%r' is expanded to the revision, and is the default.
</description>
</param>
<param name="versionprefix">
<description>specify a base version as prefix.</description>
</param>

一个叫 versionprefix 就是一个固定字符串的前缀,另一个叫 versionformat 是命令  git log --date=short --pretty=format: 的输出。

所以问题可以转化为:如何只使用 git log --date=short --pretty=format: 命令,实现以下几个命令的效果(或者部分效果):

git describe --always | sed 's|-|.|g'
printf "%s.%s" "$(git rev-list --count HEAD)" "$(git rev-parse --short HEAD)"
git show --pretty=format:%ci HEAD | cut -d ' ' -f 1 | sed 's/-//g'

这样就转化为一个 Git 的使用问题了吧?

=========================

目前的进度是,对于

git describe --always | sed 's|-|.|g'

前面的Tag和提交计数部分只能人工更新,后面的SHA-1值部分可以用 g%h 格式来实现。
(前面的Tag可以用 @PARENT_TAG@ 实现)

对于

printf "%s.%s" "$(git rev-list --count HEAD)" "$(git rev-parse --short HEAD)"

前面的提交计数部分只能人工更新,后面的SHA-1值部分可以用 %h 格式来实现。

对于

git show --pretty=format:%ci HEAD | cut -d ' ' -f 1 | sed 's/-//g'

可以用 %cd 格式来实现。

最近编辑记录 danielhugo (2014-10-05 01:35:37)


本人的 Arch Linux 软件仓库:http://git.io/-1
本人的广告过滤及代·理规则订阅页面:http://git.io/f0x

离线

#4 2014-10-05 10:15:43

依云
会员
所在地: a.k.a. 百合仙子
注册时间: 2011-08-21
帖子: 8,478
个人网站

Re: OpenSUSE Build Service 的 Service 如何实现这种格式的版本号?

就是说版本号部分,obs 只支持固定的格式,而不支持 shell 代码?

离线

#5 2014-10-05 11:16:15

danielhugo
偶爸刚弄死他
注册时间: 2012-07-31
帖子: 269
个人网站

Re: OpenSUSE Build Service 的 Service 如何实现这种格式的版本号?

百合仙子 说:

就是说版本号部分,obs 只支持固定的格式,而不支持 shell 代码?

是的,OBS里面关于 Arch Linux 的部分据 @fasheng 说是由 Google Summer of Code 贡献,貌似不支持 pacman 4.1 以后新增的 pkgver() 特性……这点比较郁闷…… sad


本人的 Arch Linux 软件仓库:http://git.io/-1
本人的广告过滤及代·理规则订阅页面:http://git.io/f0x

离线

#6 2014-10-05 21:53:37

danielhugo
偶爸刚弄死他
注册时间: 2012-07-31
帖子: 269
个人网站

Re: OpenSUSE Build Service 的 Service 如何实现这种格式的版本号?

这样吧,请问怎么样用

git show --pretty=format:

实现

git rev-list --count HEAD

的效果?


本人的 Arch Linux 软件仓库:http://git.io/-1
本人的广告过滤及代·理规则订阅页面:http://git.io/f0x

离线

#7 2014-10-06 12:29:46

danielhugo
偶爸刚弄死他
注册时间: 2012-07-31
帖子: 269
个人网站

Re: OpenSUSE Build Service 的 Service 如何实现这种格式的版本号?

百合仙子 说:

来社区的编译机上打包吧,那样就不用纠结 obs 的问题了~

话说这是加入ArchLinuxCN仓库维护团队的意思吗?还是社区考虑开放,允许坛友建立个人仓库?


本人的 Arch Linux 软件仓库:http://git.io/-1
本人的广告过滤及代·理规则订阅页面:http://git.io/f0x

离线

#8 2014-10-06 17:53:34

依云
会员
所在地: a.k.a. 百合仙子
注册时间: 2011-08-21
帖子: 8,478
个人网站

Re: OpenSUSE Build Service 的 Service 如何实现这种格式的版本号?

danielhugo 说:
百合仙子 说:

来社区的编译机上打包吧,那样就不用纠结 obs 的问题了~

话说这是加入ArchLinuxCN仓库维护团队的意思吗?还是社区考虑开放,允许坛友建立个人仓库?

当然是加入进来啦~为什么不加入呢?难道你弄的是非开源的私有仓库?或者因为版权原因不能加入?

离线

#9 2014-10-12 01:20:41

zsrkmyn
lazy...
注册时间: 2013-05-05
帖子: 331

Re: OpenSUSE Build Service 的 Service 如何实现这种格式的版本号?

danielhugo 说:
百合仙子 说:

来社区的编译机上打包吧,那样就不用纠结 obs 的问题了~

话说这是加入ArchLinuxCN仓库维护团队的意思吗?还是社区考虑开放,允许坛友建立个人仓库?

喵~凤凰的社区成长计划 https://bbs.archlinuxcn.org/viewtopic.php?id=2875

离线

#10 2014-10-26 00:57:28

danielhugo
偶爸刚弄死他
注册时间: 2012-07-31
帖子: 269
个人网站

Re: OpenSUSE Build Service 的 Service 如何实现这种格式的版本号?

发到英文论坛上也没有人解答,是我的问题描述不够详细吗?还是此问题无解? mad sad

1年之前考虑过参与仓库团队,对Wiki上这段话有点顾虑:

摘自 https://github.com/archlinuxcn/repo/wiki/申请维护者

您的详细身份和联系信息,例如您的工作、当前所在城市/公司/学校或其他单位,以及您的其他可靠联系方式。(我们绝不会将您的隐私信息公开给任何第三方,要求这些信息仅作为身份确认及责任分配。)

现在还需要这些信息吗?


本人的 Arch Linux 软件仓库:http://git.io/-1
本人的广告过滤及代·理规则订阅页面:http://git.io/f0x

离线

#11 2014-10-27 13:16:49

依云
会员
所在地: a.k.a. 百合仙子
注册时间: 2011-08-21
帖子: 8,478
个人网站

Re: OpenSUSE Build Service 的 Service 如何实现这种格式的版本号?

danielhugo 说:

发到英文论坛上也没有人解答,是我的问题描述不够详细吗?还是此问题无解? mad sad

1年之前考虑过参与仓库团队,对Wiki上这段话有点顾虑:

摘自 https://github.com/archlinuxcn/repo/wiki/申请维护者

您的详细身份和联系信息,例如您的工作、当前所在城市/公司/学校或其他单位,以及您的其他可靠联系方式。(我们绝不会将您的隐私信息公开给任何第三方,要求这些信息仅作为身份确认及责任分配。)

现在还需要这些信息吗?

这谁写这么正式的……

只需要说明你是谁,如何取得联系就可以了。比如XYZ大学学生,GMail abcd@gmail.com。

离线

页脚