git - 约克托。git命令生成的包版本
问题描述
是否有任何选项可以从 git 输出中设置配方中的包版本?我有一个食谱,它总是通过设置从 git 下载最新版本SRCREV = "${AUTOREV}"
,并希望通过 bitbake 将包版本“PV”设置为git describe --abbrev=4 --dirty --always --long
解决方案
我能够管理一些代码来存档这个目标,但我觉得这个解决方案不是完美的,但无论如何请看看为什么。
首先,让我们根据配方和 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 函数方法,允许我将此类函数的输出设置为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 有错误。我在bitbake代码方面不是那么先进,但也许其他人可以提供更好的方法来设置这个正确的路径。
*当我使用带有--dirty标志的原始命令时,在bitbake输出中有 PV="4b5f-dirty",没有它的输出与 git 存储库中的相同。
推荐阅读
- database - Azure PostgreSql 连接致命:主机“xx.xx.xx.xx”、用户“xyz”、数据库“xyz”、SSL 上没有 pg_hba.conf 条目
- php - 图书馆 GD 问题
- node.js - 无法从 node.js 请求回调中设置变量
- sql - SQL从重复行中只选择一行
- java - 关于java中代码的问题,尤其是在skip函数中
- javascript - 强制通过 HTML 下载文件
- php - 如何使用外键从具有另一个表的顺序的表中获取记录
- docker - Docker:如何在主机中创建一个指向 docker 容器中目录的环境变量?
- javascript - 添加新控件后传单地图不起作用
- elasticsearch - JMeter 不会写入响应数据