diff mbox series

[v2,1/1] classes: Print bitbake branch and revision

Message ID ad2b2df4041f0c721d1a82de0fe759d896c6bfb6.1726059965.git.liezhi.yang@windriver.com
State New
Headers show
Series [v2,1/1] classes: Print bitbake branch and revision | expand

Commit Message

Robert Yang Sept. 11, 2024, 1:13 p.m. UTC
From: Robert Yang <liezhi.yang@windriver.com>

There is no bitbake revision when it is in a separate repo, then we have no way
to know which version of bitbake is used from the log, this patch always prints
it.

* console-latest.log
bitbake              = "master:165368bad152a14b32b5216b938aa4b915d72a70"
meta
meta-poky
meta-yocto-bsp       = "master:165368bad152a14b32b5216b938aa4b915d72a70"

* buildhistory/metadata-revs
bitbake           = master:165368bad152a14b32b5216b938aa4b915d72a70 -- modified
[snip]

* buildhistory/metadata-revs
-----------------------
Build Configuration:  |
-----------------------
DISTRO = poky
DISTRO_VERSION = 5.0+snapshot-165368bad152a14b32b5216b938aa4b915d72a70
-----------------------
Bitbake Revision:      |
-----------------------
bitbake           = master:165368bad152a14b32b5216b938aa4b915d72a70 -- modified
-----------------------
Layer Revisions:      |
-----------------------
[snip]

Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
---
 meta/classes-global/base.bbclass     | 10 +++++++---
 meta/classes/buildhistory.bbclass    |  5 +++--
 meta/classes/image-buildinfo.bbclass | 13 +++++++++++--
 meta/lib/oe/buildcfg.py              | 13 +++++++++++++
 4 files changed, 34 insertions(+), 7 deletions(-)

Comments

Alexander Kanavin Sept. 11, 2024, 2:14 p.m. UTC | #1
Can you please also add a function that tells if bitbake is in a
separate repo, or bundled with poky? This would help various tooling
that is being developed for setting up layers and builds, or creating
configurations for those tasks out of pre-existing yocto setups.

Alex


On Wed, 11 Sept 2024 at 15:13, Robert Yang via lists.openembedded.org
<liezhi.yang=windriver.com@lists.openembedded.org> wrote:
>
> From: Robert Yang <liezhi.yang@windriver.com>
>
> There is no bitbake revision when it is in a separate repo, then we have no way
> to know which version of bitbake is used from the log, this patch always prints
> it.
>
> * console-latest.log
> bitbake              = "master:165368bad152a14b32b5216b938aa4b915d72a70"
> meta
> meta-poky
> meta-yocto-bsp       = "master:165368bad152a14b32b5216b938aa4b915d72a70"
>
> * buildhistory/metadata-revs
> bitbake           = master:165368bad152a14b32b5216b938aa4b915d72a70 -- modified
> [snip]
>
> * buildhistory/metadata-revs
> -----------------------
> Build Configuration:  |
> -----------------------
> DISTRO = poky
> DISTRO_VERSION = 5.0+snapshot-165368bad152a14b32b5216b938aa4b915d72a70
> -----------------------
> Bitbake Revision:      |
> -----------------------
> bitbake           = master:165368bad152a14b32b5216b938aa4b915d72a70 -- modified
> -----------------------
> Layer Revisions:      |
> -----------------------
> [snip]
>
> Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
> ---
>  meta/classes-global/base.bbclass     | 10 +++++++---
>  meta/classes/buildhistory.bbclass    |  5 +++--
>  meta/classes/image-buildinfo.bbclass | 13 +++++++++++--
>  meta/lib/oe/buildcfg.py              | 13 +++++++++++++
>  4 files changed, 34 insertions(+), 7 deletions(-)
>
> diff --git a/meta/classes-global/base.bbclass b/meta/classes-global/base.bbclass
> index b6940bbb6f..85c7cb8c24 100644
> --- a/meta/classes-global/base.bbclass
> +++ b/meta/classes-global/base.bbclass
> @@ -226,9 +226,13 @@ do_unpack[postfuncs] += "create_source_date_epoch_stamp"
>  def get_source_date_epoch_value(d):
>      return oe.reproducible.epochfile_read(d.getVar('SDE_FILE'), d)
>
> +def get_bitbake_branch_rev(d):
> +    revisions = oe.buildcfg.get_bitbake_revision()
> +    return oe.buildcfg.get_branch_rev3(revisions)
> +
>  def get_layers_branch_rev(d):
>      revisions = oe.buildcfg.get_layer_revisions(d)
> -    layers_branch_rev = ["%-20s = \"%s:%s\"" % (r[1], r[2], r[3]) for r in revisions]
> +    layers_branch_rev = oe.buildcfg.get_branch_rev3(revisions)
>      i = len(layers_branch_rev)-1
>      p1 = layers_branch_rev[i].find("=")
>      s1 = layers_branch_rev[i][p1:]
> @@ -241,11 +245,11 @@ def get_layers_branch_rev(d):
>          else:
>              i -= 1
>              p1 = layers_branch_rev[i].find("=")
> -            s1= layers_branch_rev[i][p1:]
> +            s1 = layers_branch_rev[i][p1:]
>      return layers_branch_rev
>
>
> -BUILDCFG_FUNCS ??= "buildcfg_vars get_layers_branch_rev buildcfg_neededvars"
> +BUILDCFG_FUNCS ??= "buildcfg_vars get_bitbake_branch_rev get_layers_branch_rev buildcfg_neededvars"
>  BUILDCFG_FUNCS[type] = "list"
>
>  def buildcfg_vars(d):
> diff --git a/meta/classes/buildhistory.bbclass b/meta/classes/buildhistory.bbclass
> index ce3abaa69d..50516e6533 100644
> --- a/meta/classes/buildhistory.bbclass
> +++ b/meta/classes/buildhistory.bbclass
> @@ -764,8 +764,9 @@ def buildhistory_get_build_id(d):
>
>  def buildhistory_get_metadata_revs(d):
>      # We want an easily machine-readable format here
> -    revisions = oe.buildcfg.get_layer_revisions(d)
> -    medadata_revs = ["%-17s = %s:%s%s" % (r[1], r[2], r[3], r[4]) for r in revisions]
> +    revisions = oe.buildcfg.get_bitbake_revision()
> +    revisions.extend(oe.buildcfg.get_layer_revisions(d))
> +    medadata_revs = oe.buildcfg.get_branch_rev4(revisions)
>      return '\n'.join(medadata_revs)
>
>  def outputvars(vars, listvars, d):
> diff --git a/meta/classes/image-buildinfo.bbclass b/meta/classes/image-buildinfo.bbclass
> index b83ce650ad..7b5f84854c 100644
> --- a/meta/classes/image-buildinfo.bbclass
> +++ b/meta/classes/image-buildinfo.bbclass
> @@ -27,11 +27,14 @@ def image_buildinfo_outputvars(vars, d):
>          ret += "%s = %s\n" % (var, value)
>      return ret.rstrip('\n')
>
> +def get_bitbake_rev(d):
> +    revision = oe.buildcfg.get_bitbake_revision()
> +    return '\n'.join(oe.buildcfg.get_branch_rev4(revision))
> +
>  # Returns layer revisions along with their respective status
>  def get_layer_revs(d):
>      revisions = oe.buildcfg.get_layer_revisions(d)
> -    medadata_revs = ["%-17s = %s:%s%s" % (r[1], r[2], r[3], r[4]) for r in revisions]
> -    return '\n'.join(medadata_revs)
> +    return '\n'.join(oe.buildcfg.get_branch_rev4(revisions))
>
>  def buildinfo_target(d):
>          # Get context
> @@ -55,6 +58,12 @@ Build Configuration:  |
>              buildinfo_target(d),
>              '''
>  -----------------------
> +Bitbake Revision:      |
> +-----------------------
> +''',
> +            get_bitbake_rev(d),
> +            '''
> +-----------------------
>  Layer Revisions:      |
>  -----------------------
>  ''',
> diff --git a/meta/lib/oe/buildcfg.py b/meta/lib/oe/buildcfg.py
> index 4b22f18f36..dab4aa7831 100644
> --- a/meta/lib/oe/buildcfg.py
> +++ b/meta/lib/oe/buildcfg.py
> @@ -71,6 +71,19 @@ def is_layer_modified(path):
>          # output and a 129 return code when a layer isn't a git repo at all.
>          return " -- modified"
>
> +def get_branch_rev3(revisions):
> +    # Return 3 items for each revision
> +    return ["%-20s = \"%s:%s\"" % (r[1], r[2], r[3]) for r in revisions]
> +
> +def get_branch_rev4(revisions):
> +    # Return 4 items for each revision
> +    return ["%-17s = %s:%s%s" % (r[1], r[2], r[3], r[4]) for r in revisions]
> +
> +def get_bitbake_revision():
> +    bbdir = bb.__file__.rsplit('/', 3)[0]
> +    return [(bbdir, os.path.basename(bbdir), get_metadata_git_branch(bbdir).strip(), \
> +            get_metadata_git_revision(bbdir), is_layer_modified(bbdir))]
> +
>  def get_layer_revisions(d):
>      layers = (d.getVar("BBLAYERS") or "").split()
>      revisions = []
> --
> 2.44.1
>
>
> -=-=-=-=-=-=-=-=-=-=-=-
> Links: You receive all messages sent to this group.
> View/Reply Online (#204386): https://lists.openembedded.org/g/openembedded-core/message/204386
> Mute This Topic: https://lists.openembedded.org/mt/108393122/1686489
> Group Owner: openembedded-core+owner@lists.openembedded.org
> Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [alex.kanavin@gmail.com]
> -=-=-=-=-=-=-=-=-=-=-=-
>
Robert Yang Sept. 11, 2024, 2:30 p.m. UTC | #2
On 9/11/24 22:14, Alexander Kanavin wrote:
> Can you please also add a function that tells if bitbake is in a
> separate repo, or bundled with poky? This would help various tooling
> that is being developed for setting up layers and builds, or creating
> configurations for those tasks out of pre-existing yocto setups.

Yes, I can find the code with "git reflog", V3 is coming:

+def is_bitbake_in_separate_repo(bitbake_dir):
+    """
+    Check whether bitbake is in a separate git repo
+    """
+    bitbake_git_dir = os.path.join(bitbake_dir, '.git')
+    if os.path.exists(bitbake_git_dir):
+        return True
+    else:
+        return False


// Robert

> 
> Alex
> 
> 
> On Wed, 11 Sept 2024 at 15:13, Robert Yang via lists.openembedded.org
> <liezhi.yang=windriver.com@lists.openembedded.org> wrote:
>>
>> From: Robert Yang <liezhi.yang@windriver.com>
>>
>> There is no bitbake revision when it is in a separate repo, then we have no way
>> to know which version of bitbake is used from the log, this patch always prints
>> it.
>>
>> * console-latest.log
>> bitbake              = "master:165368bad152a14b32b5216b938aa4b915d72a70"
>> meta
>> meta-poky
>> meta-yocto-bsp       = "master:165368bad152a14b32b5216b938aa4b915d72a70"
>>
>> * buildhistory/metadata-revs
>> bitbake           = master:165368bad152a14b32b5216b938aa4b915d72a70 -- modified
>> [snip]
>>
>> * buildhistory/metadata-revs
>> -----------------------
>> Build Configuration:  |
>> -----------------------
>> DISTRO = poky
>> DISTRO_VERSION = 5.0+snapshot-165368bad152a14b32b5216b938aa4b915d72a70
>> -----------------------
>> Bitbake Revision:      |
>> -----------------------
>> bitbake           = master:165368bad152a14b32b5216b938aa4b915d72a70 -- modified
>> -----------------------
>> Layer Revisions:      |
>> -----------------------
>> [snip]
>>
>> Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
>> ---
>>   meta/classes-global/base.bbclass     | 10 +++++++---
>>   meta/classes/buildhistory.bbclass    |  5 +++--
>>   meta/classes/image-buildinfo.bbclass | 13 +++++++++++--
>>   meta/lib/oe/buildcfg.py              | 13 +++++++++++++
>>   4 files changed, 34 insertions(+), 7 deletions(-)
>>
>> diff --git a/meta/classes-global/base.bbclass b/meta/classes-global/base.bbclass
>> index b6940bbb6f..85c7cb8c24 100644
>> --- a/meta/classes-global/base.bbclass
>> +++ b/meta/classes-global/base.bbclass
>> @@ -226,9 +226,13 @@ do_unpack[postfuncs] += "create_source_date_epoch_stamp"
>>   def get_source_date_epoch_value(d):
>>       return oe.reproducible.epochfile_read(d.getVar('SDE_FILE'), d)
>>
>> +def get_bitbake_branch_rev(d):
>> +    revisions = oe.buildcfg.get_bitbake_revision()
>> +    return oe.buildcfg.get_branch_rev3(revisions)
>> +
>>   def get_layers_branch_rev(d):
>>       revisions = oe.buildcfg.get_layer_revisions(d)
>> -    layers_branch_rev = ["%-20s = \"%s:%s\"" % (r[1], r[2], r[3]) for r in revisions]
>> +    layers_branch_rev = oe.buildcfg.get_branch_rev3(revisions)
>>       i = len(layers_branch_rev)-1
>>       p1 = layers_branch_rev[i].find("=")
>>       s1 = layers_branch_rev[i][p1:]
>> @@ -241,11 +245,11 @@ def get_layers_branch_rev(d):
>>           else:
>>               i -= 1
>>               p1 = layers_branch_rev[i].find("=")
>> -            s1= layers_branch_rev[i][p1:]
>> +            s1 = layers_branch_rev[i][p1:]
>>       return layers_branch_rev
>>
>>
>> -BUILDCFG_FUNCS ??= "buildcfg_vars get_layers_branch_rev buildcfg_neededvars"
>> +BUILDCFG_FUNCS ??= "buildcfg_vars get_bitbake_branch_rev get_layers_branch_rev buildcfg_neededvars"
>>   BUILDCFG_FUNCS[type] = "list"
>>
>>   def buildcfg_vars(d):
>> diff --git a/meta/classes/buildhistory.bbclass b/meta/classes/buildhistory.bbclass
>> index ce3abaa69d..50516e6533 100644
>> --- a/meta/classes/buildhistory.bbclass
>> +++ b/meta/classes/buildhistory.bbclass
>> @@ -764,8 +764,9 @@ def buildhistory_get_build_id(d):
>>
>>   def buildhistory_get_metadata_revs(d):
>>       # We want an easily machine-readable format here
>> -    revisions = oe.buildcfg.get_layer_revisions(d)
>> -    medadata_revs = ["%-17s = %s:%s%s" % (r[1], r[2], r[3], r[4]) for r in revisions]
>> +    revisions = oe.buildcfg.get_bitbake_revision()
>> +    revisions.extend(oe.buildcfg.get_layer_revisions(d))
>> +    medadata_revs = oe.buildcfg.get_branch_rev4(revisions)
>>       return '\n'.join(medadata_revs)
>>
>>   def outputvars(vars, listvars, d):
>> diff --git a/meta/classes/image-buildinfo.bbclass b/meta/classes/image-buildinfo.bbclass
>> index b83ce650ad..7b5f84854c 100644
>> --- a/meta/classes/image-buildinfo.bbclass
>> +++ b/meta/classes/image-buildinfo.bbclass
>> @@ -27,11 +27,14 @@ def image_buildinfo_outputvars(vars, d):
>>           ret += "%s = %s\n" % (var, value)
>>       return ret.rstrip('\n')
>>
>> +def get_bitbake_rev(d):
>> +    revision = oe.buildcfg.get_bitbake_revision()
>> +    return '\n'.join(oe.buildcfg.get_branch_rev4(revision))
>> +
>>   # Returns layer revisions along with their respective status
>>   def get_layer_revs(d):
>>       revisions = oe.buildcfg.get_layer_revisions(d)
>> -    medadata_revs = ["%-17s = %s:%s%s" % (r[1], r[2], r[3], r[4]) for r in revisions]
>> -    return '\n'.join(medadata_revs)
>> +    return '\n'.join(oe.buildcfg.get_branch_rev4(revisions))
>>
>>   def buildinfo_target(d):
>>           # Get context
>> @@ -55,6 +58,12 @@ Build Configuration:  |
>>               buildinfo_target(d),
>>               '''
>>   -----------------------
>> +Bitbake Revision:      |
>> +-----------------------
>> +''',
>> +            get_bitbake_rev(d),
>> +            '''
>> +-----------------------
>>   Layer Revisions:      |
>>   -----------------------
>>   ''',
>> diff --git a/meta/lib/oe/buildcfg.py b/meta/lib/oe/buildcfg.py
>> index 4b22f18f36..dab4aa7831 100644
>> --- a/meta/lib/oe/buildcfg.py
>> +++ b/meta/lib/oe/buildcfg.py
>> @@ -71,6 +71,19 @@ def is_layer_modified(path):
>>           # output and a 129 return code when a layer isn't a git repo at all.
>>           return " -- modified"
>>
>> +def get_branch_rev3(revisions):
>> +    # Return 3 items for each revision
>> +    return ["%-20s = \"%s:%s\"" % (r[1], r[2], r[3]) for r in revisions]
>> +
>> +def get_branch_rev4(revisions):
>> +    # Return 4 items for each revision
>> +    return ["%-17s = %s:%s%s" % (r[1], r[2], r[3], r[4]) for r in revisions]
>> +
>> +def get_bitbake_revision():
>> +    bbdir = bb.__file__.rsplit('/', 3)[0]
>> +    return [(bbdir, os.path.basename(bbdir), get_metadata_git_branch(bbdir).strip(), \
>> +            get_metadata_git_revision(bbdir), is_layer_modified(bbdir))]
>> +
>>   def get_layer_revisions(d):
>>       layers = (d.getVar("BBLAYERS") or "").split()
>>       revisions = []
>> --
>> 2.44.1
>>
>>
>>
>>
>>
>>
>> -=-=-=-=-=-=-=-=-=-=-=-
>> Links: You receive all messages sent to this group.
>> View/Reply Online (#204387): https://lists.openembedded.org/g/openembedded-core/message/204387
>> Mute This Topic: https://lists.openembedded.org/mt/108393122/7304958
>> Group Owner: openembedded-core+owner@lists.openembedded.org
>> Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [liezhi.yang@eng.windriver.com]
>> -=-=-=-=-=-=-=-=-=-=-=-
>>
Alexander Kanavin Sept. 11, 2024, 2:37 p.m. UTC | #3
On Wed, 11 Sept 2024 at 16:31, Robert Yang <liezhi.yang@windriver.com> wrote:
> Yes, I can find the code with "git reflog", V3 is coming:

Thanks, v3 lgtm.

Alex
diff mbox series

Patch

diff --git a/meta/classes-global/base.bbclass b/meta/classes-global/base.bbclass
index b6940bbb6f..85c7cb8c24 100644
--- a/meta/classes-global/base.bbclass
+++ b/meta/classes-global/base.bbclass
@@ -226,9 +226,13 @@  do_unpack[postfuncs] += "create_source_date_epoch_stamp"
 def get_source_date_epoch_value(d):
     return oe.reproducible.epochfile_read(d.getVar('SDE_FILE'), d)
 
+def get_bitbake_branch_rev(d):
+    revisions = oe.buildcfg.get_bitbake_revision()
+    return oe.buildcfg.get_branch_rev3(revisions)
+
 def get_layers_branch_rev(d):
     revisions = oe.buildcfg.get_layer_revisions(d)
-    layers_branch_rev = ["%-20s = \"%s:%s\"" % (r[1], r[2], r[3]) for r in revisions]
+    layers_branch_rev = oe.buildcfg.get_branch_rev3(revisions)
     i = len(layers_branch_rev)-1
     p1 = layers_branch_rev[i].find("=")
     s1 = layers_branch_rev[i][p1:]
@@ -241,11 +245,11 @@  def get_layers_branch_rev(d):
         else:
             i -= 1
             p1 = layers_branch_rev[i].find("=")
-            s1= layers_branch_rev[i][p1:]
+            s1 = layers_branch_rev[i][p1:]
     return layers_branch_rev
 
 
-BUILDCFG_FUNCS ??= "buildcfg_vars get_layers_branch_rev buildcfg_neededvars"
+BUILDCFG_FUNCS ??= "buildcfg_vars get_bitbake_branch_rev get_layers_branch_rev buildcfg_neededvars"
 BUILDCFG_FUNCS[type] = "list"
 
 def buildcfg_vars(d):
diff --git a/meta/classes/buildhistory.bbclass b/meta/classes/buildhistory.bbclass
index ce3abaa69d..50516e6533 100644
--- a/meta/classes/buildhistory.bbclass
+++ b/meta/classes/buildhistory.bbclass
@@ -764,8 +764,9 @@  def buildhistory_get_build_id(d):
 
 def buildhistory_get_metadata_revs(d):
     # We want an easily machine-readable format here
-    revisions = oe.buildcfg.get_layer_revisions(d)
-    medadata_revs = ["%-17s = %s:%s%s" % (r[1], r[2], r[3], r[4]) for r in revisions]
+    revisions = oe.buildcfg.get_bitbake_revision()
+    revisions.extend(oe.buildcfg.get_layer_revisions(d))
+    medadata_revs = oe.buildcfg.get_branch_rev4(revisions)
     return '\n'.join(medadata_revs)
 
 def outputvars(vars, listvars, d):
diff --git a/meta/classes/image-buildinfo.bbclass b/meta/classes/image-buildinfo.bbclass
index b83ce650ad..7b5f84854c 100644
--- a/meta/classes/image-buildinfo.bbclass
+++ b/meta/classes/image-buildinfo.bbclass
@@ -27,11 +27,14 @@  def image_buildinfo_outputvars(vars, d):
         ret += "%s = %s\n" % (var, value)
     return ret.rstrip('\n')
 
+def get_bitbake_rev(d):
+    revision = oe.buildcfg.get_bitbake_revision()
+    return '\n'.join(oe.buildcfg.get_branch_rev4(revision))
+
 # Returns layer revisions along with their respective status
 def get_layer_revs(d):
     revisions = oe.buildcfg.get_layer_revisions(d)
-    medadata_revs = ["%-17s = %s:%s%s" % (r[1], r[2], r[3], r[4]) for r in revisions]
-    return '\n'.join(medadata_revs)
+    return '\n'.join(oe.buildcfg.get_branch_rev4(revisions))
 
 def buildinfo_target(d):
         # Get context
@@ -55,6 +58,12 @@  Build Configuration:  |
             buildinfo_target(d),
             '''
 -----------------------
+Bitbake Revision:      |
+-----------------------
+''',
+            get_bitbake_rev(d),
+            '''
+-----------------------
 Layer Revisions:      |
 -----------------------
 ''',
diff --git a/meta/lib/oe/buildcfg.py b/meta/lib/oe/buildcfg.py
index 4b22f18f36..dab4aa7831 100644
--- a/meta/lib/oe/buildcfg.py
+++ b/meta/lib/oe/buildcfg.py
@@ -71,6 +71,19 @@  def is_layer_modified(path):
         # output and a 129 return code when a layer isn't a git repo at all.
         return " -- modified"
 
+def get_branch_rev3(revisions):
+    # Return 3 items for each revision
+    return ["%-20s = \"%s:%s\"" % (r[1], r[2], r[3]) for r in revisions]
+
+def get_branch_rev4(revisions):
+    # Return 4 items for each revision
+    return ["%-17s = %s:%s%s" % (r[1], r[2], r[3], r[4]) for r in revisions]
+
+def get_bitbake_revision():
+    bbdir = bb.__file__.rsplit('/', 3)[0]
+    return [(bbdir, os.path.basename(bbdir), get_metadata_git_branch(bbdir).strip(), \
+            get_metadata_git_revision(bbdir), is_layer_modified(bbdir))]
+
 def get_layer_revisions(d):
     layers = (d.getVar("BBLAYERS") or "").split()
     revisions = []