* [PATCH 1/2] devtool: standard: guess srcrev update mode for gitsm:// recipes too
@ 2026-07-23 6:02 Babanpreet Singh
2026-07-23 6:02 ` [PATCH 2/2] oeqa/selftest/devtool: cover srcrev update mode guessing for gitsm:// Babanpreet Singh
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: Babanpreet Singh @ 2026-07-23 6:02 UTC (permalink / raw)
To: openembedded-core
Cc: Alexander Kanavin, Chris Laplante, Peter Kjellerstedt,
Adrian Freihofer, Babanpreet Singh
'devtool update-recipe' and 'devtool finish' default to guessing the
recipe update mode: 'srcrev' when the source tree HEAD sits on the
upstream branch (the "checked out another upstream revision" workflow),
'patch' otherwise. The guesser matches SRC_URI entries against a
literal 'git://' prefix, so a gitsm:// recipe never has any git URIs
from its point of view and always falls into patch mode.
In that case there are no local commits to export either, so checking
out a different upstream revision and running update-recipe reports
"No patches or files need updating" and silently leaves the recipe's
SRCREV untouched, while the same operation on a git:// recipe updates
SRCREV. Forcing -m srcrev works, since _update_recipe_srcrev() is
scheme-agnostic; only the guess is broken.
Accept gitsm:// URIs the same way e7076f1742 ("devtool: gitsm://
should be handled same as git:// in upgrades") did for the upgrade
path, where the same omission was fixed; the guesser itself dates from
9b9733b7d7 (2015), before gitsm handling was a consideration.
Note this changes the guessed mode for existing gitsm:// recipes from
'patch' to 'srcrev' when HEAD is on the upstream branch — the behavior
git:// recipes have had since 2015. Trees carrying local commits still
guess 'patch', because their HEAD is not reachable from the upstream
branch.
AI-Generated: Uses Claude (claude-sonnet-5)
Signed-off-by: Babanpreet Singh <bbnpreetsingh@gmail.com>
---
scripts/lib/devtool/standard.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/scripts/lib/devtool/standard.py b/scripts/lib/devtool/standard.py
index b2b27c7ced..2dff62a7ca 100644
--- a/scripts/lib/devtool/standard.py
+++ b/scripts/lib/devtool/standard.py
@@ -1816,7 +1816,7 @@ def _guess_recipe_update_mode(srctree, rdata):
"""Guess the recipe update mode to use"""
import bb.process
src_uri = (rdata.getVar('SRC_URI') or '').split()
- git_uris = [uri for uri in src_uri if uri.startswith('git://')]
+ git_uris = [uri for uri in src_uri if uri.startswith('git://') or uri.startswith('gitsm://')]
if not git_uris:
return 'patch'
# Just use the first URI for now
--
2.43.0
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH 2/2] oeqa/selftest/devtool: cover srcrev update mode guessing for gitsm://
2026-07-23 6:02 [PATCH 1/2] devtool: standard: guess srcrev update mode for gitsm:// recipes too Babanpreet Singh
@ 2026-07-23 6:02 ` Babanpreet Singh
2026-07-23 13:27 ` [OE-core] [PATCH 1/2] devtool: standard: guess srcrev update mode for gitsm:// recipes too Richard Purdie
2026-07-23 15:07 ` Mathieu Dubois-Briand
2 siblings, 0 replies; 4+ messages in thread
From: Babanpreet Singh @ 2026-07-23 6:02 UTC (permalink / raw)
To: openembedded-core
Cc: Alexander Kanavin, Chris Laplante, Peter Kjellerstedt,
Adrian Freihofer, Babanpreet Singh
Add test_devtool_update_recipe_gitsm: devtool modify the
git-submodule-test recipe, move the source tree to the parent of the
pinned revision (an upstream commit, no local changes) while staying on
the devtool branch, run 'devtool update-recipe' in the default auto
mode, and assert the recipe's SRCREV is updated to the checked-out
revision.
Without the preceding fix the mode guesser cannot see gitsm:// URIs,
falls into patch mode, reports "No patches or files need updating" and
leaves the recipe untouched, and this test fails with:
AssertionError: Missing file changes: [(' M', '.*/git-submodule-test.bb$')]
No existing test exercises the auto->srcrev guess for any URI scheme:
the auto-mode arm of test_devtool_update_recipe_git covers the
local-commits->patch direction only.
AI-Generated: Uses Claude (claude-sonnet-5)
Signed-off-by: Babanpreet Singh <bbnpreetsingh@gmail.com>
---
meta/lib/oeqa/selftest/cases/devtool.py | 33 +++++++++++++++++++++++++
1 file changed, 33 insertions(+)
diff --git a/meta/lib/oeqa/selftest/cases/devtool.py b/meta/lib/oeqa/selftest/cases/devtool.py
index a10eb0c784..6df07f8c5e 100644
--- a/meta/lib/oeqa/selftest/cases/devtool.py
+++ b/meta/lib/oeqa/selftest/cases/devtool.py
@@ -1378,6 +1378,39 @@ class DevtoolUpdateTests(DevtoolBase):
('??', '%s/0002-Add-a-new-file.patch' % relpatchpath)]
self._check_repo_status(os.path.dirname(recipefile), expected_status)
+ def test_devtool_update_recipe_gitsm(self):
+ # Check that auto mode guesses srcrev update mode for a gitsm:// recipe
+ # when HEAD is on the upstream branch, same as it does for git://
+ testrecipe = 'git-submodule-test'
+ bb_vars = get_bb_vars(['FILE', 'SRC_URI', 'SRCREV'], testrecipe)
+ recipefile = bb_vars['FILE']
+ src_uri = bb_vars['SRC_URI']
+ self.assertIn('gitsm://', src_uri, 'This test expects the %s recipe to be a gitsm recipe' % testrecipe)
+ self._check_repo_status(os.path.dirname(recipefile), [])
+ # First, modify a recipe
+ tempdir = tempfile.mkdtemp(prefix='devtoolqa')
+ self.track_for_cleanup(tempdir)
+ self.track_for_cleanup(self.workspacedir)
+ self.add_command_to_tearDown('bitbake-layers remove-layer */workspace')
+ result = runCmd('devtool modify %s -x %s' % (testrecipe, tempdir))
+ # Check git repo
+ self._check_src_repo(tempdir)
+ # Move the source tree to the parent of the pinned revision, staying
+ # on the devtool branch: a revision reachable from the upstream branch
+ # with no local commits, i.e. the "check out another upstream revision
+ # to move the recipe" workflow the srcrev guess exists to detect
+ result = runCmd('git rev-parse HEAD~1', cwd=tempdir)
+ prevrev = result.output.strip()
+ runCmd('git reset --hard %s' % prevrev, cwd=tempdir)
+ self.add_command_to_tearDown('cd %s; git checkout %s' % (os.path.dirname(recipefile), os.path.basename(recipefile)))
+ result = runCmd('devtool update-recipe %s' % testrecipe)
+ expected_status = [(' M', '.*/%s$' % os.path.basename(recipefile))]
+ self._check_repo_status(os.path.dirname(recipefile), expected_status)
+ result = runCmd('git diff %s' % os.path.basename(recipefile), cwd=os.path.dirname(recipefile))
+ addlines = ['SRCREV = "%s"' % prevrev]
+ removelines = ['SRCREV = "%s"' % bb_vars['SRCREV']]
+ self._check_diff(result.output, addlines, removelines)
+
def test_devtool_update_recipe_append(self):
# Check preconditions
testrecipe = 'minicom'
--
2.43.0
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [OE-core] [PATCH 1/2] devtool: standard: guess srcrev update mode for gitsm:// recipes too
2026-07-23 6:02 [PATCH 1/2] devtool: standard: guess srcrev update mode for gitsm:// recipes too Babanpreet Singh
2026-07-23 6:02 ` [PATCH 2/2] oeqa/selftest/devtool: cover srcrev update mode guessing for gitsm:// Babanpreet Singh
@ 2026-07-23 13:27 ` Richard Purdie
2026-07-23 15:07 ` Mathieu Dubois-Briand
2 siblings, 0 replies; 4+ messages in thread
From: Richard Purdie @ 2026-07-23 13:27 UTC (permalink / raw)
To: bbnpreetsingh, openembedded-core
Cc: Alexander Kanavin, Chris Laplante, Peter Kjellerstedt,
Adrian Freihofer
On Thu, 2026-07-23 at 06:02 +0000, Baban via lists.openembedded.org wrote:
> 'devtool update-recipe' and 'devtool finish' default to guessing the
> recipe update mode: 'srcrev' when the source tree HEAD sits on the
> upstream branch (the "checked out another upstream revision" workflow),
> 'patch' otherwise. The guesser matches SRC_URI entries against a
> literal 'git://' prefix, so a gitsm:// recipe never has any git URIs
> from its point of view and always falls into patch mode.
>
> In that case there are no local commits to export either, so checking
> out a different upstream revision and running update-recipe reports
> "No patches or files need updating" and silently leaves the recipe's
> SRCREV untouched, while the same operation on a git:// recipe updates
> SRCREV. Forcing -m srcrev works, since _update_recipe_srcrev() is
> scheme-agnostic; only the guess is broken.
>
> Accept gitsm:// URIs the same way e7076f1742 ("devtool: gitsm://
> should be handled same as git:// in upgrades") did for the upgrade
> path, where the same omission was fixed; the guesser itself dates from
> 9b9733b7d7 (2015), before gitsm handling was a consideration.
>
> Note this changes the guessed mode for existing gitsm:// recipes from
> 'patch' to 'srcrev' when HEAD is on the upstream branch — the behavior
> git:// recipes have had since 2015. Trees carrying local commits still
> guess 'patch', because their HEAD is not reachable from the upstream
> branch.
>
> AI-Generated: Uses Claude (claude-sonnet-5)
> Signed-off-by: Babanpreet Singh <bbnpreetsingh@gmail.com>
> ---
> scripts/lib/devtool/standard.py | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/scripts/lib/devtool/standard.py b/scripts/lib/devtool/standard.py
> index b2b27c7ced..2dff62a7ca 100644
> --- a/scripts/lib/devtool/standard.py
> +++ b/scripts/lib/devtool/standard.py
> @@ -1816,7 +1816,7 @@ def _guess_recipe_update_mode(srctree, rdata):
> """Guess the recipe update mode to use"""
> import bb.process
> src_uri = (rdata.getVar('SRC_URI') or '').split()
> - git_uris = [uri for uri in src_uri if uri.startswith('git://')]
> + git_uris = [uri for uri in src_uri if uri.startswith('git://') or uri.startswith('gitsm://')]
There is a slightly neater python syntax for that:
git_uris = [uri for uri in src_uri if uri.startswith(('git://', 'gitsm://'))]
as startswith can take a tuple.
Cheers,
Richard
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [OE-core] [PATCH 1/2] devtool: standard: guess srcrev update mode for gitsm:// recipes too
2026-07-23 6:02 [PATCH 1/2] devtool: standard: guess srcrev update mode for gitsm:// recipes too Babanpreet Singh
2026-07-23 6:02 ` [PATCH 2/2] oeqa/selftest/devtool: cover srcrev update mode guessing for gitsm:// Babanpreet Singh
2026-07-23 13:27 ` [OE-core] [PATCH 1/2] devtool: standard: guess srcrev update mode for gitsm:// recipes too Richard Purdie
@ 2026-07-23 15:07 ` Mathieu Dubois-Briand
2 siblings, 0 replies; 4+ messages in thread
From: Mathieu Dubois-Briand @ 2026-07-23 15:07 UTC (permalink / raw)
To: bbnpreetsingh, openembedded-core
Cc: Alexander Kanavin, Chris Laplante, Peter Kjellerstedt,
Adrian Freihofer
On Thu Jul 23, 2026 at 8:02 AM CEST, Baban via lists.openembedded.org wrote:
> 'devtool update-recipe' and 'devtool finish' default to guessing the
> recipe update mode: 'srcrev' when the source tree HEAD sits on the
> upstream branch (the "checked out another upstream revision" workflow),
> 'patch' otherwise. The guesser matches SRC_URI entries against a
> literal 'git://' prefix, so a gitsm:// recipe never has any git URIs
> from its point of view and always falls into patch mode.
>
> In that case there are no local commits to export either, so checking
> out a different upstream revision and running update-recipe reports
> "No patches or files need updating" and silently leaves the recipe's
> SRCREV untouched, while the same operation on a git:// recipe updates
> SRCREV. Forcing -m srcrev works, since _update_recipe_srcrev() is
> scheme-agnostic; only the guess is broken.
>
> Accept gitsm:// URIs the same way e7076f1742 ("devtool: gitsm://
> should be handled same as git:// in upgrades") did for the upgrade
> path, where the same omission was fixed; the guesser itself dates from
> 9b9733b7d7 (2015), before gitsm handling was a consideration.
>
> Note this changes the guessed mode for existing gitsm:// recipes from
> 'patch' to 'srcrev' when HEAD is on the upstream branch — the behavior
> git:// recipes have had since 2015. Trees carrying local commits still
> guess 'patch', because their HEAD is not reachable from the upstream
> branch.
>
> AI-Generated: Uses Claude (claude-sonnet-5)
> Signed-off-by: Babanpreet Singh <bbnpreetsingh@gmail.com>
> ---
Hi Babanpreet,
Thanks for your patch.
It looks like this is breaking some selftests:
2026-07-23 11:11:54,785 - oe-selftest - INFO - devtool.DevtoolUpdateTests.test_devtool_git_submodules (subunit.RemotedTestCase)
2026-07-23 11:11:54,786 - oe-selftest - INFO - ... FAIL
...
2026-07-23 11:11:54,786 - oe-selftest - INFO - testtools.testresult.real._StringException: Traceback (most recent call last):
File "/srv/pokybuild/yocto-worker/oe-selftest-debian/build/layers/openembedded-core/meta/lib/oeqa/core/decorator/__init__.py", line 35, in wrapped_f
return func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "/srv/pokybuild/yocto-worker/oe-selftest-debian/build/layers/openembedded-core/meta/lib/oeqa/selftest/cases/devtool.py", line 1960, in test_devtool_git_submodules
self._check_repo_status(recipedir, expected_status)
File "/srv/pokybuild/yocto-worker/oe-selftest-debian/build/layers/openembedded-core/meta/lib/oeqa/selftest/cases/devtool.py", line 140, in _check_repo_status
self.fail('Missing file changes: %s' % expected_status)
File "/usr/lib/python3.11/unittest/case.py", line 703, in fail
raise self.failureException(msg)
AssertionError: Missing file changes: [(' M', '.*/vulkan-samples_git.bb$'), ('??', '.*/vulkan/vulkan-samples/$')]
...
2026-07-23 11:53:42,632 - oe-selftest - INFO - devtool.DevtoolUpgradeTests.test_devtool_finish_update_patch (subunit.RemotedTestCase)
2026-07-23 11:53:42,632 - oe-selftest - INFO - ... FAIL
...
2026-07-23 12:43:54,062 - oe-selftest - INFO - devtool.DevtoolModifyTests.test_devtool_modify_nested_gitsm (subunit.RemotedTestCase)
2026-07-23 12:43:54,062 - oe-selftest - INFO - ... FAIL
https://autobuilder.yoctoproject.org/valkyrie/#/builders/35/builds/4355
https://autobuilder.yoctoproject.org/valkyrie/#/builders/35/builds/4355
Can you have a look at the issue?
Thanks,
Mathieu
--
Mathieu Dubois-Briand, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2026-07-23 15:07 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-23 6:02 [PATCH 1/2] devtool: standard: guess srcrev update mode for gitsm:// recipes too Babanpreet Singh
2026-07-23 6:02 ` [PATCH 2/2] oeqa/selftest/devtool: cover srcrev update mode guessing for gitsm:// Babanpreet Singh
2026-07-23 13:27 ` [OE-core] [PATCH 1/2] devtool: standard: guess srcrev update mode for gitsm:// recipes too Richard Purdie
2026-07-23 15:07 ` Mathieu Dubois-Briand
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.