В рецепте Yocto для ядра Linux мне нужно получить тег для самого последнего коммита в удаленном git-репозитории ядра Linux.Тег добавляется в версию для Linux.У меня проблема в том, что значение basehash (переменной, содержащей тег) изменяется во время сборки, и я получаю ошибку bitbake:
(...) the basehash value changed from 24896f703509afcd913bc2d97fcff392 to 2d43ec8fdf53988554b77bef20c6fd88. The metadata is not deterministic and this needs to be fixed.
Вот код, который я использую в рецепте:
def get_git_tag(git_repo):
import subprocess
print(git_repo)
try:
subprocess.call("git fetch --tags", cwd=p, shell=True)
tag = subprocess.Popen("git describe --exact-match 2>/dev/null", cwd=p, shell=True, stdout=subprocess.PIPE, universal_newlines=True).communicate()[0].rstrip()
return tag
except OSError:
return ""
KERNEL_LOCALVERSION = "-${@get_git_tag('${S}')}"
KERNEL_LOCALVERSION[vardepvalue] = "${KERNEL_LOCALVERSION}"
do_configure[vardeps] += "KERNEL_LOCALVERSION"
Код не выполняется при первой сборке после новой фиксации.Вторая сборка в порядке.Ошибка состоит в том, что значение basehash вычисляется сначала для старого локального клона (переменная S), который больше не существует, а затем для нового клона и изменяет значение basehash во время сборки.
Есть ли способ указать битбакету вычислятьзначение basehash после задачи do_fetch?
Как это делается для SRCREV, когда для него установлено значение AUTOINC?