From 7ec0bdc24a5a9eef5aeba13b00774b6e3e1eaa64 Mon Sep 17 00:00:00 2001 From: Mike Crowe Date: Wed, 2 Jul 2025 11:56:58 +0100 Subject: externalsrc: Always ask Git for location of .git directory externalsrc_configure_prefunc assumed that the .git directory is ${S}/.git. This isn't true for submodules at least. srctree_hash_files already contained code to ask Git for the correct path to the .git directory. Let's move that code to a new find_git_dir function and call it from both places and make the behaviour consistent. (From OE-Core rev: 47891e200e92ba34a6ff2df2fba1032738f52f98) Signed-off-by: Mike Crowe Signed-off-by: Antonin Godard Signed-off-by: Richard Purdie --- meta/classes/externalsrc.bbclass | 44 +++++++++++++++++++++++----------------- 1 file changed, 25 insertions(+), 19 deletions(-) diff --git a/meta/classes/externalsrc.bbclass b/meta/classes/externalsrc.bbclass index 70e27a8d35..527c99ab69 100644 --- a/meta/classes/externalsrc.bbclass +++ b/meta/classes/externalsrc.bbclass @@ -28,6 +28,20 @@ SRCTREECOVEREDTASKS ?= "do_patch do_unpack do_fetch" EXTERNALSRC_SYMLINKS ?= "oe-workdir:${WORKDIR} oe-logs:${T}" +def find_git_dir(d, s_dir): + import subprocess + git_dir = None + try: + git_dir = os.path.join(s_dir, + subprocess.check_output(['git', '-C', s_dir, 'rev-parse', '--git-dir'], stderr=subprocess.DEVNULL).decode("utf-8").rstrip()) + top_git_dir = os.path.join(d.getVar("TOPDIR"), + subprocess.check_output(['git', '-C', d.getVar("TOPDIR"), 'rev-parse', '--git-dir'], stderr=subprocess.DEVNULL).decode("utf-8").rstrip()) + if git_dir == top_git_dir: + git_dir = None + except subprocess.CalledProcessError: + pass + return git_dir + python () { externalsrc = d.getVar('EXTERNALSRC') externalsrcbuild = d.getVar('EXTERNALSRC_BUILD') @@ -169,14 +183,16 @@ python externalsrc_configure_prefunc() { newlinks.append(symsplit[0]) # Hide the symlinks from git try: - git_exclude_file = os.path.join(s_dir, '.git/info/exclude') - if os.path.exists(git_exclude_file): - with open(git_exclude_file, 'r+') as efile: - elines = efile.readlines() - for link in newlinks: - if link in elines or '/'+link in elines: - continue - efile.write('/' + link + '\n') + git_dir = find_git_dir(d, s_dir) + if git_dir: + git_exclude_file = os.path.join(git_dir, 'info/exclude') + if os.path.exists(git_exclude_file): + with open(git_exclude_file, 'r+') as efile: + elines = efile.readlines() + for link in newlinks: + if link in elines or '/'+link in elines: + continue + efile.write('/' + link + '\n') except IOError as ioe: bb.note('Failed to hide EXTERNALSRC_SYMLINKS from git') } @@ -207,17 +223,7 @@ def srctree_hash_files(d, srcdir=None): import hashlib s_dir = srcdir or d.getVar('EXTERNALSRC') - git_dir = None - - try: - git_dir = os.path.join(s_dir, - subprocess.check_output(['git', '-C', s_dir, 'rev-parse', '--git-dir'], stderr=subprocess.DEVNULL).decode("utf-8").rstrip()) - top_git_dir = os.path.join(d.getVar("TOPDIR"), - subprocess.check_output(['git', '-C', d.getVar("TOPDIR"), 'rev-parse', '--git-dir'], stderr=subprocess.DEVNULL).decode("utf-8").rstrip()) - if git_dir == top_git_dir: - git_dir = None - except subprocess.CalledProcessError: - pass + git_dir = find_git_dir(d, s_dir) ret = " " if git_dir is not None: -- cgit v1.2.3-54-g00ecf