summaryrefslogtreecommitdiffstats
path: root/bitbake/lib/bb/fetch2/gitsm.py
diff options
context:
space:
mode:
Diffstat (limited to 'bitbake/lib/bb/fetch2/gitsm.py')
-rw-r--r--bitbake/lib/bb/fetch2/gitsm.py66
1 files changed, 4 insertions, 62 deletions
diff --git a/bitbake/lib/bb/fetch2/gitsm.py b/bitbake/lib/bb/fetch2/gitsm.py
index c172ab1660..83571f834b 100644
--- a/bitbake/lib/bb/fetch2/gitsm.py
+++ b/bitbake/lib/bb/fetch2/gitsm.py
@@ -150,68 +150,7 @@ class GitSM(Git):
150 150
151 def download(self, ud, d): 151 def download(self, ud, d):
152 Git.download(self, ud, d) 152 Git.download(self, ud, d)
153 153 self.update_submodules(ud, d)
154 if not ud.shallow or ud.localpath != ud.fullshallow:
155 self.update_submodules(ud, d)
156
157 def copy_submodules(self, submodules, ud, name, destdir, d):
158 if ud.bareclone:
159 repo_conf = destdir
160 else:
161 repo_conf = os.path.join(destdir, '.git')
162
163 if submodules and not os.path.exists(os.path.join(repo_conf, 'modules')):
164 os.mkdir(os.path.join(repo_conf, 'modules'))
165
166 for module, md in submodules.items():
167 srcpath = os.path.join(ud.clonedir, 'modules', md['path'])
168 modpath = os.path.join(repo_conf, 'modules', md['path'])
169
170 # Check if the module is initialized
171 try:
172 module_hash = runfetchcmd("%s ls-tree -z -d %s %s" % (ud.basecmd, ud.revisions[name], md['path']), d, quiet=True, workdir=ud.clonedir)
173 except:
174 # If the command fails, we don't have a valid file to check. If it doesn't
175 # fail -- it still might be a failure, see next check...
176 module_hash = ""
177
178 if not module_hash:
179 logger.debug(1, "submodule %s is defined, but is not initialized in the repository. Skipping", module)
180 continue
181
182 if os.path.exists(srcpath):
183 if os.path.exists(os.path.join(srcpath, '.git')):
184 srcpath = os.path.join(srcpath, '.git')
185
186 target = modpath
187 if os.path.exists(modpath):
188 target = os.path.dirname(modpath)
189
190 os.makedirs(os.path.dirname(target), exist_ok=True)
191 runfetchcmd("cp -fpLR %s %s" % (srcpath, target), d)
192 elif os.path.exists(modpath):
193 # Module already exists, likely unpacked from a shallow mirror clone
194 pass
195 else:
196 # This is fatal, as we do NOT want git-submodule to hit the network
197 raise bb.fetch2.FetchError('Submodule %s does not exist in %s or %s.' % (module, srcpath, modpath))
198
199 def clone_shallow_local(self, ud, dest, d):
200 super(GitSM, self).clone_shallow_local(ud, dest, d)
201
202 # Copy over the submodules' fetched histories too.
203 repo_conf = os.path.join(dest, '.git')
204
205 submodules = []
206 for name in ud.names:
207 try:
208 gitmodules = runfetchcmd("%s show %s:.gitmodules" % (ud.basecmd, ud.revision), d, quiet=True, workdir=dest)
209 except:
210 # No submodules to update
211 continue
212
213 submodules = self.parse_gitmodules(gitmodules)
214 self.copy_submodules(submodules, ud, name, dest, d)
215 154
216 def unpack_submodules(self, repo_conf, ud, d): 155 def unpack_submodules(self, repo_conf, ud, d):
217 submodules = [] 156 submodules = []
@@ -294,6 +233,9 @@ class GitSM(Git):
294 # Correct the submodule references to the local download version... 233 # Correct the submodule references to the local download version...
295 runfetchcmd("%(basecmd)s config submodule.%(module)s.url %(url)s" % {'basecmd': ud.basecmd, 'module': module, 'url' : local_paths[module]}, d, workdir=ud.destdir) 234 runfetchcmd("%(basecmd)s config submodule.%(module)s.url %(url)s" % {'basecmd': ud.basecmd, 'module': module, 'url' : local_paths[module]}, d, workdir=ud.destdir)
296 235
236 if ud.shallow:
237 runfetchcmd("%(basecmd)s config submodule.%(module)s.shallow true" % {'basecmd': ud.basecmd, 'module': module}, d, workdir=ud.destdir)
238
297 # Ensure the submodule repository is NOT set to bare, since we're checking it out... 239 # Ensure the submodule repository is NOT set to bare, since we're checking it out...
298 runfetchcmd("%s config core.bare false" % (ud.basecmd), d, quiet=True, workdir=os.path.join(repo_conf, 'modules', paths[module])) 240 runfetchcmd("%s config core.bare false" % (ud.basecmd), d, quiet=True, workdir=os.path.join(repo_conf, 'modules', paths[module]))
299 241