Thanks, I was completely sure in my head I had fixed this, but either
I haven't, or it has been somehow lost.

Alex

On Tue, 17 Oct 2023 at 16:06, Jose Quaresma <[email protected]> wrote:
>
>
>
> Alexander Kanavin <[email protected]> escreveu no dia terça, 17/10/2023 
> à(s) 14:31:
>>
>> 'bitbake -S printdiff' is a useful diagnostic facility for finding out
>> why sstate is not being reused, but until now it had no tests that would
>> ensure it works. This commit adds three basic scenarios:
>>
>> 1. make a change in a really basic, common recipe that is at the very root
>> of dependency trees (quilt-native), and ensure that change is correctly 
>> discovered when
>> building an image.
>>
>> 2. make a change in gcc-source recipe, which is somewhat special
>> (operates in work-shared), and ensure that gcc-runtime builds track
>> that down as well.
>>
>> 3. make a change in base_do_configure() definition from base.bbclass,
>> which is not recipe-specific, but affects many basic recipes, and ensure that
>> is correctly reported as well.
>>
>> The test itself actually runs twice:
>> - first against a fully populated build directory, where
>> the printdiff code is guaranteed to find the correct previous
>> stamp that can be compared with in a predictable manner.
>>
>> - then in an empty build directory where the printdiff code
>> goes to look in the sstate cache, and so the existence of the
>> previous signature can be tested, but not the difference with it
>> (what the exact difference would be is unpredictable as the
>> sstate cache is indeed shared between many builds).
>>
>> Signed-off-by: Alexander Kanavin <[email protected]>
>> ---
>>  .../base-do-configure-modified.bbclass        |   3 +
>>  .../gcc-source/gcc-source_%.bbappend          |   2 +
>>  .../quilt-native/quilt-native_%.bbappend      |   2 +
>>  meta/lib/oeqa/selftest/cases/sstatetests.py   | 104 ++++++++++++++++++
>>  4 files changed, 111 insertions(+)
>>  create mode 100644 meta-selftest/classes/base-do-configure-modified.bbclass
>>  create mode 100644 
>> meta-selftest/recipes-test/gcc-source/gcc-source_%.bbappend
>>  create mode 100644 
>> meta-selftest/recipes-test/quilt-native/quilt-native_%.bbappend
>>
>> diff --git a/meta-selftest/classes/base-do-configure-modified.bbclass 
>> b/meta-selftest/classes/base-do-configure-modified.bbclass
>> new file mode 100644
>> index 00000000000..3f96827a428
>> --- /dev/null
>> +++ b/meta-selftest/classes/base-do-configure-modified.bbclass
>> @@ -0,0 +1,3 @@
>> +base_do_configure:append () {
>> +       echo "this changes base_do_configure() definiton"
>> +}
>> diff --git a/meta-selftest/recipes-test/gcc-source/gcc-source_%.bbappend 
>> b/meta-selftest/recipes-test/gcc-source/gcc-source_%.bbappend
>> new file mode 100644
>> index 00000000000..205720982cb
>> --- /dev/null
>> +++ b/meta-selftest/recipes-test/gcc-source/gcc-source_%.bbappend
>> @@ -0,0 +1,2 @@
>> +# This bbappend is used to alter the recipe using the test_recipe.inc file 
>> created by tests.
>> +include test_recipe.inc
>> diff --git a/meta-selftest/recipes-test/quilt-native/quilt-native_%.bbappend 
>> b/meta-selftest/recipes-test/quilt-native/quilt-native_%.bbappend
>> new file mode 100644
>> index 00000000000..205720982cb
>> --- /dev/null
>> +++ b/meta-selftest/recipes-test/quilt-native/quilt-native_%.bbappend
>> @@ -0,0 +1,2 @@
>> +# This bbappend is used to alter the recipe using the test_recipe.inc file 
>> created by tests.
>> +include test_recipe.inc
>> diff --git a/meta/lib/oeqa/selftest/cases/sstatetests.py 
>> b/meta/lib/oeqa/selftest/cases/sstatetests.py
>> index bdad9088d37..29e31f2ef9f 100644
>> --- a/meta/lib/oeqa/selftest/cases/sstatetests.py
>> +++ b/meta/lib/oeqa/selftest/cases/sstatetests.py
>> @@ -773,3 +773,107 @@ addtask tmptask2 before do_tmptask1
>>                  latestfiles = sorted(filedates.keys(), key=lambda f: 
>> filedates[f])[-2:]
>>                  bb.siggen.compare_sigfiles(latestfiles[-2], 
>> latestfiles[-1], recursecb)
>>                  self.assertEqual(recursecb_count,1)
>> +
>> +class SStatePrintdiff(SStateBase):
>> +    def run_test_printdiff_changerecipe(self, target, change_recipe, 
>> change_bbtask, change_content, expected_sametmp_output, 
>> expected_difftmp_output):
>> +        self.write_config("""
>> +TMPDIR = "${TOPDIR}/tmp-sstateprintdiff"
>> +""")
>> +        self.track_for_cleanup(self.topdir + "/tmp-sstateprintdiff")
>> +        bitbake(target)
>> +        bitbake("-S none {}".format(target))
>> +        bitbake(change_bbtask)
>> +        self.write_recipeinc(change_recipe, change_content)
>> +        result_sametmp = bitbake("-S printdiff {}".format(target))
>> +
>> +        self.write_config("""
>> +TMPDIR = "${TOPDIR}/tmp-sstateprintdiff-2"
>> +""")
>> +        self.track_for_cleanup(self.topdir + "/tmp-sstateprintdiff-2")
>> +        result_difftmp = bitbake("-S printdiff {}".format(target))
>> +
>> +        self.delete_recipeinc(change_recipe)
>> +        for item in expected_sametmp_output:
>> +            self.assertIn(item, result_sametmp.output)
>> +        for item in expected_difftmp_output:
>> +            self.assertIn(item, result_difftmp.output)
>> +
>> +    def run_test_printdiff_changeconfig(self, target, change_content, 
>> expected_sametmp_output, expected_difftmp_output):
>> +        self.write_config("""
>> +TMPDIR = "${TOPDIR}/tmp-sstateprintdiff"
>> +""")
>> +        self.track_for_cleanup(self.topdir + "/tmp-sstateprintdiff")
>> +        bitbake(target)
>> +        bitbake("-S none {}".format(target))
>> +        self.append_config(change_content)
>> +        result_sametmp = bitbake("-S printdiff {}".format(target))
>> +
>> +        self.write_config("""
>> +TMPDIR = "${TOPDIR}/tmp-sstateprintdiff-2"
>> +""")
>> +        self.append_config(change_content)
>> +        self.track_for_cleanup(self.topdir + "/tmp-sstateprintdiff-2")
>> +        result_difftmp = bitbake("-S printdiff {}".format(target))
>> +
>> +        for item in expected_sametmp_output:
>> +            self.assertIn(item, result_sametmp.output)
>> +        for item in expected_difftmp_output:
>> +            self.assertIn(item, result_difftmp.output)
>> +
>> +
>> +    # Check if printdiff walks the full dependency chain from the image 
>> target to where the change is in a specific recipe
>> +    def test_image_minimal_vs_quilt(self):
>> +        expected_output = ("Task quilt-native:do_install couldn't be used 
>> from the cache because:",
>> +"We need hash",
>> +"most recent matching task was")
>> +        expected_sametmp_output = expected_output + ("Variable do_install 
>> value changed",'+    echo "this changes the task signature"')
>> +        expected_difftmp_output = expected_output
>> +
>> +        self.run_test_printdiff_changerecipe("core-image-minimal", 
>> "quilt-native", "-c do_install quilt-native",
>> +"""
>> +do_install:append() {
>> +    echo "this changes the task signature"
>> +}
>> +""",
>> +expected_sametmp_output, expected_difftmp_output)
>> +
>> +    # Check if changes to gcc-source (which uses tmp/work-shared) are 
>> correctly discovered
>> +    def test_gcc_runtime_vs_gcc_source(self):
>> +        expected_output = ("Task gcc-source-13.2.0:do_preconfigure couldn't 
>> be used from the cache because:",
>
>
> We should avoid using the PV=13.2.0 explicitly imo otherwise it will need to 
> be updated with the recipe forever.
>
> The archiver selftest have a gcc-source-PV example
> https://git.openembedded.org/openembedded-core/tree/meta/lib/oeqa/selftest/cases/archiver.py#n141
>
>> +"We need hash",
>> +"most recent matching task was")
>> +        expected_sametmp_output = expected_output + ("Variable 
>> do_preconfigure value changed",'+    print("this changes the task 
>> signature")')
>> +        #FIXME: printdiff is supposed to find at least one preconfigure 
>> task signature in the sstate cache, but isn't able to
>> +        #expected_difftmp_output = expected_output
>> +        expected_difftmp_output = ()
>> +
>> +        self.run_test_printdiff_changerecipe("gcc-runtime", "gcc-source", 
>> "-c do_preconfigure gcc-source-13.2.0",
>
>
> Same here
>
> Jose
>
>>
>> +"""
>> +python do_preconfigure:append() {
>> +    print("this changes the task signature")
>> +}
>> +""",
>> +expected_sametmp_output, expected_difftmp_output)
>> +
>> +    # Check if changing a really base task definiton is reported against 
>> multiple core recipes using it
>> +    def test_image_minimal_vs_base_do_configure(self):
>> +        expected_output = ("Task zstd-native:do_configure couldn't be used 
>> from the cache because:",
>> +"Task texinfo-dummy-native:do_configure couldn't be used from the cache 
>> because:",
>> +"Task ldconfig-native:do_configure couldn't be used from the cache 
>> because:",
>> +"Task gettext-minimal-native:do_configure couldn't be used from the cache 
>> because:",
>> +"Task tzcode-native:do_configure couldn't be used from the cache because:",
>> +"Task makedevs-native:do_configure couldn't be used from the cache 
>> because:",
>> +"Task pigz-native:do_configure couldn't be used from the cache because:",
>> +"Task update-rc.d-native:do_configure couldn't be used from the cache 
>> because:",
>> +"Task unzip-native:do_configure couldn't be used from the cache because:",
>> +"Task gnu-config-native:do_configure couldn't be used from the cache 
>> because:",
>> +"We need hash",
>> +"most recent matching task was")
>> +        expected_sametmp_output = expected_output + ("Variable 
>> base_do_configure value changed",'+     echo "this changes 
>> base_do_configure() definiton"')
>> +        expected_difftmp_output = expected_output
>> +
>> +        self.run_test_printdiff_changeconfig("core-image-minimal",
>> +"""
>> +INHERIT += "base-do-configure-modified"
>> +""",
>> +expected_sametmp_output, expected_difftmp_output)
>> --
>> 2.39.2
>>
>>
>> 
>>
>
>
> --
> Best regards,
>
> José Quaresma
-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#189338): 
https://lists.openembedded.org/g/openembedded-core/message/189338
Mute This Topic: https://lists.openembedded.org/mt/102017475/21656
Group Owner: [email protected]
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub 
[[email protected]]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to