From cfa6a7aa6f08ae9ae395e4b1d2d506fbcf785bf6 Mon Sep 17 00:00:00 2001 From: Ola x Nilsson Date: Thu, 22 Dec 2016 14:16:33 +0100 Subject: oe-selftest: devtool: Reverting a change should trigger rebuild Add code to verify that not only does a change trigger a build, but so does reverting that change. Reverting a change in a devtool managed git repo may cause the current checksum to match the checksum of a previous build, which will cause bitbake to skip builds that are needed. (From OE-Core rev: 58a31d8dd7293f14c70e56ec9639c420d15e7dfc) Signed-off-by: Ross Burton Signed-off-by: Richard Purdie --- meta/lib/oeqa/selftest/devtool.py | 54 +++++++++++++++++++++++++++------------ 1 file changed, 38 insertions(+), 16 deletions(-) diff --git a/meta/lib/oeqa/selftest/devtool.py b/meta/lib/oeqa/selftest/devtool.py index 19c5ccf60b..a3beefa2c2 100644 --- a/meta/lib/oeqa/selftest/devtool.py +++ b/meta/lib/oeqa/selftest/devtool.py @@ -437,17 +437,33 @@ class DevtoolTests(DevtoolBase): # Check git repo self._check_src_repo(tempdir) # Try building - bitbake('mdadm') + def list_stamps(globsuffix='*'): + stampprefix = get_bb_var('STAMP', 'mdadm') + self.assertTrue(stampprefix, 'Unable to get STAMP value for recipe mdadm') + return glob.glob(stampprefix + globsuffix) + + numstamps = len(list_stamps('.do_compile.*')) + self.assertEqual(numstamps, 0, 'do_compile stamps before first build') + for x in range(10): + bitbake('mdadm') + nowstamps = len(list_stamps('.do_compile.*')) + if nowstamps == numstamps: + break + numstamps = nowstamps + else: + self.fail('build did not stabilize in 10 iterations') + # Try making (minor) modifications to the source modfile = os.path.join(tempdir, 'mdadm.8.in') result = runCmd("sed -i 's!^\.TH.*!.TH MDADM 8 \"\" v9.999-custom!' %s" % modfile) - sedline = '' - with open(modfile, 'r') as f: - for line in f: - if line.startswith('.TH'): - sedline = line.rstrip() - break - self.assertEqual(sedline, '.TH MDADM 8 "" v9.999-custom', 'man .in file not modified (sed failed)') + + def check_TH_line(checkfile, expected, message): + with open(checkfile, 'r') as f: + for line in f: + if line.startswith('.TH'): + self.assertEqual(line.rstrip(), expected, message) + + check_TH_line(modfile, '.TH MDADM 8 "" v9.999-custom', 'man .in file not modified (sed failed)') bitbake('mdadm -c package') pkgd = get_bb_var('PKGD', 'mdadm') self.assertTrue(pkgd, 'Could not query PKGD variable') @@ -456,18 +472,24 @@ class DevtoolTests(DevtoolBase): if mandir[0] == '/': mandir = mandir[1:] manfile = os.path.join(pkgd, mandir, 'man8', 'mdadm.8') - with open(manfile, 'r') as f: - for line in f: - if line.startswith('.TH'): - self.assertEqual(line.rstrip(), '.TH MDADM 8 "" v9.999-custom', 'man file not modified. man searched file path: %s' % manfile) + check_TH_line(manfile, '.TH MDADM 8 "" v9.999-custom', 'man file not modified. man searched file path: %s' % manfile) + # Test reverting the change + result = runCmd("git -C %s checkout -- %s" % (tempdir, modfile)) + check_TH_line(modfile, '.TH MDADM 8 "" v3.4', 'man .in file not restored (git failed)') + bitbake('mdadm -c package') + pkgd = get_bb_var('PKGD', 'mdadm') + self.assertTrue(pkgd, 'Could not query PKGD variable') + mandir = get_bb_var('mandir', 'mdadm') + self.assertTrue(mandir, 'Could not query mandir variable') + if mandir[0] == '/': + mandir = mandir[1:] + manfile = os.path.join(pkgd, mandir, 'man8', 'mdadm.8') + check_TH_line(manfile, '.TH MDADM 8 "" v3.4', 'man file not updated. man searched file path: %s' % manfile) # Test devtool reset - stampprefix = get_bb_var('STAMP', 'mdadm') result = runCmd('devtool reset mdadm') result = runCmd('devtool status') self.assertNotIn('mdadm', result.output) - self.assertTrue(stampprefix, 'Unable to get STAMP value for recipe mdadm') - matches = glob.glob(stampprefix + '*') - self.assertFalse(matches, 'Stamp files exist for recipe mdadm that should have been cleaned') + self.assertFalse(list_stamps(), 'Stamp files exist for recipe mdadm that should have been cleaned') @testcase(1166) def test_devtool_modify_invalid(self): -- cgit v1.2.3-54-g00ecf