Example #1
0
    def test_explicit_pkgs_not_becoming_deps(self):
        """
        #123 AUR dep which was previously explicitly installed gets
        incorrectly marked as a dependency
        """
        from pikaur.pacman import PackageDB  # pylint:disable=import-outside-toplevel

        aur_pkg_name = 'nqp'
        explicitly_installed_dep_name = 'moarvm'

        self.remove_if_installed(aur_pkg_name, explicitly_installed_dep_name)
        explicitly_installed_dep_old_version = self.downgrade_aur_pkg(
            explicitly_installed_dep_name, fake_makepkg=True)
        self.assertInstalled(explicitly_installed_dep_name)
        self.assertEqual(
            PackageDB.get_local_dict()[explicitly_installed_dep_name].reason,
            0)

        fake_pikaur(f'-S {aur_pkg_name}')
        self.assertInstalled(aur_pkg_name)
        self.assertInstalled(explicitly_installed_dep_name)
        self.assertNotEqual(
            PackageDB.get_local_dict()[explicitly_installed_dep_name].version,
            explicitly_installed_dep_old_version)
        self.assertEqual(
            PackageDB.get_local_dict()[explicitly_installed_dep_name].reason,
            0)
Example #2
0
    def test_syu(self):
        """
        test upgrade of repo and AUR packages
        """

        self.downgrade_repo1_pkg()
        self.downgrade_aur1_pkg()

        query_result = pikaur('-Quq --aur').stdout
        self.assertEqual(query_result.splitlines(), [self.aur_pkg_name])

        query_result = pikaur('-Quq --repo').stdout
        self.assertEqual(query_result.splitlines(), [self.repo_pkg_name])

        query_result = pikaur('-Qu').stdout
        self.assertEqual(len(query_result.splitlines()), 2)
        self.assertIn(self.aur_pkg_name, query_result)
        self.assertIn(self.repo_pkg_name, query_result)

        # and finally test the sysupgrade itself
        pikaur('-Su --noconfirm')
        self.assertNotEqual(
            PackageDB.get_local_dict()[self.repo_pkg_name].version,
            self.repo_old_version)
        self.assertNotEqual(
            PackageDB.get_local_dict()[self.aur_pkg_name].version,
            self.aur_old_version)
Example #3
0
 def downgrade_repo_pkg(self, repo_pkg_name: str) -> str:
     self.remove_if_installed(repo_pkg_name)
     spawn(f'rm -fr ./{repo_pkg_name}')
     pikaur(f'-G {repo_pkg_name}')
     some_older_commit = spawn(f'git -C ./{repo_pkg_name} log --format=%h'
                               ).stdout_text.splitlines()[10]
     spawn(f'git -C ./{repo_pkg_name} checkout {some_older_commit}')
     pikaur(f'-P -i --noconfirm --mflags=--skippgpcheck '
            f'./{repo_pkg_name}/trunk/PKGBUILD')
     self.assertInstalled(repo_pkg_name)
     return PackageDB.get_local_dict()[repo_pkg_name].version
Example #4
0
    def test_syu(self):
        """
        test upgrade of repo and AUR packages
        """

        self.downgrade_repo1_pkg()
        self.downgrade_aur1_pkg()

        self.assertEqual(self.upgradeable_aur_pkgs_list, [self.aur_pkg_name])
        self.assertEqual(self.upgradeable_repo_pkgs_list, [self.repo_pkg_name])
        self.assertEqual(list(sorted(self.upgradeable_pkgs_list)),
                         list(sorted([self.repo_pkg_name, self.aur_pkg_name])))

        # and finally test the sysupgrade itself
        pikaur('-Su --noconfirm')
        self.assertNotEqual(
            PackageDB.get_local_dict()[self.repo_pkg_name].version,
            self.repo_old_version)
        self.assertNotEqual(
            PackageDB.get_local_dict()[self.aur_pkg_name].version,
            self.aur_old_version)
Example #5
0
 def downgrade_aur_pkg(self, aur_pkg_name: str, fake_makepkg=False) -> str:
     # and test -P and -G during downgrading :-)
     self.remove_if_installed(aur_pkg_name)
     spawn(f'rm -fr ./{aur_pkg_name}')
     pikaur(f'-G {aur_pkg_name}')
     prev_commit = spawn(  # type: ignore
         f'git -C ./{aur_pkg_name} log --format=%h').stdout_text.splitlines(
         )[1]
     spawn(f'git -C ./{aur_pkg_name} checkout {prev_commit}')
     pikaur(f'-P -i --noconfirm ./{aur_pkg_name}/PKGBUILD',
            fake_makepkg=fake_makepkg)
     self.assertInstalled(aur_pkg_name)
     return PackageDB.get_local_dict()[aur_pkg_name].version
Example #6
0
 def downgrade_aur_pkg(self,
                       aur_pkg_name: str,
                       fake_makepkg=False,
                       count=1) -> str:
     # and test -P and -G during downgrading :-)
     old_version = (PackageDB.get_local_dict()[aur_pkg_name].version
                    if aur_pkg_name in PackageDB.get_local_pkgnames() else
                    None)
     self.remove_if_installed(aur_pkg_name)
     spawn(f'rm -fr ./{aur_pkg_name}')
     pikaur(f'-G {aur_pkg_name}')
     prev_commit = spawn(f'git -C ./{aur_pkg_name} log --format=%h'
                         ).stdout_text.splitlines()[count]
     spawn(f'git -C ./{aur_pkg_name} checkout {prev_commit}')
     pikaur(f'-P -i --noconfirm ./{aur_pkg_name}/PKGBUILD',
            fake_makepkg=fake_makepkg)
     self.assertInstalled(aur_pkg_name)
     new_version = PackageDB.get_local_dict()[aur_pkg_name].version
     self.assertNotEqual(
         old_version, new_version,
         f"After downgrading version of {aur_pkg_name} still stays on {old_version}"
     )
     return new_version
Example #7
0
    def test_syu_aur_repo_flags(self):
        """
        test --aur and --repo flags with sysupgrade
        """

        self.downgrade_repo1_pkg()
        self.downgrade_aur1_pkg()

        pikaur('-Su --noconfirm --repo')
        self.assertNotEqual(
            PackageDB.get_local_dict()[self.repo_pkg_name].version,
            self.repo_old_version)
        self.assertEqual(PackageDB.get_local_dict()[self.aur_pkg_name].version,
                         self.aur_old_version)

        self.downgrade_repo1_pkg()

        pikaur('-Su --noconfirm --aur')
        self.assertEqual(
            PackageDB.get_local_dict()[self.repo_pkg_name].version,
            self.repo_old_version)
        self.assertNotEqual(
            PackageDB.get_local_dict()[self.aur_pkg_name].version,
            self.aur_old_version)
Example #8
0
    def test_devel_upgrade(self):
        """
        test upgrade of AUR dev package
        """

        self.downgrade_dev_pkg()

        self.assertEqual(self.upgradeable_pkgs_list, [])

        # and finally test the sysupgrade itself
        pikaur('-Su --noconfirm --devel --ignore pikaur-git')
        # pikaur(f'-S {self.dev_pkg_name} --noconfirm --devel')
        self.assertNotEqual(
            PackageDB.get_local_dict()[self.dev_pkg_name].version,
            self.dev_old_version)
Example #9
0
    def test_devel_upgrade(self):
        """
        test upgrade of AUR dev package
        """

        self.downgrade_dev_pkg()

        query_result = pikaur('-Qu').stdout
        self.assertEqual(len(query_result.splitlines()), 0)

        # and finally test the sysupgrade itself
        pikaur('-Su --noconfirm --devel --ignore pikaur-git')
        # pikaur(f'-S {self.dev_pkg_name} --noconfirm --devel')
        self.assertNotEqual(
            PackageDB.get_local_dict()[self.dev_pkg_name].version,
            self.dev_old_version)
Example #10
0
 def downgrade_repo_pkg(self,
                        repo_pkg_name: str,
                        fake_makepkg=False,
                        skippgpcheck=False,
                        count=10) -> str:
     self.remove_if_installed(repo_pkg_name)
     spawn(f'rm -fr ./{repo_pkg_name}')
     pikaur(f'-G {repo_pkg_name}')
     some_older_commit = spawn(f'git -C ./{repo_pkg_name} log --format=%h'
                               ).stdout_text.splitlines()[count]
     spawn(f'git -C ./{repo_pkg_name} checkout {some_older_commit}')
     pikaur('-P -i --noconfirm '
            f'./{repo_pkg_name}/trunk/PKGBUILD',
            fake_makepkg=fake_makepkg,
            skippgpcheck=skippgpcheck)
     self.assertInstalled(repo_pkg_name)
     return PackageDB.get_local_dict()[repo_pkg_name].version
Example #11
0
 def downgrade_dev_pkg(self):
     # test -P <custom_name> and -G -d during downgrading
     self.remove_if_installed(self.dev_pkg_name)
     spawn(f'rm -fr ./{self.dev_pkg_name}')
     pikaur(f'-G -d {self.dev_pkg_name}')
     dev_pkg_url = self.dev_pkg_url.replace('/', r'\/')
     spawn([
         "bash", "-c", f"cd ./{self.dev_pkg_name}/ && "
         "sed -e 's/"
         "^source=.*"
         "/"
         f'source=("git+{dev_pkg_url}#branch=master~1")'
         "/' PKGBUILD > PKGBUILD_prev"
     ])
     pikaur(f'-P -i --noconfirm ./{self.dev_pkg_name}/PKGBUILD_prev')
     self.assertInstalled(self.dev_pkg_name)
     self.dev_old_version = PackageDB.get_local_dict()[
         self.dev_pkg_name].version
Example #12
0
def pikaur(cmd: str,
           capture_stdout=True,
           capture_stderr=False,
           fake_makepkg=False) -> CmdResult:

    PackageDB.discard_local_cache()

    new_args = ['pikaur'] + cmd.split(' ')
    if '-S ' in cmd:
        new_args += [
            '--noconfirm',
            '--hide-build-log',
        ]
    if fake_makepkg:
        new_args += [
            '--makepkg-path=' + os.path.join(TEST_DIR, 'fake_makepkg')
        ]
        if '--mflags' not in cmd:
            new_args += [
                '--mflags=--noextract',
            ]

    print(color_line('\n => ', 10, force=True) + ' '.join(new_args))

    intercepted: InterceptSysOutput
    with InterceptSysOutput(capture_stderr=capture_stderr,
                            capture_stdout=capture_stdout) as _intercepted:
        try:

            # re-parse args:
            sys.argv = new_args
            CachedArgs.args = None  # pylint:disable=protected-access
            MakePkgCommand._cmd = None  # pylint:disable=protected-access
            parse_args()
            # monkey-patch to force always uncolored output:
            CachedArgs.args.color = 'never'  # type: ignore # pylint:disable=protected-access

            # finally run pikaur's mainloop
            main()

        except FakeExit:
            pass
        intercepted = _intercepted

    PackageDB.discard_local_cache()
    PackageDB.discard_repo_cache()

    return CmdResult(
        returncode=intercepted.returncode,
        stdout=intercepted.stdout_text,
        stderr=intercepted.stderr_text,
    )
Example #13
0
    def test_syu_ignore(self):
        """
        test --ignore flag with sysupgrade
        """

        self.downgrade_repo1_pkg()
        self.downgrade_repo2_pkg()
        self.downgrade_aur1_pkg()
        self.downgrade_aur2_pkg()

        # ignore all upgradeable packages
        pikaur(
            '-Su --noconfirm '
            f'--ignore {self.repo_pkg_name} '
            f'--ignore {self.aur_pkg_name} '
            f'--ignore {self.repo2_pkg_name} '
            f'--ignore {self.aur2_pkg_name}'
        )
        self.assertEqual(
            PackageDB.get_local_dict()[self.repo_pkg_name].version,
            self.repo_old_version
        )
        self.assertEqual(
            PackageDB.get_local_dict()[self.aur_pkg_name].version,
            self.aur_old_version
        )
        self.assertEqual(
            PackageDB.get_local_dict()[self.repo2_pkg_name].version,
            self.repo2_old_version
        )
        self.assertEqual(
            PackageDB.get_local_dict()[self.aur2_pkg_name].version,
            self.aur2_old_version
        )

        # ignore one of repo pkgs and one of AUR pkgs
        pikaur(
            '-Su --noconfirm '
            f'--ignore {self.repo_pkg_name} '
            f'--ignore {self.aur_pkg_name}'
        )
        self.assertEqual(
            PackageDB.get_local_dict()[self.repo_pkg_name].version,
            self.repo_old_version
        )
        self.assertEqual(
            PackageDB.get_local_dict()[self.aur_pkg_name].version,
            self.aur_old_version
        )
        self.assertNotEqual(
            PackageDB.get_local_dict()[self.repo2_pkg_name].version,
            self.repo2_old_version
        )
        self.assertNotEqual(
            PackageDB.get_local_dict()[self.aur2_pkg_name].version,
            self.aur2_old_version
        )

        # ignore the only remaining AUR package
        pikaur('-Su --noconfirm '
               f'--ignore {self.aur_pkg_name}')
        self.assertNotEqual(
            PackageDB.get_local_dict()[self.repo_pkg_name].version,
            self.repo_old_version
        )
        self.assertEqual(
            PackageDB.get_local_dict()[self.aur_pkg_name].version,
            self.aur_old_version
        )

        self.downgrade_repo1_pkg()

        # ignore the only one remaining repo package
        pikaur('-Su --noconfirm '
               f'--ignore {self.repo_pkg_name}')
        self.assertEqual(
            PackageDB.get_local_dict()[self.repo_pkg_name].version,
            self.repo_old_version
        )
        self.assertNotEqual(
            PackageDB.get_local_dict()[self.aur_pkg_name].version,
            self.aur_old_version
        )
Example #14
0
def pikaur(cmd: str,
           capture_stdout=True,
           capture_stderr=False,
           fake_makepkg=False,
           skippgpcheck=False) -> CmdResult:

    PackageDB.discard_local_cache()

    new_args = ['pikaur'] + cmd.split(' ')
    mflags = []

    if '-S ' in cmd:
        new_args += [
            '--noconfirm',
        ]
    if fake_makepkg:
        new_args += [
            '--makepkg-path=' + os.path.join(TEST_DIR, 'fake_makepkg')
        ]
        mflags.append('--noextract')
    if skippgpcheck:
        mflags.append('--skippgpcheck')
    if '--mflags' in cmd:
        for arg in new_args[::]:
            if arg.startswith('--mflags'):
                for mflag in arg.split('=', maxsplit=1)[1].split(','):
                    mflags.append(mflag)
                new_args.remove(arg)
                break
    if mflags:
        new_args += [
            f"--mflags={','.join(mflags)}",
        ]

    print(color_line('\n => ', 10, force=True) + ' '.join(new_args))

    intercepted: InterceptSysOutput
    with InterceptSysOutput(capture_stderr=capture_stderr,
                            capture_stdout=capture_stdout) as _intercepted:
        try:

            # re-parse args:
            sys.argv = new_args
            CachedArgs.args = None
            MakePkgCommand._cmd = None  # pylint: disable=protected-access
            parse_args()
            # monkey-patch to force always uncolored output:
            CachedArgs.args.color = 'never'  # type: ignore

            # finally run pikaur's mainloop
            main()

        except FakeExit:
            pass
        intercepted = _intercepted

    PackageDB.discard_local_cache()
    PackageDB.discard_repo_cache()

    return CmdResult(
        returncode=intercepted.returncode,
        stdout=intercepted.stdout_text,
        stderr=intercepted.stderr_text,
    )