From 1e6e8cb896934cf52e850ddd04be379ad5ad8a81 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Sat, 14 Sep 2024 22:14:17 +0200 Subject: [PATCH] bitbake: Revert "fetch2/gitsm: use configparser to parse .gitmodules" This reverts commit a4f42e396e2942fde94b8b4944487c1c45f7a295. Unfortunately configparser is a bit more strict and fails to parse e.g.: https://github.com/espressif/esp-idf/blob/e104dd7f27d2e73ab0e9b614dd7b9295099069bf/.gitmodules [submodule "components/bt/controller/lib_esp32"] path = components/bt/controller/lib_esp32 url = ../../espressif/esp32-bt-lib.git The url is using 8 spaces while path 1 tab causing: Exception: configparser.NoOptionError: No option 'url' in section: 'submodule "components/bt/controller/lib_esp32"' It was fixed in: https://github.com/espressif/esp-idf/commit/62ca8e2fb478a1cdc0e47003025265cd0d840395#diff-fe7afb5c9c916e521401d3fcfb4277d5071798c3baf83baf11d6071742823584 but mcuboot is using a bit older esp-idf revision in: https://github.com/ATmobica/mcuboot/blame/main/.gitmodules and mcuboot is then used as submodule in: https://github.com/project-chip/connectedhomeip/blob/master/.gitmodules so it might take a while for the fix to be propagated everywhere. Not sure how common these issues are, but configparser parses "url = ../../espressif/esp32-bt-lib.git" as 2nd line of "path" value (because it's indented differently) while git submodule and old gitsm implementation parses it as separate path and url keys. (Bitbake rev: d9eb2650256292a524a0c0bb1c0562d87bedcbc4) Signed-off-by: Martin Jansa Signed-off-by: Richard Purdie --- bitbake/lib/bb/fetch2/gitsm.py | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/bitbake/lib/bb/fetch2/gitsm.py b/bitbake/lib/bb/fetch2/gitsm.py index f193ae3c9b..f7f3af7212 100644 --- a/bitbake/lib/bb/fetch2/gitsm.py +++ b/bitbake/lib/bb/fetch2/gitsm.py @@ -47,20 +47,18 @@ 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 = {} - 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') - } + 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 return modules # Collect the defined submodules, and their attributes