def testMoveSlotEnt(self): ebuilds = { "dev-libs/A-2::dont_apply_updates": { "EAPI": "5", "SLOT": "0/2.30", }, "dev-libs/B-2::dont_apply_updates": { "SLOT": "0", }, "dev-libs/C-2.1::dont_apply_updates": { "EAPI": "5", "SLOT": "0/2.1", }, } installed = { "dev-libs/A-1::test_repo": { "EAPI": "5", "SLOT": "0/2.30", }, "dev-libs/B-1::test_repo": { "SLOT": "0", }, "dev-libs/C-1::test_repo": { "EAPI": "5", "SLOT": "0/1", }, } binpkgs = { "dev-libs/A-1::test_repo": { "EAPI": "5", "SLOT": "0/2.30", }, "dev-libs/A-2::dont_apply_updates": { "EAPI": "5", "SLOT": "0/2.30", }, "dev-libs/B-1::test_repo": { "SLOT": "0", }, "dev-libs/B-2::dont_apply_updates": { "SLOT": "0", }, "dev-libs/C-1::test_repo": { "EAPI": "5", "SLOT": "0/1", }, "dev-libs/C-2.1::dont_apply_updates": { "EAPI": "5", "SLOT": "0/2.1", }, } updates = textwrap.dedent( """ slotmove dev-libs/A 0 2 slotmove dev-libs/B 0 1 slotmove dev-libs/C 0 1 """ ) for binpkg_format in SUPPORTED_GENTOO_BINPKG_FORMATS: with self.subTest(binpkg_format=binpkg_format): print(colorize("HILITE", binpkg_format), end=" ... ") sys.stdout.flush() playground = ResolverPlayground( binpkgs=binpkgs, ebuilds=ebuilds, installed=installed, user_config={ "make.conf": ('BINPKG_FORMAT="%s"' % binpkg_format,), }, ) settings = playground.settings trees = playground.trees eroot = settings["EROOT"] test_repo_location = settings.repositories["test_repo"].location portdb = trees[eroot]["porttree"].dbapi vardb = trees[eroot]["vartree"].dbapi bindb = trees[eroot]["bintree"].dbapi updates_dir = os.path.join(test_repo_location, "profiles", "updates") try: ensure_dirs(updates_dir) with open(os.path.join(updates_dir, "1Q-2010"), "w") as f: f.write(updates) # Create an empty updates directory, so that this # repo doesn't inherit updates from the main repo. ensure_dirs( os.path.join( portdb.getRepositoryPath("dont_apply_updates"), "profiles", "updates", ) ) global_noiselimit = portage.util.noiselimit portage.util.noiselimit = -2 try: _do_global_updates(trees, {}) finally: portage.util.noiselimit = global_noiselimit # Workaround for cache validation not working # correctly when filesystem has timestamp precision # of 1 second. vardb._clear_cache() # 0/2.30 -> 2/2.30 self.assertEqual( "2/2.30", vardb.aux_get("dev-libs/A-1", ["SLOT"])[0] ) self.assertEqual( "2/2.30", bindb.aux_get("dev-libs/A-1", ["SLOT"])[0] ) # 0 -> 1 self.assertEqual("1", vardb.aux_get("dev-libs/B-1", ["SLOT"])[0]) self.assertEqual("1", bindb.aux_get("dev-libs/B-1", ["SLOT"])[0]) # 0/1 -> 1 (equivalent to 1/1) self.assertEqual("1", vardb.aux_get("dev-libs/C-1", ["SLOT"])[0]) self.assertEqual("1", bindb.aux_get("dev-libs/C-1", ["SLOT"])[0]) # dont_apply_updates self.assertEqual( "0/2.30", bindb.aux_get("dev-libs/A-2", ["SLOT"])[0] ) self.assertEqual("0", bindb.aux_get("dev-libs/B-2", ["SLOT"])[0]) self.assertEqual( "0/2.1", bindb.aux_get("dev-libs/C-2.1", ["SLOT"])[0] ) finally: playground.cleanup()
def testUpdateDbentryDbapiTestCase(self): ebuilds = { "dev-libs/A-2::dont_apply_updates": { "RDEPEND": "dev-libs/M dev-libs/N dev-libs/P", "EAPI": "4", "SLOT": "2", }, "dev-libs/B-2::dont_apply_updates": { "RDEPEND": "dev-libs/M dev-libs/N dev-libs/P", "EAPI": "4", "SLOT": "2", }, } installed = { "dev-libs/A-1::test_repo": { "RDEPEND": "dev-libs/M dev-libs/N dev-libs/P", "EAPI": "4", }, "dev-libs/A-2::dont_apply_updates": { "RDEPEND": "dev-libs/M dev-libs/N dev-libs/P", "EAPI": "4", "SLOT": "2", }, "dev-libs/B-1::test_repo": { "RDEPEND": "dev-libs/M dev-libs/N dev-libs/P", "EAPI": "4-python", }, "dev-libs/M-1::test_repo": { "EAPI": "4", }, "dev-libs/N-1::test_repo": { "EAPI": "4", }, "dev-libs/N-2::test_repo": { "EAPI": "4-python", }, } binpkgs = { "dev-libs/A-1::test_repo": { "RDEPEND": "dev-libs/M dev-libs/N dev-libs/P", "EAPI": "4", }, "dev-libs/A-2::dont_apply_updates": { "RDEPEND": "dev-libs/M dev-libs/N dev-libs/P", "EAPI": "4", "SLOT": "2", }, "dev-libs/B-1::test_repo": { "RDEPEND": "dev-libs/M dev-libs/N dev-libs/P", "EAPI": "4-python", }, } world = ["dev-libs/M", "dev-libs/N"] updates = textwrap.dedent( """ move dev-libs/M dev-libs/M-moved move dev-libs/N dev-libs/N.moved """ ) for binpkg_format in SUPPORTED_GENTOO_BINPKG_FORMATS: with self.subTest(binpkg_format=binpkg_format): print(colorize("HILITE", binpkg_format), end=" ... ") sys.stdout.flush() playground = ResolverPlayground( binpkgs=binpkgs, ebuilds=ebuilds, installed=installed, world=world, user_config={ "make.conf": ('BINPKG_FORMAT="%s"' % binpkg_format,), }, ) settings = playground.settings trees = playground.trees eroot = settings["EROOT"] test_repo_location = settings.repositories["test_repo"].location portdb = trees[eroot]["porttree"].dbapi vardb = trees[eroot]["vartree"].dbapi bindb = trees[eroot]["bintree"].dbapi setconfig = trees[eroot]["root_config"].setconfig selected_set = setconfig.getSets()["selected"] updates_dir = os.path.join(test_repo_location, "profiles", "updates") try: ensure_dirs(updates_dir) with open(os.path.join(updates_dir, "1Q-2010"), "w") as f: f.write(updates) # Create an empty updates directory, so that this # repo doesn't inherit updates from the main repo. ensure_dirs( os.path.join( portdb.getRepositoryPath("dont_apply_updates"), "profiles", "updates", ) ) global_noiselimit = portage.util.noiselimit portage.util.noiselimit = -2 try: _do_global_updates(trees, {}) finally: portage.util.noiselimit = global_noiselimit # Workaround for cache validation not working # correctly when filesystem has timestamp precision # of 1 second. vardb._clear_cache() # M -> M-moved old_pattern = re.compile(r"\bdev-libs/M(\s|$)") rdepend = vardb.aux_get("dev-libs/A-1", ["RDEPEND"])[0] self.assertTrue(old_pattern.search(rdepend) is None) self.assertTrue("dev-libs/M-moved" in rdepend) rdepend = bindb.aux_get("dev-libs/A-1", ["RDEPEND"])[0] self.assertTrue(old_pattern.search(rdepend) is None) self.assertTrue("dev-libs/M-moved" in rdepend) rdepend = vardb.aux_get("dev-libs/B-1", ["RDEPEND"])[0] self.assertTrue(old_pattern.search(rdepend) is None) self.assertTrue("dev-libs/M-moved" in rdepend) rdepend = vardb.aux_get("dev-libs/B-1", ["RDEPEND"])[0] self.assertTrue(old_pattern.search(rdepend) is None) self.assertTrue("dev-libs/M-moved" in rdepend) # EAPI 4-python/*-progress N -> N.moved rdepend = vardb.aux_get("dev-libs/B-1", ["RDEPEND"])[0] old_pattern = re.compile(r"\bdev-libs/N(\s|$)") self.assertTrue(old_pattern.search(rdepend) is None) self.assertTrue("dev-libs/N.moved" in rdepend) rdepend = bindb.aux_get("dev-libs/B-1", ["RDEPEND"])[0] self.assertTrue(old_pattern.search(rdepend) is None) self.assertTrue("dev-libs/N.moved" in rdepend) self.assertRaises(KeyError, vardb.aux_get, "dev-libs/N-2", ["EAPI"]) vardb.aux_get("dev-libs/N.moved-2", ["RDEPEND"])[0] # EAPI 4 does not allow dots in package names for N -> N.moved rdepend = vardb.aux_get("dev-libs/A-1", ["RDEPEND"])[0] self.assertTrue("dev-libs/N" in rdepend) self.assertTrue("dev-libs/N.moved" not in rdepend) rdepend = bindb.aux_get("dev-libs/A-1", ["RDEPEND"])[0] self.assertTrue("dev-libs/N" in rdepend) self.assertTrue("dev-libs/N.moved" not in rdepend) vardb.aux_get("dev-libs/N-1", ["RDEPEND"])[0] self.assertRaises( KeyError, vardb.aux_get, "dev-libs/N.moved-1", ["EAPI"] ) # dont_apply_updates rdepend = vardb.aux_get("dev-libs/A-2", ["RDEPEND"])[0] self.assertTrue("dev-libs/M" in rdepend) self.assertTrue("dev-libs/M-moved" not in rdepend) rdepend = bindb.aux_get("dev-libs/A-2", ["RDEPEND"])[0] self.assertTrue("dev-libs/M" in rdepend) self.assertTrue("dev-libs/M-moved" not in rdepend) selected_set.load() self.assertTrue("dev-libs/M" not in selected_set) self.assertTrue("dev-libs/M-moved" in selected_set) self.assertTrue("dev-libs/N" not in selected_set) self.assertTrue("dev-libs/N.moved" in selected_set) finally: playground.cleanup()
def testMoveEnt(self): ebuilds = { "dev-libs/A-2::dont_apply_updates" : { "EAPI": "4", "SLOT": "2", }, } installed = { "dev-libs/A-1::test_repo" : { "EAPI": "4", }, "dev-libs/A-2::dont_apply_updates" : { "EAPI": "4", "SLOT": "2", }, } binpkgs = { "dev-libs/A-1::test_repo" : { "EAPI": "4", }, "dev-libs/A-2::dont_apply_updates" : { "EAPI": "4", "SLOT": "2", }, } updates = textwrap.dedent(""" move dev-libs/A dev-libs/A-moved """) playground = ResolverPlayground(binpkgs=binpkgs, ebuilds=ebuilds, installed=installed) settings = playground.settings trees = playground.trees eroot = settings["EROOT"] portdir = settings["PORTDIR"] portdb = trees[eroot]["porttree"].dbapi vardb = trees[eroot]["vartree"].dbapi bindb = trees[eroot]["bintree"].dbapi updates_dir = os.path.join(portdir, "profiles", "updates") try: ensure_dirs(updates_dir) with open(os.path.join(updates_dir, "1Q-2010"), 'w') as f: f.write(updates) # Create an empty updates directory, so that this # repo doesn't inherit updates from the main repo. ensure_dirs(os.path.join( portdb.getRepositoryPath("dont_apply_updates"), "profiles", "updates")) global_noiselimit = portage.util.noiselimit portage.util.noiselimit = -2 try: _do_global_updates(trees, {}) finally: portage.util.noiselimit = global_noiselimit # Workaround for cache validation not working # correctly when filesystem has timestamp precision # of 1 second. vardb._clear_cache() # A -> A-moved self.assertRaises(KeyError, vardb.aux_get, "dev-libs/A-1", ["EAPI"]) vardb.aux_get("dev-libs/A-moved-1", ["EAPI"]) self.assertRaises(KeyError, bindb.aux_get, "dev-libs/A-1", ["EAPI"]) bindb.aux_get("dev-libs/A-moved-1", ["EAPI"]) # dont_apply_updates self.assertRaises(KeyError, vardb.aux_get, "dev-libs/A-moved-2", ["EAPI"]) vardb.aux_get("dev-libs/A-2", ["EAPI"]) self.assertRaises(KeyError, bindb.aux_get, "dev-libs/A-moved-2", ["EAPI"]) bindb.aux_get("dev-libs/A-2", ["EAPI"]) finally: playground.cleanup()
def testMoveEnt(self): ebuilds = { "dev-libs/A-2::dont_apply_updates": { "EAPI": "4", "SLOT": "2", }, } installed = { "dev-libs/A-1::test_repo": { "EAPI": "4", }, "dev-libs/A-2::dont_apply_updates": { "EAPI": "4", "SLOT": "2", }, } binpkgs = { "dev-libs/A-1::test_repo": { "EAPI": "4", }, "dev-libs/A-2::dont_apply_updates": { "EAPI": "4", "SLOT": "2", }, } updates = textwrap.dedent(""" move dev-libs/A dev-libs/A-moved """) playground = ResolverPlayground(binpkgs=binpkgs, ebuilds=ebuilds, installed=installed) settings = playground.settings trees = playground.trees eroot = settings["EROOT"] test_repo_location = settings.repositories["test_repo"].location portdb = trees[eroot]["porttree"].dbapi vardb = trees[eroot]["vartree"].dbapi bindb = trees[eroot]["bintree"].dbapi updates_dir = os.path.join(test_repo_location, "profiles", "updates") try: ensure_dirs(updates_dir) with open(os.path.join(updates_dir, "1Q-2010"), 'w') as f: f.write(updates) # Create an empty updates directory, so that this # repo doesn't inherit updates from the main repo. ensure_dirs( os.path.join(portdb.getRepositoryPath("dont_apply_updates"), "profiles", "updates")) global_noiselimit = portage.util.noiselimit portage.util.noiselimit = -2 try: _do_global_updates(trees, {}) finally: portage.util.noiselimit = global_noiselimit # Workaround for cache validation not working # correctly when filesystem has timestamp precision # of 1 second. vardb._clear_cache() # A -> A-moved self.assertRaises(KeyError, vardb.aux_get, "dev-libs/A-1", ["EAPI"]) vardb.aux_get("dev-libs/A-moved-1", ["EAPI"]) # The original package should still exist because a binary # package move is a copy on write operation. bindb.aux_get("dev-libs/A-1", ["EAPI"]) bindb.aux_get("dev-libs/A-moved-1", ["EAPI"]) # dont_apply_updates self.assertRaises(KeyError, vardb.aux_get, "dev-libs/A-moved-2", ["EAPI"]) vardb.aux_get("dev-libs/A-2", ["EAPI"]) self.assertRaises(KeyError, bindb.aux_get, "dev-libs/A-moved-2", ["EAPI"]) bindb.aux_get("dev-libs/A-2", ["EAPI"]) finally: playground.cleanup()
def testUpdateDbentryDbapiTestCase(self): ebuilds = { "dev-libs/A-2::dont_apply_updates" : { "RDEPEND" : "dev-libs/M dev-libs/N dev-libs/P", "EAPI": "4", "SLOT": "2", }, "dev-libs/B-2::dont_apply_updates" : { "RDEPEND" : "dev-libs/M dev-libs/N dev-libs/P", "EAPI": "4", "SLOT": "2", }, } installed = { "dev-libs/A-1::test_repo" : { "RDEPEND" : "dev-libs/M dev-libs/N dev-libs/P", "EAPI": "4", }, "dev-libs/A-2::dont_apply_updates" : { "RDEPEND" : "dev-libs/M dev-libs/N dev-libs/P", "EAPI": "4", "SLOT": "2", }, "dev-libs/M-1::test_repo" : { "EAPI": "4", }, "dev-libs/N-1::test_repo" : { "EAPI": "4", }, } binpkgs = { "dev-libs/A-1::test_repo" : { "RDEPEND" : "dev-libs/M dev-libs/N dev-libs/P", "EAPI": "4", }, "dev-libs/A-2::dont_apply_updates" : { "RDEPEND" : "dev-libs/M dev-libs/N dev-libs/P", "EAPI": "4", "SLOT": "2", }, } world = ["dev-libs/M", "dev-libs/N"] updates = textwrap.dedent(""" move dev-libs/M dev-libs/M-moved """) playground = ResolverPlayground(binpkgs=binpkgs, ebuilds=ebuilds, installed=installed, world=world) settings = playground.settings trees = playground.trees eroot = settings["EROOT"] test_repo_location = settings.repositories["test_repo"].location portdb = trees[eroot]["porttree"].dbapi vardb = trees[eroot]["vartree"].dbapi bindb = trees[eroot]["bintree"].dbapi setconfig = trees[eroot]["root_config"].setconfig selected_set = setconfig.getSets()["selected"] updates_dir = os.path.join(test_repo_location, "profiles", "updates") try: ensure_dirs(updates_dir) with open(os.path.join(updates_dir, "1Q-2010"), 'w') as f: f.write(updates) # Create an empty updates directory, so that this # repo doesn't inherit updates from the main repo. ensure_dirs(os.path.join( portdb.getRepositoryPath("dont_apply_updates"), "profiles", "updates")) global_noiselimit = portage.util.noiselimit portage.util.noiselimit = -2 try: _do_global_updates(trees, {}) finally: portage.util.noiselimit = global_noiselimit # Workaround for cache validation not working # correctly when filesystem has timestamp precision # of 1 second. vardb._clear_cache() # M -> M-moved old_pattern = re.compile(r"\bdev-libs/M(\s|$)") rdepend = vardb.aux_get("dev-libs/A-1", ["RDEPEND"])[0] self.assertTrue(old_pattern.search(rdepend) is None) self.assertTrue("dev-libs/M-moved" in rdepend) rdepend = bindb.aux_get("dev-libs/A-1", ["RDEPEND"])[0] self.assertTrue(old_pattern.search(rdepend) is None) self.assertTrue("dev-libs/M-moved" in rdepend) # dont_apply_updates rdepend = vardb.aux_get("dev-libs/A-2", ["RDEPEND"])[0] self.assertTrue("dev-libs/M" in rdepend) self.assertTrue("dev-libs/M-moved" not in rdepend) rdepend = bindb.aux_get("dev-libs/A-2", ["RDEPEND"])[0] self.assertTrue("dev-libs/M" in rdepend) self.assertTrue("dev-libs/M-moved" not in rdepend) selected_set.load() self.assertTrue("dev-libs/M" not in selected_set) self.assertTrue("dev-libs/M-moved" in selected_set) finally: playground.cleanup()
def testMoveSlotEnt(self): ebuilds = { "dev-libs/A-2::dont_apply_updates" : { "EAPI": "4-slot-abi", "SLOT": "0/2.30", }, "dev-libs/B-2::dont_apply_updates" : { "SLOT": "0", }, "dev-libs/C-2.1::dont_apply_updates" : { "EAPI": "4-slot-abi", "SLOT": "0/2.1", }, } installed = { "dev-libs/A-1::test_repo" : { "EAPI": "4-slot-abi", "SLOT": "0/2.30", }, "dev-libs/B-1::test_repo" : { "SLOT": "0", }, "dev-libs/C-1::test_repo" : { "EAPI": "4-slot-abi", "SLOT": "0/1", }, } binpkgs = { "dev-libs/A-1::test_repo" : { "EAPI": "4-slot-abi", "SLOT": "0/2.30", }, "dev-libs/A-2::dont_apply_updates" : { "EAPI": "4-slot-abi", "SLOT": "0/2.30", }, "dev-libs/B-1::test_repo" : { "SLOT": "0", }, "dev-libs/B-2::dont_apply_updates" : { "SLOT": "0", }, "dev-libs/C-1::test_repo" : { "EAPI": "4-slot-abi", "SLOT": "0/1", }, "dev-libs/C-2.1::dont_apply_updates" : { "EAPI": "4-slot-abi", "SLOT": "0/2.1", }, } updates = textwrap.dedent(""" slotmove dev-libs/A 0 2 slotmove dev-libs/B 0 1 slotmove dev-libs/C 0 1 """) playground = ResolverPlayground(binpkgs=binpkgs, ebuilds=ebuilds, installed=installed) settings = playground.settings trees = playground.trees eroot = settings["EROOT"] test_repo_location = settings.repositories["test_repo"].location portdb = trees[eroot]["porttree"].dbapi vardb = trees[eroot]["vartree"].dbapi bindb = trees[eroot]["bintree"].dbapi updates_dir = os.path.join(test_repo_location, "profiles", "updates") try: ensure_dirs(updates_dir) with open(os.path.join(updates_dir, "1Q-2010"), 'w') as f: f.write(updates) # Create an empty updates directory, so that this # repo doesn't inherit updates from the main repo. ensure_dirs(os.path.join( portdb.getRepositoryPath("dont_apply_updates"), "profiles", "updates")) global_noiselimit = portage.util.noiselimit portage.util.noiselimit = -2 try: _do_global_updates(trees, {}) finally: portage.util.noiselimit = global_noiselimit # Workaround for cache validation not working # correctly when filesystem has timestamp precision # of 1 second. vardb._clear_cache() # 0/2.30 -> 2/2.30 self.assertEqual("2/2.30", vardb.aux_get("dev-libs/A-1", ["SLOT"])[0]) self.assertEqual("2/2.30", bindb.aux_get("dev-libs/A-1", ["SLOT"])[0]) # 0 -> 1 self.assertEqual("1", vardb.aux_get("dev-libs/B-1", ["SLOT"])[0]) self.assertEqual("1", bindb.aux_get("dev-libs/B-1", ["SLOT"])[0]) # 0/1 -> 1 (equivalent to 1/1) self.assertEqual("1", vardb.aux_get("dev-libs/C-1", ["SLOT"])[0]) self.assertEqual("1", bindb.aux_get("dev-libs/C-1", ["SLOT"])[0]) # dont_apply_updates self.assertEqual("0/2.30", bindb.aux_get("dev-libs/A-2", ["SLOT"])[0]) self.assertEqual("0", bindb.aux_get("dev-libs/B-2", ["SLOT"])[0]) self.assertEqual("0/2.1", bindb.aux_get("dev-libs/C-2.1", ["SLOT"])[0]) finally: playground.cleanup()
def testMoveSlotEnt(self): ebuilds = { "dev-libs/A-2::dont_apply_updates": { "EAPI": "4-slot-abi", "SLOT": "0/2.30", }, "dev-libs/B-2::dont_apply_updates": { "SLOT": "0", }, "dev-libs/C-2.1::dont_apply_updates": { "EAPI": "4-slot-abi", "SLOT": "0/2.1", }, } installed = { "dev-libs/A-1::test_repo": { "EAPI": "4-slot-abi", "SLOT": "0/2.30", }, "dev-libs/B-1::test_repo": { "SLOT": "0", }, "dev-libs/C-1::test_repo": { "EAPI": "4-slot-abi", "SLOT": "0/1", }, } binpkgs = { "dev-libs/A-1::test_repo": { "EAPI": "4-slot-abi", "SLOT": "0/2.30", }, "dev-libs/A-2::dont_apply_updates": { "EAPI": "4-slot-abi", "SLOT": "0/2.30", }, "dev-libs/B-1::test_repo": { "SLOT": "0", }, "dev-libs/B-2::dont_apply_updates": { "SLOT": "0", }, "dev-libs/C-1::test_repo": { "EAPI": "4-slot-abi", "SLOT": "0/1", }, "dev-libs/C-2.1::dont_apply_updates": { "EAPI": "4-slot-abi", "SLOT": "0/2.1", }, } updates = textwrap.dedent(""" slotmove dev-libs/A 0 2 slotmove dev-libs/B 0 1 slotmove dev-libs/C 0 1 """) playground = ResolverPlayground(binpkgs=binpkgs, ebuilds=ebuilds, installed=installed) settings = playground.settings trees = playground.trees eroot = settings["EROOT"] portdir = settings["PORTDIR"] portdb = trees[eroot]["porttree"].dbapi vardb = trees[eroot]["vartree"].dbapi bindb = trees[eroot]["bintree"].dbapi updates_dir = os.path.join(portdir, "profiles", "updates") try: ensure_dirs(updates_dir) with open(os.path.join(updates_dir, "1Q-2010"), 'w') as f: f.write(updates) # Create an empty updates directory, so that this # repo doesn't inherit updates from the main repo. ensure_dirs( os.path.join(portdb.getRepositoryPath("dont_apply_updates"), "profiles", "updates")) global_noiselimit = portage.util.noiselimit portage.util.noiselimit = -2 try: _do_global_updates(trees, {}) finally: portage.util.noiselimit = global_noiselimit # Workaround for cache validation not working # correctly when filesystem has timestamp precision # of 1 second. vardb._clear_cache() # 0/2.30 -> 2/2.30 self.assertEqual("2/2.30", vardb.aux_get("dev-libs/A-1", ["SLOT"])[0]) self.assertEqual("2/2.30", bindb.aux_get("dev-libs/A-1", ["SLOT"])[0]) # 0 -> 1 self.assertEqual("1", vardb.aux_get("dev-libs/B-1", ["SLOT"])[0]) self.assertEqual("1", bindb.aux_get("dev-libs/B-1", ["SLOT"])[0]) # 0/1 -> 1 (equivalent to 1/1) self.assertEqual("1", vardb.aux_get("dev-libs/C-1", ["SLOT"])[0]) self.assertEqual("1", bindb.aux_get("dev-libs/C-1", ["SLOT"])[0]) # dont_apply_updates self.assertEqual("0/2.30", bindb.aux_get("dev-libs/A-2", ["SLOT"])[0]) self.assertEqual("0", bindb.aux_get("dev-libs/B-2", ["SLOT"])[0]) self.assertEqual("0/2.1", bindb.aux_get("dev-libs/C-2.1", ["SLOT"])[0]) finally: playground.cleanup()