From c888446d1229b21bdf428332e8515bd92449b538 Mon Sep 17 00:00:00 2001 From: Laurent Bonnans Date: Mon, 1 Oct 2018 16:52:13 +0200 Subject: bitbake: fetch2/gitsm: handle submodules nested inside subdirs 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 Signed-off-by: Richard Purdie --- bitbake/lib/bb/fetch2/gitsm.py | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/bitbake/lib/bb/fetch2/gitsm.py b/bitbake/lib/bb/fetch2/gitsm.py index 0cdc8301d1..fd5089c075 100644 --- a/bitbake/lib/bb/fetch2/gitsm.py +++ b/bitbake/lib/bb/fetch2/gitsm.py @@ -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 -- cgit v1.2.3-54-g00ecf