mirror of
https://git.yoctoproject.org/poky
synced 2026-02-06 08:48:45 +01:00
We've had versioned dependency support in LAYERDEPENDS for quite a long time, but I can say with pretty good certainty that almost nobody has used it up to now because it was too strict - the specified version had to exactly match the version in your configuration or you would get an error; there was no "greater than or equal" option, which is usually what you will want given that LAYERVERSION does get bumped from time to time. However, users mismatching layer branches and then having their builds fail later on with some incomprehensible error is still a pretty common problem. We can't simply use the git branch because not everyone is always on a branch and the branch names don't always match up (and that's not an issue). To provide a practical means to address branch mismatching, I have reworked LAYERDEPENDS version specifications to use the more familiar "dependency (>= version)" syntax as used with package dependencies, support non-integer versions, and clarified the error message a little. If we then take care to bump the version on every breaking change, it is at least possible to have layers depend on these changes when they update to match; we can now even support a major.minor scheme to allow retrospectively adding a version limiter to old branches when a new branch is created and yet still allow the old branch minor version to be bumped if needed. Fixes [YOCTO #5991]. (Bitbake rev: 408be9cdf2b1e32e64ea488d8051a546fb54c144) Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
91 lines
3.8 KiB
Python
91 lines
3.8 KiB
Python
# ex:ts=4:sw=4:sts=4:et
|
|
# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*-
|
|
#
|
|
# BitBake Tests for utils.py
|
|
#
|
|
# Copyright (C) 2012 Richard Purdie
|
|
#
|
|
# This program is free software; you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License version 2 as
|
|
# published by the Free Software Foundation.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License along
|
|
# with this program; if not, write to the Free Software Foundation, Inc.,
|
|
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
#
|
|
|
|
import unittest
|
|
import bb
|
|
|
|
class VerCmpString(unittest.TestCase):
|
|
|
|
def test_vercmpstring(self):
|
|
result = bb.utils.vercmp_string('1', '2')
|
|
self.assertTrue(result < 0)
|
|
result = bb.utils.vercmp_string('2', '1')
|
|
self.assertTrue(result > 0)
|
|
result = bb.utils.vercmp_string('1', '1.0')
|
|
self.assertTrue(result < 0)
|
|
result = bb.utils.vercmp_string('1', '1.1')
|
|
self.assertTrue(result < 0)
|
|
result = bb.utils.vercmp_string('1.1', '1_p2')
|
|
self.assertTrue(result < 0)
|
|
result = bb.utils.vercmp_string('1.0', '1.0+1.1-beta1')
|
|
self.assertTrue(result < 0)
|
|
result = bb.utils.vercmp_string('1.1', '1.0+1.1-beta1')
|
|
self.assertTrue(result > 0)
|
|
|
|
def test_explode_dep_versions(self):
|
|
correctresult = {"foo" : ["= 1.10"]}
|
|
result = bb.utils.explode_dep_versions2("foo (= 1.10)")
|
|
self.assertEqual(result, correctresult)
|
|
result = bb.utils.explode_dep_versions2("foo (=1.10)")
|
|
self.assertEqual(result, correctresult)
|
|
result = bb.utils.explode_dep_versions2("foo ( = 1.10)")
|
|
self.assertEqual(result, correctresult)
|
|
result = bb.utils.explode_dep_versions2("foo ( =1.10)")
|
|
self.assertEqual(result, correctresult)
|
|
result = bb.utils.explode_dep_versions2("foo ( = 1.10 )")
|
|
self.assertEqual(result, correctresult)
|
|
result = bb.utils.explode_dep_versions2("foo ( =1.10 )")
|
|
self.assertEqual(result, correctresult)
|
|
|
|
def test_vercmp_string_op(self):
|
|
compareops = [('1', '1', '=', True),
|
|
('1', '1', '==', True),
|
|
('1', '1', '!=', False),
|
|
('1', '1', '>', False),
|
|
('1', '1', '<', False),
|
|
('1', '1', '>=', True),
|
|
('1', '1', '<=', True),
|
|
('1', '0', '=', False),
|
|
('1', '0', '==', False),
|
|
('1', '0', '!=', True),
|
|
('1', '0', '>', True),
|
|
('1', '0', '<', False),
|
|
('1', '0', '>>', True),
|
|
('1', '0', '<<', False),
|
|
('1', '0', '>=', True),
|
|
('1', '0', '<=', False),
|
|
('0', '1', '=', False),
|
|
('0', '1', '==', False),
|
|
('0', '1', '!=', True),
|
|
('0', '1', '>', False),
|
|
('0', '1', '<', True),
|
|
('0', '1', '>>', False),
|
|
('0', '1', '<<', True),
|
|
('0', '1', '>=', False),
|
|
('0', '1', '<=', True)]
|
|
|
|
for arg1, arg2, op, correctresult in compareops:
|
|
result = bb.utils.vercmp_string_op(arg1, arg2, op)
|
|
self.assertEqual(result, correctresult, 'vercmp_string_op("%s", "%s", "%s") != %s' % (arg1, arg2, op, correctresult))
|
|
|
|
# Check that clearly invalid operator raises an exception
|
|
self.assertRaises(bb.utils.VersionStringException, bb.utils.vercmp_string_op, '0', '0', '$')
|