Yocto。 git命令生成的软件包版本

时间:2018-07-13 11:24:54

标签: git yocto bitbake

是否可以通过git输出在配方中设置软件包版本? 我有一个食谱,总是通过设置SRCREV = "${AUTOREV}"从git下载最新版本,并且想烤一下以将软件包版本“ PV”设置为git describe --abbrev=4 --dirty --always --long

的输出。

1 个答案:

答案 0 :(得分:0)

我能够管理一些代码来实现这一目标,但我觉得此解决方案不是完美的解决方案,但无论如何请看看为什么。

首先,让我们根据配方和git存储库比较输出git命令( git describe --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
    

该如何存档?出于测试目的,我选择了hello-world存储库,最近定义了 PV 我使用了 bitbake python function方法,该方法允许我设置此类功能的输出到 PV ,配方内容:

$ 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_dir 变量,该变量非常灵活。例如,我尝试使用 $ {S} 变量,但没有运气-解析配方期间,我遇到了python错误-gist with error。我在 bitbake 代码方面不是很高级,但是也许其他人可以提供更好的方法来设置此正确的路径。

*当我使用带有-dirty 标志的原始命令时,在 bitbake 输出中有PV =“ 4b5f-dirty”,没有它,输出是与git仓库中的一样。