diff options
| -rw-r--r-- | bitbake/lib/bb/fetch2/gitsm.py | 12 | ||||
| -rw-r--r-- | bitbake/lib/bb/tests/fetch.py | 27 |
2 files changed, 34 insertions, 5 deletions
diff --git a/bitbake/lib/bb/fetch2/gitsm.py b/bitbake/lib/bb/fetch2/gitsm.py index b21fed2669..54f99b1036 100644 --- a/bitbake/lib/bb/fetch2/gitsm.py +++ b/bitbake/lib/bb/fetch2/gitsm.py | |||
| @@ -129,7 +129,7 @@ class GitSM(Git): | |||
| 129 | 129 | ||
| 130 | url += ';protocol=%s' % proto | 130 | url += ';protocol=%s' % proto |
| 131 | url += ";name=%s" % module | 131 | url += ";name=%s" % module |
| 132 | url += ";subpath=%s" % paths[module] | 132 | url += ";subpath=%s" % module |
| 133 | 133 | ||
| 134 | ld = d.createCopy() | 134 | ld = d.createCopy() |
| 135 | # Not necessary to set SRC_URI, since we're passing the URI to | 135 | # Not necessary to set SRC_URI, since we're passing the URI to |
| @@ -176,7 +176,7 @@ class GitSM(Git): | |||
| 176 | 176 | ||
| 177 | try: | 177 | try: |
| 178 | newfetch = Fetch([url], d, cache=False) | 178 | newfetch = Fetch([url], d, cache=False) |
| 179 | newfetch.unpack(root=os.path.dirname(os.path.join(repo_conf, 'modules', modpath))) | 179 | newfetch.unpack(root=os.path.dirname(os.path.join(repo_conf, 'modules', module))) |
| 180 | except Exception as e: | 180 | except Exception as e: |
| 181 | logger.error('gitsm: submodule unpack failed: %s %s' % (type(e).__name__, str(e))) | 181 | logger.error('gitsm: submodule unpack failed: %s %s' % (type(e).__name__, str(e))) |
| 182 | raise | 182 | raise |
| @@ -191,9 +191,9 @@ class GitSM(Git): | |||
| 191 | 191 | ||
| 192 | # Ensure the submodule repository is NOT set to bare, since we're checking it out... | 192 | # Ensure the submodule repository is NOT set to bare, since we're checking it out... |
| 193 | try: | 193 | try: |
| 194 | runfetchcmd("%s config core.bare false" % (ud.basecmd), d, quiet=True, workdir=os.path.join(repo_conf, 'modules', modpath)) | 194 | runfetchcmd("%s config core.bare false" % (ud.basecmd), d, quiet=True, workdir=os.path.join(repo_conf, 'modules', module)) |
| 195 | except: | 195 | except: |
| 196 | logger.error("Unable to set git config core.bare to false for %s" % os.path.join(repo_conf, 'modules', modpath)) | 196 | logger.error("Unable to set git config core.bare to false for %s" % os.path.join(repo_conf, 'modules', module)) |
| 197 | raise | 197 | raise |
| 198 | 198 | ||
| 199 | Git.unpack(self, ud, destdir, d) | 199 | Git.unpack(self, ud, destdir, d) |
| @@ -201,5 +201,7 @@ class GitSM(Git): | |||
| 201 | ret = self.process_submodules(ud, ud.destdir, unpack_submodules, d) | 201 | ret = self.process_submodules(ud, ud.destdir, unpack_submodules, d) |
| 202 | 202 | ||
| 203 | if not ud.bareclone and ret: | 203 | if not ud.bareclone and ret: |
| 204 | # Run submodule update, this sets up the directories -- without touching the config | 204 | # All submodules should already be downloaded and configured in the tree. This simply sets |
| 205 | # up the configuration and checks out the files. The main project config should remain | ||
| 206 | # unmodified, and no download from the internet should occur. | ||
| 205 | runfetchcmd("%s submodule update --recursive --no-fetch" % (ud.basecmd), d, quiet=True, workdir=ud.destdir) | 207 | runfetchcmd("%s submodule update --recursive --no-fetch" % (ud.basecmd), d, quiet=True, workdir=ud.destdir) |
diff --git a/bitbake/lib/bb/tests/fetch.py b/bitbake/lib/bb/tests/fetch.py index 522d2024fa..99508603f1 100644 --- a/bitbake/lib/bb/tests/fetch.py +++ b/bitbake/lib/bb/tests/fetch.py | |||
| @@ -958,6 +958,33 @@ class FetcherNetworkTest(FetcherTest): | |||
| 958 | self.assertTrue(os.path.exists(os.path.join(repo_path, '.git/modules/third_party/googletest/config')), msg='Missing submodule config "third_party/googletest/config"') | 958 | self.assertTrue(os.path.exists(os.path.join(repo_path, '.git/modules/third_party/googletest/config')), msg='Missing submodule config "third_party/googletest/config"') |
| 959 | self.assertTrue(os.path.exists(os.path.join(repo_path, '.git/modules/third_party/HdrHistogram_c/config')), msg='Missing submodule config "third_party/HdrHistogram_c/config"') | 959 | self.assertTrue(os.path.exists(os.path.join(repo_path, '.git/modules/third_party/HdrHistogram_c/config')), msg='Missing submodule config "third_party/HdrHistogram_c/config"') |
| 960 | 960 | ||
| 961 | def test_git_submodule_iotedge(self): | ||
| 962 | """ Prevent regression on deeply nested submodules not being checked out properly, even though they were fetched. """ | ||
| 963 | |||
| 964 | # This repository also has submodules where the module (name), path and url do not align | ||
| 965 | url = "gitsm://github.com/azure/iotedge.git;protocol=git;rev=d76e0316c6f324345d77c48a83ce836d09392699" | ||
| 966 | fetcher = bb.fetch.Fetch([url], self.d) | ||
| 967 | fetcher.download() | ||
| 968 | # Previous cwd has been deleted | ||
| 969 | os.chdir(os.path.dirname(self.unpackdir)) | ||
| 970 | fetcher.unpack(self.unpackdir) | ||
| 971 | |||
| 972 | repo_path = os.path.join(self.tempdir, 'unpacked', 'git') | ||
| 973 | |||
| 974 | self.assertTrue(os.path.exists(os.path.join(repo_path, 'edgelet/hsm-sys/azure-iot-hsm-c/deps/c-shared/README.md')), msg='Missing submodule checkout') | ||
| 975 | self.assertTrue(os.path.exists(os.path.join(repo_path, 'edgelet/hsm-sys/azure-iot-hsm-c/deps/c-shared/testtools/ctest/README.md')), msg='Missing submodule checkout') | ||
| 976 | self.assertTrue(os.path.exists(os.path.join(repo_path, 'edgelet/hsm-sys/azure-iot-hsm-c/deps/c-shared/testtools/testrunner/readme.md')), msg='Missing submodule checkout') | ||
| 977 | self.assertTrue(os.path.exists(os.path.join(repo_path, 'edgelet/hsm-sys/azure-iot-hsm-c/deps/c-shared/testtools/umock-c/readme.md')), msg='Missing submodule checkout') | ||
| 978 | self.assertTrue(os.path.exists(os.path.join(repo_path, 'edgelet/hsm-sys/azure-iot-hsm-c/deps/c-shared/testtools/umock-c/deps/ctest/README.md')), msg='Missing submodule checkout') | ||
| 979 | self.assertTrue(os.path.exists(os.path.join(repo_path, 'edgelet/hsm-sys/azure-iot-hsm-c/deps/c-shared/testtools/umock-c/deps/testrunner/readme.md')), msg='Missing submodule checkout') | ||
| 980 | self.assertTrue(os.path.exists(os.path.join(repo_path, 'edgelet/hsm-sys/azure-iot-hsm-c/deps/utpm/README.md')), msg='Missing submodule checkout') | ||
| 981 | self.assertTrue(os.path.exists(os.path.join(repo_path, 'edgelet/hsm-sys/azure-iot-hsm-c/deps/utpm/deps/c-utility/README.md')), msg='Missing submodule checkout') | ||
| 982 | self.assertTrue(os.path.exists(os.path.join(repo_path, 'edgelet/hsm-sys/azure-iot-hsm-c/deps/utpm/deps/c-utility/testtools/ctest/README.md')), msg='Missing submodule checkout') | ||
| 983 | self.assertTrue(os.path.exists(os.path.join(repo_path, 'edgelet/hsm-sys/azure-iot-hsm-c/deps/utpm/deps/c-utility/testtools/testrunner/readme.md')), msg='Missing submodule checkout') | ||
| 984 | self.assertTrue(os.path.exists(os.path.join(repo_path, 'edgelet/hsm-sys/azure-iot-hsm-c/deps/utpm/deps/c-utility/testtools/umock-c/readme.md')), msg='Missing submodule checkout') | ||
| 985 | self.assertTrue(os.path.exists(os.path.join(repo_path, 'edgelet/hsm-sys/azure-iot-hsm-c/deps/utpm/deps/c-utility/testtools/umock-c/deps/ctest/README.md')), msg='Missing submodule checkout') | ||
| 986 | self.assertTrue(os.path.exists(os.path.join(repo_path, 'edgelet/hsm-sys/azure-iot-hsm-c/deps/utpm/deps/c-utility/testtools/umock-c/deps/testrunner/readme.md')), msg='Missing submodule checkout') | ||
| 987 | |||
| 961 | class TrustedNetworksTest(FetcherTest): | 988 | class TrustedNetworksTest(FetcherTest): |
| 962 | def test_trusted_network(self): | 989 | def test_trusted_network(self): |
| 963 | # Ensure trusted_network returns False when the host IS in the list. | 990 | # Ensure trusted_network returns False when the host IS in the list. |
