diff options
Diffstat (limited to 'bitbake/lib/bb')
-rw-r--r-- | bitbake/lib/bb/fetch2/gitsm.py | 39 |
1 files changed, 35 insertions, 4 deletions
diff --git a/bitbake/lib/bb/fetch2/gitsm.py b/bitbake/lib/bb/fetch2/gitsm.py index 175dee05c0..d6e5c5c050 100644 --- a/bitbake/lib/bb/fetch2/gitsm.py +++ b/bitbake/lib/bb/fetch2/gitsm.py | |||
@@ -143,12 +143,43 @@ class GitSM(Git): | |||
143 | try: | 143 | try: |
144 | # Check for the nugget dropped by the download operation | 144 | # Check for the nugget dropped by the download operation |
145 | known_srcrevs = runfetchcmd("%s config --get-all bitbake.srcrev" % \ | 145 | known_srcrevs = runfetchcmd("%s config --get-all bitbake.srcrev" % \ |
146 | (ud.basecmd), d, workdir=ud.clonedir) | 146 | (ud.basecmd), d, workdir=ud.clonedir) |
147 | 147 | ||
148 | if ud.revisions[ud.names[0]] not in known_srcrevs.split(): | 148 | if ud.revisions[ud.names[0]] in known_srcrevs.split(): |
149 | return True | 149 | return False |
150 | except bb.fetch2.FetchError: | 150 | except bb.fetch2.FetchError: |
151 | # No srcrev nuggets, so this is new and needs to be updated | 151 | pass |
152 | |||
153 | need_update_list = [] | ||
154 | def need_update_submodule(ud, url, module, modpath, workdir, d): | ||
155 | url += ";bareclone=1;nobranch=1" | ||
156 | |||
157 | try: | ||
158 | newfetch = Fetch([url], d, cache=False) | ||
159 | new_ud = newfetch.ud[url] | ||
160 | if new_ud.method.need_update(new_ud, d): | ||
161 | need_update_list.append(modpath) | ||
162 | except Exception as e: | ||
163 | logger.error('gitsm: submodule update check failed: %s %s' % (type(e).__name__, str(e))) | ||
164 | need_update_result = True | ||
165 | |||
166 | # If we're using a shallow mirror tarball it needs to be unpacked | ||
167 | # temporarily so that we can examine the .gitmodules file | ||
168 | if ud.shallow and os.path.exists(ud.fullshallow) and not os.path.exists(ud.clonedir): | ||
169 | tmpdir = tempfile.mkdtemp(dir=d.getVar("DL_DIR")) | ||
170 | runfetchcmd("tar -xzf %s" % ud.fullshallow, d, workdir=tmpdir) | ||
171 | self.process_submodules(ud, tmpdir, need_update_submodule, d) | ||
172 | shutil.rmtree(tmpdir) | ||
173 | else: | ||
174 | self.process_submodules(ud, ud.clonedir, need_update_submodule, d) | ||
175 | if len(need_update_list) == 0: | ||
176 | # We already have the required commits of all submodules. Drop | ||
177 | # a nugget so we don't need to check again. | ||
178 | runfetchcmd("%s config --add bitbake.srcrev %s" % \ | ||
179 | (ud.basecmd, ud.revisions[ud.names[0]]), d, workdir=ud.clonedir) | ||
180 | |||
181 | if len(need_update_list) > 0: | ||
182 | logger.debug(1, 'gitsm: Submodules requiring update: %s' % (' '.join(need_update_list))) | ||
152 | return True | 183 | return True |
153 | 184 | ||
154 | return False | 185 | return False |