fixes in handling syncfirst and replaces

This commit is contained in:
guinux 2013-06-09 13:16:53 +02:00
parent fdbf990a73
commit 4f063d8b10

View File

@ -476,10 +476,10 @@ def do_sysupgrade():
init = transaction.init_transaction(noconflicts = True, recurse = True)
else:
init = transaction.init_transaction(noconflicts = True)
if init:
error = transaction.Sysupgrade()
if error:
handle_error(error)
#~ if init:
#~ error = transaction.Sysupgrade()
#~ if error:
#~ handle_error(error)
if init:
if not error:
for name in transaction.to_add | transaction.to_update:
@ -565,25 +565,37 @@ def check_conflicts():
if len(to_install) == 7:
installed_linux.append(to_install)
# check if new pkgs will replace installed ones
to_replace = set()
do_syncfirst, updates = transaction.get_updates()
if transaction.to_update:
if not do_syncfirst:
for pkg in transaction.syncpkgs.values():
for replace in pkg.replaces:
found_replace = pyalpm.find_satisfier(transaction.localpkgs.values(), replace)
if found_replace:
if not common.format_pkg_name(replace) in transaction.syncpkgs.keys():
#if not common.format_pkg_name(replace) in transaction.syncpkgs.keys():
if found_replace.name != pkg.name:
if not pkg.name in transaction.localpkgs.keys():
if common.format_pkg_name(replace) in transaction.localpkgs.keys():
if not found_replace.name in transaction.to_remove:
transaction.to_remove.add(found_replace.name)
to_replace.add(found_replace.name)
if warning:
warning += '\n'
warning += _('{pkgname1} will be replaced by {pkgname2}').format(pkgname1 = found_replace.name, pkgname2 = pkg.name)
print(_('{pkgname1} will be replaced by {pkgname2}').format(pkgname1 = found_replace.name, pkgname2 = pkg.name))
if found_replace.name in transaction.to_update:
transaction.to_update.discard(found_replace.name)
index = None
for _pkg in depends[0]:
if _pkg.name == found_replace.name:
index = depends[0].index(_pkg)
depends[0].pop(index)
if not pkg.name in already_checked:
depends[0].append(pkg)
already_checked.add(pkg.name)
transaction.to_add.add(pkg.name)
# start loops to check pkgs
i = 0
while depends[i]:
@ -679,10 +691,13 @@ def check_conflicts():
if found_replace.name != pkg.name:
if not found_replace.name in transaction.to_remove:
transaction.to_remove.add(found_replace.name)
to_replace.add(found_replace.name)
if warning:
warning += '\n'
warning += _('{pkgname1} will be replaced by {pkgname2}').format(pkgname1 = found_replace.name, pkgname2 = pkg.name)
print(_('{pkgname1} will be replaced by {pkgname2}').format(pkgname1 = found_replace.name, pkgname2 = pkg.name))
if found_replace.name in transaction.to_update:
transaction.to_update.discard(found_replace.name)
# check pkg conflicts
for conflict in pkg.conflicts:
# check if the pkg conflicts with installed ones
@ -827,6 +842,7 @@ def check_conflicts():
for pkg_list in depends:
for pkg in pkg_list:
wont_be_removed.add(pkg.name)
wont_be_removed -= to_replace
transaction.to_remove -= wont_be_removed
if mode:
@ -912,6 +928,7 @@ class Handler:
ProgressWindow.hide()
ConfDialog.hide()
transaction.Release()
if mode == 'manager':
refresh_packages_list()
def on_TransValidButton_clicked(self, *arg):