From d016d18a9f14871c444a13305f4040f28000a21f Mon Sep 17 00:00:00 2001 From: Ross Burton Date: Tue, 10 Sep 2024 17:58:04 +0100 Subject: [PATCH] bitbake: fetch2/gitsm: use configparser to parse .gitmodules .gitmodules is basically ini-style, so use configparser instead of manually parsing by hand. (Bitbake rev: a4f42e396e2942fde94b8b4944487c1c45f7a295) Signed-off-by: Ross Burton Signed-off-by: Richard Purdie --- bitbake/lib/bb/fetch2/gitsm.py | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) 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