in src/buildstream_plugins/sources/git.py [0:0]
def submodule_ref(self, submodule, ref=None):
if not ref:
ref = self.ref
# list objects in the parent repo tree to find the commit
# object that corresponds to the submodule
_, output = self.source.check_output(
[self.source.host_git, "ls-tree", ref, submodule],
fail="ls-tree failed for commit {} and submodule: {}".format(ref, submodule),
cwd=self.mirror,
)
# read the commit hash from the output
fields = output.split()
if len(fields) >= 2 and fields[1] == "commit":
submodule_commit = output.split()[2]
# fail if the commit hash is invalid
if len(submodule_commit) != 40:
raise SourceError(
"{}: Error reading commit information for submodule '{}'".format(self.source, submodule)
)
return submodule_commit
else:
detail = (
"The submodule '{}' is defined either in the BuildStream source\n".format(submodule)
+ "definition, or in a .gitmodules file. But the submodule was never added to the\n"
+ "underlying git repository with `git submodule add`."
)
self.source.warn(
"{}: Ignoring inconsistent submodule '{}'".format(self.source, submodule),
detail=detail,
warning_token=WARN_INCONSISTENT_SUBMODULE,
)
return None