diff mbox series

[v2,1/3] bitbake-setup: add inline URI

Message ID 20251215103256.902711-1-corentin.guillevic@smile.fr
State New
Headers show
Series [v2,1/3] bitbake-setup: add inline URI | expand

Commit Message

Corentin Guillevic Dec. 15, 2025, 10:32 a.m. UTC
Most of the time, when we describe a remote, a bitbake-setup source looks like this:

"bitbake": {
    "git-remote": {
        "remotes": {
            "origin": {
                "uri": "https://git.openembedded.org/bitbake"
            }
        },
        ...
    }
}

i.e. an URI with the common name 'origin'. Alternatively, we could simplify this, by
using a shorter structure with the property 'uri' only:

"bitbake": {
    "git-remote": {
        "uri": "https://git.openembedded.org/bitbake",
        ...
    }
}

These properties can be used together.

Signed-off-by: Corentin Guillevic <corentin.guillevic@smile.fr>
---

Changes in v2:
- The keys are complementary, rather than mutually exclusive
- Updated configurations in default-registry/configurations/

 bin/bitbake-setup | 33 +++++++++++++++++++++++++++++++--
 1 file changed, 31 insertions(+), 2 deletions(-)

Comments

Alexander Kanavin Dec. 15, 2025, 11:01 a.m. UTC | #1
On Mon, 15 Dec 2025 at 11:33, Corentin Guillevic via
lists.openembedded.org
<corentin.guillevic=smile.fr@lists.openembedded.org> wrote:
> +        if 'remotes' in r_remote:
> +            if not 'bitbake-setup-uri' in r_remote['remotes']:
> +                r_name = 'bitbake-setup-uri'
> +            else:
> +                idx = 1
> +                while 'bitbake-setup-uri_{}'.format(idx) in r_remote['remotes']:
> +                    idx += 1
> +                r_name = 'bitbake-setup-uri_{}'.format(idx)
> +        else:
> +            r_name = 'bitbake-setup-uri'
> +
> +        remotes.update({r_name: {'uri': r_remote['uri']}})

Thanks for continuing to work on this.

I think we can avoid adding the above code, see below.

> -        remotes = r_remote['remotes']
> +
> +        remotes = _get_remotes(r_remote)
>
>          for remote in remotes:
>              prot,host,path,user,pswd,params = bb.fetch.decodeurl(remotes[remote]["uri"])

The names of the remotes are not actually used anywhere for anything.
So the _get_remotes() can return a flat list of URIs instead, and then
it doesn't have to do complicated name calculations like implemented
above. Then this loop can iterate directly on URIs in the list.

Alex
diff mbox series

Patch

diff --git a/bin/bitbake-setup b/bin/bitbake-setup
index b1d751899..c97e63479 100755
--- a/bin/bitbake-setup
+++ b/bin/bitbake-setup
@@ -89,6 +89,33 @@  def _write_layer_list(dest, repodirs):
     with open(layers_f, 'w') as f:
         json.dump({"version":"1.0","layers":layers}, f, sort_keys=True, indent=4)
 
+def _get_remotes(r_remote):
+    remotes = {}
+
+    if not 'remotes' in r_remote and not 'uri' in r_remote:
+        raise Exception("Expected key(s): 'remotes', 'uri'")
+
+    if 'remotes' in r_remote:
+        remotes = r_remote['remotes'].copy()
+
+    if 'uri' in r_remote:
+        r_name = ''
+
+        if 'remotes' in r_remote:
+            if not 'bitbake-setup-uri' in r_remote['remotes']:
+                r_name = 'bitbake-setup-uri'
+            else:
+                idx = 1
+                while 'bitbake-setup-uri_{}'.format(idx) in r_remote['remotes']:
+                    idx += 1
+                r_name = 'bitbake-setup-uri_{}'.format(idx)
+        else:
+            r_name = 'bitbake-setup-uri'
+
+        remotes.update({r_name: {'uri': r_remote['uri']}})
+
+    return remotes
+
 def checkout_layers(layers, layerdir, d):
     layers_fixed_revisions = copy.deepcopy(layers)
     repodirs = []
@@ -102,7 +129,8 @@  def checkout_layers(layers, layerdir, d):
         r_remote = r_data['git-remote']
         rev = r_remote['rev']
         branch = r_remote.get('branch', None)
-        remotes = r_remote['remotes']
+
+        remotes = _get_remotes(r_remote)
 
         for remote in remotes:
             prot,host,path,user,pswd,params = bb.fetch.decodeurl(remotes[remote]["uri"])
@@ -571,7 +599,8 @@  def are_layers_changed(layers, layerdir, d):
         r_remote = r_data['git-remote']
         rev = r_remote['rev']
         branch = r_remote.get('branch', None)
-        remotes = r_remote['remotes']
+
+        remotes = _get_remotes(r_remote)
 
         for remote in remotes:
             type,host,path,user,pswd,params = bb.fetch.decodeurl(remotes[remote]["uri"])