diff options
author | Mark Hatle <mark.hatle@windriver.com> | 2019-05-15 07:53:20 -0400 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2019-05-16 09:17:15 +0100 |
commit | 7a73a435e086df39b0a241250bed35c29e0e5a00 (patch) | |
tree | e35bcf933871a31f430ac51039b66880c12cef20 /bitbake/lib/bb/fetch2 | |
parent | d3abad15046e4e5d8aeefa529e6e101ed4e95137 (diff) | |
download | poky-7a73a435e086df39b0a241250bed35c29e0e5a00.tar.gz |
bitbake: gitsm: Fix a bug where the wrong path was used for the submodule init
Because we are trying to avoid network activity and use our own fetcher,
the system emulates the behavior of 'git submodule init'.
git submodule init uses the .gitmodules file, where typically the module
name and path are the same. However, in this case the module name and
path (in the tree) were different. i.e.:
[submodule "edgelet/hsm-sys/azure-iot-hsm-c/deps/azure-c-shared-utility"]
path = edgelet/hsm-sys/azure-iot-hsm-c/deps/c-shared
url = https://github.com/Azure/azure-c-shared-utility.git
Previously the code assumed the 'path' was both the checkout location
under .git/modules, as well as the path to extract the components. This
proved to be incorrect as the .git/modules path needs to match the submodule
'name'. This causes the components that were fetched to be initialized in
the wrong location, which later caused the 'git submodule update' process to
skip not properly initialized modules.
A test case was added for this specific case to ensure a regression does
not appear in the future.
(Bitbake rev: fd27ab60d33553dba13de39394edaaac04e446b3)
Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake/lib/bb/fetch2')
-rw-r--r-- | bitbake/lib/bb/fetch2/gitsm.py | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/bitbake/lib/bb/fetch2/gitsm.py b/bitbake/lib/bb/fetch2/gitsm.py index 1f03ba7a0d..c622771d21 100644 --- a/bitbake/lib/bb/fetch2/gitsm.py +++ b/bitbake/lib/bb/fetch2/gitsm.py | |||
@@ -117,7 +117,7 @@ class GitSM(Git): | |||
117 | 117 | ||
118 | url += ';protocol=%s' % proto | 118 | url += ';protocol=%s' % proto |
119 | url += ";name=%s" % module | 119 | url += ";name=%s" % module |
120 | url += ";subpath=%s" % paths[module] | 120 | url += ";subpath=%s" % module |
121 | 121 | ||
122 | ld = d.createCopy() | 122 | ld = d.createCopy() |
123 | # Not necessary to set SRC_URI, since we're passing the URI to | 123 | # Not necessary to set SRC_URI, since we're passing the URI to |
@@ -184,7 +184,7 @@ class GitSM(Git): | |||
184 | 184 | ||
185 | try: | 185 | try: |
186 | newfetch = Fetch([url], d, cache=False) | 186 | newfetch = Fetch([url], d, cache=False) |
187 | newfetch.unpack(root=os.path.dirname(os.path.join(repo_conf, 'modules', modpath))) | 187 | newfetch.unpack(root=os.path.dirname(os.path.join(repo_conf, 'modules', module))) |
188 | except Exception as e: | 188 | except Exception as e: |
189 | logger.error('gitsm: submodule unpack failed: %s %s' % (type(e).__name__, str(e))) | 189 | logger.error('gitsm: submodule unpack failed: %s %s' % (type(e).__name__, str(e))) |
190 | raise | 190 | raise |
@@ -199,9 +199,9 @@ class GitSM(Git): | |||
199 | 199 | ||
200 | # Ensure the submodule repository is NOT set to bare, since we're checking it out... | 200 | # Ensure the submodule repository is NOT set to bare, since we're checking it out... |
201 | try: | 201 | try: |
202 | runfetchcmd("%s config core.bare false" % (ud.basecmd), d, quiet=True, workdir=os.path.join(repo_conf, 'modules', modpath)) | 202 | runfetchcmd("%s config core.bare false" % (ud.basecmd), d, quiet=True, workdir=os.path.join(repo_conf, 'modules', module)) |
203 | except: | 203 | except: |
204 | logger.error("Unable to set git config core.bare to false for %s" % os.path.join(repo_conf, 'modules', modpath)) | 204 | logger.error("Unable to set git config core.bare to false for %s" % os.path.join(repo_conf, 'modules', module)) |
205 | raise | 205 | raise |
206 | 206 | ||
207 | Git.unpack(self, ud, destdir, d) | 207 | Git.unpack(self, ud, destdir, d) |
@@ -209,5 +209,7 @@ class GitSM(Git): | |||
209 | ret = self.process_submodules(ud, ud.destdir, unpack_submodules, d) | 209 | ret = self.process_submodules(ud, ud.destdir, unpack_submodules, d) |
210 | 210 | ||
211 | if not ud.bareclone and ret: | 211 | if not ud.bareclone and ret: |
212 | # Run submodule update, this sets up the directories -- without touching the config | 212 | # All submodules should already be downloaded and configured in the tree. This simply sets |
213 | # up the configuration and checks out the files. The main project config should remain | ||
214 | # unmodified, and no download from the internet should occur. | ||
213 | runfetchcmd("%s submodule update --recursive --no-fetch" % (ud.basecmd), d, quiet=True, workdir=ud.destdir) | 215 | runfetchcmd("%s submodule update --recursive --no-fetch" % (ud.basecmd), d, quiet=True, workdir=ud.destdir) |