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)
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)
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
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)
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
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
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)
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)
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)
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
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
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, )
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 )
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, )