尤克托。由git命令生成的包版本
是否有任何选项可以从git输出设置配方中的包版本?尤克托。由git命令生成的包版本,git,yocto,bitbake,Git,Yocto,Bitbake,是否有任何选项可以从git输出设置配方中的包版本? 我有一个诀窍,通过设置SRCREV=“${AUTOREV}”,总是从git下载最新版本,我想通过bitbake将包版本“PV”设置为git descripe--abbrev=4--dirty--always--long的输出,我能够管理一些代码来归档这个目标,但我觉得这个解决方案并不是完美的,但无论如何,请看看原因 首先,让我们根据配方和git存储库比较输出git命令(git descripe--abbrev=4--dirty--always-
我有一个诀窍,通过设置
SRCREV=“${AUTOREV}”
,总是从git下载最新版本,我想通过bitbake将包版本“PV”设置为git descripe--abbrev=4--dirty--always--long
的输出,我能够管理一些代码来归档这个目标,但我觉得这个解决方案并不是完美的,但无论如何,请看看原因
首先,让我们根据配方和git存储库比较输出git命令(git descripe--abbrev=4--dirty--always--long)*,以确保它按预期工作:
- 基于配方的bitbake生成的PV:
$ bitbake --environment hello-world | grep ^PV= PV="4b5f"
- 输出git存储库:
$ git remote -v | grep fetch origin https://github.com/leachim6/hello-world.git (fetch) $ git describe --abbrev=4 --always --long 4b5f
$ cat ../meta-test/recipes-hello-world/hello-world/hello-world_git.bb
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE;md5=2c4ac2930215d12ccb72d945112a0fa3"
SRC_URI = "git://github.com/leachim6/hello-world.git;protocol=https"
SRCREV = "4b5ff1ef90ceb442f5633fc9e5d28297ac0f69ff"
PV = "${@define_pn(d)}"
def define_pn(d):
import subprocess
source_dir = d.getVar('DL_DIR') + "/git2/github.com.leachim6.hello-world.git/"
cmd = "git describe --abbrev=4 --always --long"
proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, shell=True, cwd=source_dir)
out, err = proc.communicate()
return out.decode("utf-8").rstrip()
关于这个解决方案,我的主要内容是如何在python函数中正确设置source\u dir变量,这将非常灵活。例如,我试图使用${S}变量,但运气不好-我在解析配方时遇到了python错误-。我在bitbake代码方面不是很先进,但也许其他人可以提供更好的方法来设置这个正确的路径
*当我使用带有--dirty标志的原始命令时,在bitbake输出中有PV=“4b5f dirty”,没有它,输出与git存储库中的输出相同。我知道,固定路径不是最好的解决方案,但您的解决方案对我有好处。谢谢你的帮助。不幸的是,它似乎不起作用。BitBake正在尝试在PV变量运行
do_fetch
之前展开该变量,因此该目录尚不存在。不幸的是,我认为git无法进行远程描述,因此需要强制fetcher运行(在该指针处,我们可能也可以从中知道下载目录)。您的权利当我尝试从头开始构建它时,我遇到了相同的问题。在我的情况下,我们放弃了这种方法。伙计们,你们是对的,我的建议并没有像预期的那样有效@到@tomasz3dk你能不能取消我的投票,然后我会删除它。然而,现在我认为基于git版本设置PV是不可能的,或者您是否以某种方式管理了它?