Exemplo n.º 1
0
    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()
Exemplo n.º 2
0
    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()
Exemplo n.º 3
0
	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()
Exemplo n.º 4
0
    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()
Exemplo n.º 5
0
	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()
Exemplo n.º 6
0
	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()
Exemplo n.º 7
0
    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()