diff --git a/bitbake/lib/bb/fetch2/gitsm.py b/bitbake/lib/bb/fetch2/gitsm.py index f7f3af7212..f193ae3c9b 100644 --- a/bitbake/lib/bb/fetch2/gitsm.py +++ b/bitbake/lib/bb/fetch2/gitsm.py @@ -47,18 +47,20 @@ class GitSM(Git): subrevision = {} def parse_gitmodules(gitmodules): + """ + Parse .gitmodules and return a dictionary of submodule paths to dictionaries with path and url members. + """ + import configparser + cp = configparser.ConfigParser() + cp.read_string(gitmodules) + modules = {} - module = "" - for line in gitmodules.splitlines(): - if line.startswith('[submodule'): - module = line.split('"')[1] - modules[module] = {} - elif module and line.strip().startswith('path'): - path = line.split('=')[1].strip() - modules[module]['path'] = path - elif module and line.strip().startswith('url'): - url = line.split('=')[1].strip() - modules[module]['url'] = url + for section in [s for s in cp.sections() if s.startswith("submodule ")]: + module = section.split('"')[1] + modules[module] = { + 'path': cp.get(section, 'path'), + 'url': cp.get(section, 'url') + } return modules # Collect the defined submodules, and their attributes