@@ -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'
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(+)