diff options
Diffstat (limited to 'bitbake/lib/bb/fetch2/gitsm.py')
-rw-r--r-- | bitbake/lib/bb/fetch2/gitsm.py | 44 |
1 files changed, 16 insertions, 28 deletions
diff --git a/bitbake/lib/bb/fetch2/gitsm.py b/bitbake/lib/bb/fetch2/gitsm.py index f7f3af7212..fab4b1164c 100644 --- a/bitbake/lib/bb/fetch2/gitsm.py +++ b/bitbake/lib/bb/fetch2/gitsm.py | |||
@@ -147,6 +147,19 @@ class GitSM(Git): | |||
147 | 147 | ||
148 | return submodules != [] | 148 | return submodules != [] |
149 | 149 | ||
150 | def call_process_submodules(self, ud, d, extra_check, subfunc): | ||
151 | # If we're using a shallow mirror tarball it needs to be | ||
152 | # unpacked temporarily so that we can examine the .gitmodules file | ||
153 | if ud.shallow and os.path.exists(ud.fullshallow) and extra_check: | ||
154 | tmpdir = tempfile.mkdtemp(dir=d.getVar("DL_DIR")) | ||
155 | try: | ||
156 | runfetchcmd("tar -xzf %s" % ud.fullshallow, d, workdir=tmpdir) | ||
157 | self.process_submodules(ud, tmpdir, subfunc, d) | ||
158 | finally: | ||
159 | shutil.rmtree(tmpdir) | ||
160 | else: | ||
161 | self.process_submodules(ud, ud.clonedir, subfunc, d) | ||
162 | |||
150 | def need_update(self, ud, d): | 163 | def need_update(self, ud, d): |
151 | if Git.need_update(self, ud, d): | 164 | if Git.need_update(self, ud, d): |
152 | return True | 165 | return True |
@@ -164,15 +177,7 @@ class GitSM(Git): | |||
164 | logger.error('gitsm: submodule update check failed: %s %s' % (type(e).__name__, str(e))) | 177 | logger.error('gitsm: submodule update check failed: %s %s' % (type(e).__name__, str(e))) |
165 | need_update_result = True | 178 | need_update_result = True |
166 | 179 | ||
167 | # If we're using a shallow mirror tarball it needs to be unpacked | 180 | self.call_process_submodules(ud, d, not os.path.exists(ud.clonedir), need_update_submodule) |
168 | # temporarily so that we can examine the .gitmodules file | ||
169 | if ud.shallow and os.path.exists(ud.fullshallow) and not os.path.exists(ud.clonedir): | ||
170 | tmpdir = tempfile.mkdtemp(dir=d.getVar("DL_DIR")) | ||
171 | runfetchcmd("tar -xzf %s" % ud.fullshallow, d, workdir=tmpdir) | ||
172 | self.process_submodules(ud, tmpdir, need_update_submodule, d) | ||
173 | shutil.rmtree(tmpdir) | ||
174 | else: | ||
175 | self.process_submodules(ud, ud.clonedir, need_update_submodule, d) | ||
176 | 181 | ||
177 | if need_update_list: | 182 | if need_update_list: |
178 | logger.debug('gitsm: Submodules requiring update: %s' % (' '.join(need_update_list))) | 183 | logger.debug('gitsm: Submodules requiring update: %s' % (' '.join(need_update_list))) |
@@ -195,16 +200,7 @@ class GitSM(Git): | |||
195 | raise | 200 | raise |
196 | 201 | ||
197 | Git.download(self, ud, d) | 202 | Git.download(self, ud, d) |
198 | 203 | self.call_process_submodules(ud, d, self.need_update(ud, d), download_submodule) | |
199 | # If we're using a shallow mirror tarball it needs to be unpacked | ||
200 | # temporarily so that we can examine the .gitmodules file | ||
201 | if ud.shallow and os.path.exists(ud.fullshallow) and self.need_update(ud, d): | ||
202 | tmpdir = tempfile.mkdtemp(dir=d.getVar("DL_DIR")) | ||
203 | runfetchcmd("tar -xzf %s" % ud.fullshallow, d, workdir=tmpdir) | ||
204 | self.process_submodules(ud, tmpdir, download_submodule, d) | ||
205 | shutil.rmtree(tmpdir) | ||
206 | else: | ||
207 | self.process_submodules(ud, ud.clonedir, download_submodule, d) | ||
208 | 204 | ||
209 | def unpack(self, ud, destdir, d): | 205 | def unpack(self, ud, destdir, d): |
210 | def unpack_submodules(ud, url, module, modpath, workdir, d): | 206 | def unpack_submodules(ud, url, module, modpath, workdir, d): |
@@ -263,14 +259,6 @@ class GitSM(Git): | |||
263 | newfetch = Fetch([url], d, cache=False) | 259 | newfetch = Fetch([url], d, cache=False) |
264 | urldata.extend(newfetch.expanded_urldata()) | 260 | urldata.extend(newfetch.expanded_urldata()) |
265 | 261 | ||
266 | # If we're using a shallow mirror tarball it needs to be unpacked | 262 | self.call_process_submodules(ud, d, ud.method.need_update(ud, d), add_submodule) |
267 | # temporarily so that we can examine the .gitmodules file | ||
268 | if ud.shallow and os.path.exists(ud.fullshallow) and ud.method.need_update(ud, d): | ||
269 | tmpdir = tempfile.mkdtemp(dir=d.getVar("DL_DIR")) | ||
270 | subprocess.check_call("tar -xzf %s" % ud.fullshallow, cwd=tmpdir, shell=True) | ||
271 | self.process_submodules(ud, tmpdir, add_submodule, d) | ||
272 | shutil.rmtree(tmpdir) | ||
273 | else: | ||
274 | self.process_submodules(ud, ud.clonedir, add_submodule, d) | ||
275 | 263 | ||
276 | return urldata | 264 | return urldata |