]> git.ipfire.org Git - thirdparty/openembedded/openembedded-core-contrib.git/commitdiff
bitbake: fetch2/gitsm: handle submodules nested inside subdirs
authorLaurent Bonnans <laurent.bonnans@here.com>
Mon, 1 Oct 2018 14:52:13 +0000 (16:52 +0200)
committerRichard Purdie <richard.purdie@linuxfoundation.org>
Thu, 4 Oct 2018 22:00:24 +0000 (23:00 +0100)
The new gitsm fetcher assumed that submodules were living directly in
the 'modules' directory, whereas they can be arbitrarily nested inside
subdirectories.

Solve it by first creating the parent of the destination directory for
the symlink and copy steps.

(Bitbake rev: 3dbc84e9c572f43209b79f3656d7dc35a6d982ba)

Signed-off-by: Laurent Bonnans <laurent.bonnans@here.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
bitbake/lib/bb/fetch2/gitsm.py

index 0cdc8301d1dd684e845e2c7f1df013c79aa6aaa0..fd5089c075c4da29403045e6d4c65c72c1d83fe0 100644 (file)
@@ -98,12 +98,14 @@ class GitSM(Git):
 
             # Correct the submodule references to the local download version...
             runfetchcmd("%(basecmd)s config submodule.%(module)s.url %(url)s" % {'basecmd': ud.basecmd, 'module': module, 'url' : local_paths[module]}, d, workdir=ud.clonedir)
-            try:
-                os.mkdir(os.path.join(ud.clonedir, 'modules'))
-            except OSError:
-                pass
-            if not os.path.exists(os.path.join(ud.clonedir, 'modules', paths[module])):
-                os.symlink(local_paths[module], os.path.join(ud.clonedir, 'modules', paths[module]))
+
+            symlink_path = os.path.join(ud.clonedir, 'modules', paths[module])
+            if not os.path.exists(symlink_path):
+                try:
+                    os.makedirs(os.path.dirname(symlink_path), exist_ok=True)
+                except OSError:
+                    pass
+                os.symlink(local_paths[module], symlink_path)
 
         return True
 
@@ -148,6 +150,7 @@ class GitSM(Git):
                 if os.path.exists(modpath):
                     target = os.path.dirname(modpath)
 
+                os.makedirs(os.path.dirname(target), exist_ok=True)
                 runfetchcmd("cp -fpLR %s %s" % (srcpath, target), d)
             elif os.path.exists(modpath):
                 # Module already exists, likely unpacked from a shallow mirror clone