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 <laurent.bonnans@here.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Laurent Bonnans
2018-10-01 16:52:13 +02:00
committed by Richard Purdie
parent fa8ade3695
commit c888446d12

View 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