152 def _git_submodules_status(self, repository_directory):
153 return self.git(repository_directory)._run_git(['submodule', 'status'])
154
155 def _git_submodules_description(self, test_repository):
156 submodules = []
157 repository_directory = self._filesystem.join(self.repository_directory, test_repository['name'])
158 if self._filesystem.isfile(self._filesystem.join(repository_directory, '.gitmodules')):
159 submodule = {}
160 for line in self._filesystem.read_text_file(self._filesystem.join(repository_directory, '.gitmodules')).splitlines():
161 line = line.strip()
162 if line.startswith('path = '):
163 submodule['path'] = line[7:]
164 elif line.startswith('url = '):
165 submodule['url'] = line[6:]
166 if not submodule['url'].startswith('https://github.com/'):
167 _log.warning('Submodule %s is not hosted on github' % submodule['path'])
168 _log.warning('Please ensure that generated URL points to an archive of the module or manually edit its value after the import')
169 submodules.append(submodule)
170 submodule = {}
171
172 submodules_status = [line[1:].split(' ') for line in self._git_submodules_status(repository_directory).splitlines()]
173 for submodule in submodules:
174 for status in submodules_status:
175 if submodule['path'] == status[1]:
176 url = submodule['url'][:-4]
177 version = status[0]
178 repository_name = url.split('/').pop()
179 submodule['url'] = url + '/archive/' + version + '.tar.gz'
180 submodule['url_subpath'] = repository_name + '-' + version
181 if '/' in submodule['path']:
182 steps = submodule['path'].split('/')
183 submodule['name'] = steps.pop()
184 submodule['path'] = steps
185 else:
186 submodule['name'] = submodule['path']
187 submodule['path'] = ['.']
188 return submodules
189
190 def generate_git_submodules_description(self, test_repository, filepath):
191 self._filesystem.write_text_file(filepath, json.dumps(self._git_submodules_description(test_repository), sort_keys=True, indent=4))
192