check localdb before upgrading package
Commit 2ee7a8d89a
replaced a manual check
for a local package with a check for the "oldpkg" member, which gets set
at the beginning of the transaction. If the package was also in the
remove list, such as when a package gets replaced, it would no longer be
in the local db and pacman would try to remove it twice, resulting in
superfluous error messages.
Fixes: FS#50875, FS#55534
Signed-off-by: Andrew Gregory <andrew.gregory.8@gmail.com>
Signed-off-by: Allan McRae <allan@archlinux.org>
This commit is contained in:
parent
9f1b735d76
commit
f28ddd9d93
4 changed files with 30 additions and 1 deletions
|
@ -427,7 +427,7 @@ static int commit_single_pkg(alpm_handle_t *handle, alpm_pkg_t *newpkg,
|
|||
ASSERT(trans != NULL, return -1);
|
||||
|
||||
/* see if this is an upgrade. if so, remove the old package first */
|
||||
if((oldpkg = newpkg->oldpkg)) {
|
||||
if(_alpm_db_get_pkgfromcache(db, newpkg->name) && (oldpkg = newpkg->oldpkg)) {
|
||||
int cmp = _alpm_pkg_compare_versions(newpkg, oldpkg);
|
||||
if(cmp < 0) {
|
||||
log_msg = "downgrading";
|
||||
|
|
|
@ -148,6 +148,7 @@ pacman_tests = [
|
|||
{ 'name': 'tests/remove060.py' },
|
||||
{ 'name': 'tests/remove070.py' },
|
||||
{ 'name': 'tests/remove071.py' },
|
||||
{ 'name': 'tests/replace-and-upgrade-package.py' },
|
||||
{ 'name': 'tests/replace100.py' },
|
||||
{ 'name': 'tests/replace101.py' },
|
||||
{ 'name': 'tests/replace102.py' },
|
||||
|
|
|
@ -144,6 +144,7 @@ TESTS += test/pacman/tests/remove052.py
|
|||
TESTS += test/pacman/tests/remove060.py
|
||||
TESTS += test/pacman/tests/remove070.py
|
||||
TESTS += test/pacman/tests/remove071.py
|
||||
TESTS += test/pacman/tests/replace-and-upgrade-package.py
|
||||
TESTS += test/pacman/tests/replace100.py
|
||||
TESTS += test/pacman/tests/replace101.py
|
||||
TESTS += test/pacman/tests/replace102.py
|
||||
|
|
27
test/pacman/tests/replace-and-upgrade-package.py
Normal file
27
test/pacman/tests/replace-and-upgrade-package.py
Normal file
|
@ -0,0 +1,27 @@
|
|||
self.description = 'Simultaneously replace and upgrade a package'
|
||||
|
||||
# replacement package
|
||||
sp1 = pmpkg('foo1', '1-2')
|
||||
sp1.replaces = ['foo=1-1']
|
||||
sp1.conflicts = ['foo=1-1']
|
||||
self.addpkg2db('sync', sp1)
|
||||
|
||||
# upgrade package
|
||||
sp2 = pmpkg('foo', '2-1')
|
||||
self.addpkg2db('sync', sp2)
|
||||
|
||||
# depend on upgraded package to pull it into transaction
|
||||
sp3 = pmpkg('bar', '1-1')
|
||||
sp3.depends = [ 'foo=2-1' ]
|
||||
self.addpkg2db('sync', sp3)
|
||||
|
||||
lp = pmpkg('foo', '1-1')
|
||||
self.addpkg2db('local', lp)
|
||||
|
||||
self.args = "-Su bar"
|
||||
|
||||
self.addrule('PACMAN_RETCODE=0')
|
||||
self.addrule('PKG_VERSION=foo1|1-2')
|
||||
self.addrule('PKG_VERSION=foo|2-1')
|
||||
self.addrule('PKG_VERSION=bar|1-1')
|
||||
self.addrule('!PACMAN_OUTPUT=error')
|
Loading…
Add table
Reference in a new issue