@@ -205,8 +205,44 @@ class LayerIndexPlugin(ActionPlugin):
for deplayerbranch in dependencies:
layerBranch = dependencies[deplayerbranch][0]
- if layerBranch.index.config['TYPE'] == 'cooker':
- # Anything loaded via cooker is already local, skip it
+ is_cooker_layer = layerBranch.index.config['TYPE'] == 'cooker'
+
+ if is_cooker_layer:
+ # Anything loaded via cooker is already local
+ # If a branch was specified, we still need to check/switch branches
+ if args.branch:
+ # Map collection names to layer paths (same as cooker plugin does)
+ layerconfs = self.tinfoil.config_data.varhistory.get_variable_items_files('BBFILE_COLLECTIONS')
+ bbfile_collections = {layer: os.path.dirname(os.path.dirname(path)) for layer, path in layerconfs.items()}
+
+ # Get the layer path for this cooker layer's collection
+ collection_name = layerBranch.collection
+ if collection_name in bbfile_collections:
+ bblayer = bbfile_collections[collection_name]
+ if os.path.exists(bblayer):
+ try:
+ # Find the git repository root
+ gitdir_cmd = ['git', '-C', bblayer, 'rev-parse', '--show-toplevel']
+ result = subprocess.run(gitdir_cmd, capture_output=True, text=True)
+ if result.returncode == 0:
+ repo_root = result.stdout.strip()
+ # Get the subdir relative to repo root
+ rel_subdir = os.path.relpath(bblayer, repo_root) if bblayer != repo_root else ''
+ # Get parent dir of repo as fetchdir
+ parent_fetchdir = os.path.dirname(repo_root)
+ # Now call get_fetch_layer to check/switch branch
+ # Use args.branch (the requested branch) not layerBranch.actual_branch (current branch)
+ _, name, _ = self.get_fetch_layer(parent_fetchdir,
+ layerBranch.layer.vcs_url,
+ rel_subdir,
+ not args.show_only,
+ args.branch,
+ args.shallow)
+ if not name:
+ # Error during branch check/switch
+ return 1
+ except subprocess.SubprocessError:
+ pass # Not a git repo, skip
continue
subdir, name, layerdir = self.get_fetch_layer(fetchdir,
For layers already in bblayers.conf (cooker layers), add logic to check and switch branches when --branch is specified. Previously, cooker layers were skipped entirely in the fetch loop, so branch checking never executed. The code finds each layer's git repository root, determines the subdirectory relative to the repo root, and calls get_fetch_layer() with the requested branch to perform validation and checkout if needed. This completes the fix started in previous commit, allowing users to use --branch to switch already-configured layers to different branches. [YOCTO #7852] Signed-off-by: Osama Abdelkader <osama.abdelkader@gmail.com> --- lib/bblayers/layerindex.py | 40 ++++++++++++++++++++++++++++-- 1 file changed, 38 insertions(+), 2 deletions(-)