]> git.ipfire.org Git - thirdparty/openembedded/openembedded-core-contrib.git/commitdiff
externalsrc: Always ask Git for location of .git directory
authorMike Crowe <mac@mcrowe.com>
Wed, 2 Jul 2025 10:56:58 +0000 (11:56 +0100)
committerRichard Purdie <richard.purdie@linuxfoundation.org>
Mon, 7 Jul 2025 21:12:47 +0000 (22:12 +0100)
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.

Signed-off-by: Mike Crowe <mac@mcrowe.com>
Signed-off-by: Antonin Godard <antonin.godard@bootlin.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
meta/classes/externalsrc.bbclass

index 70e27a8d35133dd31244663712289ceca56f5385..527c99ab698d2f3f0bf9d7aee1b829222d04119f 100644 (file)
 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: