[pacman-dev] [GIT] pacman branch, master now at v3.0.0-305-gf0ea21c
Hello,
This is an automated email from the git hooks/update script, it was
generated because a ref change was pushed to the repository.
Updating branch, master,
via f0ea21cffca62c566c5e4d2c540c70fb891b9f4c (commit)
via ce1fb07436279b2ac70bdad91cf81db550292322 (commit)
via edcefb1d58115d4b5ae65e258f7eb53f33d21172 (commit)
via b5ab4bffb785aa92c89ff2fee1c0c9a980367cd0 (commit)
via 9f9086573a74311913f0d86f5d1e826f2996b35a (commit)
from 1c9f30b9fab998e2d89dd307a90122618d746cb6 (commit)
- Log -----------------------------------------------------------------
commit f0ea21cffca62c566c5e4d2c540c70fb891b9f4c
Author: Dan McGee
On Sat, Jul 14, 2007 at 04:16:46PM -0400, Dan McGee wrote:
Hello,
This is an automated email from the git hooks/update script, it was generated because a ref change was pushed to the repository.
Updating branch, master, via f0ea21cffca62c566c5e4d2c540c70fb891b9f4c (commit) via ce1fb07436279b2ac70bdad91cf81db550292322 (commit) via edcefb1d58115d4b5ae65e258f7eb53f33d21172 (commit) via b5ab4bffb785aa92c89ff2fee1c0c9a980367cd0 (commit) via 9f9086573a74311913f0d86f5d1e826f2996b35a (commit) from 1c9f30b9fab998e2d89dd307a90122618d746cb6 (commit)
- Log ----------------------------------------------------------------- commit f0ea21cffca62c566c5e4d2c540c70fb891b9f4c Author: Dan McGee
Date: Sat Jul 14 09:34:39 2007 -0400 Ensure requiredby entries are removed during an upgrade
This fixes the failure of the requiredby004 pactest in a not so pretty way, but it gets the job done. I purposely used the extremely long name of PM_TRANS_TYPE_REMOVEUPGRADE to be both clear and in the hope that someone else will figure out a better solution.
Original idea from Nagy Gabor, patch updated and cleaned for current code.
Signed-off-by: Dan McGee
I'm wondering if all the wrong requiredby entries caused by this bug is a problem or not. Anyway, I was curious about how broken my current database was, so I made a very hackish change to pacman to check it. It isn't meant for inclusion, it's just for showing that it's done very easily, and so you can run it on your own database to see how it is. If it's useful, we might then discuss about how it could be properly implemented (probably just another query option, but which one and also in which file should that little check function go ?). First the result here : src/pacman/pacman -Q | grep wrong wrong requiredby field ffmpeg for package amrnb wrong requiredby field libldap for package db wrong requiredby field skype for package dbus wrong requiredby field libglade for package docbook-xml wrong requiredby field gcc-gcj for package libart-lgpl wrong requiredby field gtk2 for package libjpeg wrong requiredby field pidgin for package libnetworkmanager wrong requiredby field audacious-plugins for package libsamplerate wrong requiredby field centericq for package libstdc++5 wrong requiredby field screen for package pam wrong requiredby field sshfs for package pkgconfig wrong requiredby field pycairo for package python-numeric wrong requiredby field skype for package qt wrong requiredby field openoffice-base for package ttf-bitstream-vera wrong requiredby field kazehakase for package xulrunner I checked several of these, in each case it's dependencies that were dropped during an upgrade. diff --git a/src/pacman/deptest.c b/src/pacman/deptest.c index 0f149b2..7dde740 100644 --- a/src/pacman/deptest.c +++ b/src/pacman/deptest.c @@ -83,4 +83,26 @@ int pacman_deptest(alpm_list_t *targets) return(retval); } + +int pacman_check(pmpkg_t *pkg) +{ + int retval = 0; + alpm_list_t *reqs, *deps; + + for(reqs = alpm_pkg_get_requiredby(pkg); reqs; reqs = reqs->next) { + int found = 0; + char *reqname = reqs->data; + pmpkg_t *reqpkg = alpm_db_get_pkg(alpm_option_get_localdb(), reqname); + for(deps = alpm_pkg_get_depends(reqpkg); deps && !found; deps = deps->next) { + pmdepend_t *dep = alpm_splitdep(deps->data); + found = alpm_depcmp(pkg, dep); + } + if(!found) { + printf("wrong requiredby field %s for package %s\n", reqname, alpm_pkg_get_name(pkg)); + retval++; + } + } + return(retval); +} + /* vim: set ts=2 sw=2 noet: */ diff --git a/src/pacman/query.c b/src/pacman/query.c index f6c6b5d..87b2a82 100644 --- a/src/pacman/query.c +++ b/src/pacman/query.c @@ -390,6 +390,8 @@ int pacman_query(alpm_list_t *targets) const char *pkgname = alpm_pkg_get_name(pkg); const char *pkgver = alpm_pkg_get_version(pkg); + pacman_check(pkg); + if(config->op_q_info) { dump_pkg_full(pkg, config->op_q_info); } @@ -433,6 +435,8 @@ int pacman_query(alpm_list_t *targets) continue; } + pacman_check(pkg); + /* find a target */ if(config->op_q_info) { dump_pkg_full(pkg, config->op_q_info);
On Mon, Jul 16, 2007 at 09:29:32AM +0200, Xavier wrote:
I'm wondering if all the wrong requiredby entries caused by this bug is a problem or not.
I forgot to say it does cause problems, at least in this case : http://bugs.archlinux.org/task/7622 But there are probably some ways around it.
On 7/16/07, Xavier
On Sat, Jul 14, 2007 at 04:16:46PM -0400, Dan McGee wrote:
Hello,
This is an automated email from the git hooks/update script, it was generated because a ref change was pushed to the repository.
Updating branch, master, via f0ea21cffca62c566c5e4d2c540c70fb891b9f4c (commit) via ce1fb07436279b2ac70bdad91cf81db550292322 (commit) via edcefb1d58115d4b5ae65e258f7eb53f33d21172 (commit) via b5ab4bffb785aa92c89ff2fee1c0c9a980367cd0 (commit) via 9f9086573a74311913f0d86f5d1e826f2996b35a (commit) from 1c9f30b9fab998e2d89dd307a90122618d746cb6 (commit)
- Log ----------------------------------------------------------------- commit f0ea21cffca62c566c5e4d2c540c70fb891b9f4c Author: Dan McGee
Date: Sat Jul 14 09:34:39 2007 -0400 Ensure requiredby entries are removed during an upgrade
This fixes the failure of the requiredby004 pactest in a not so pretty way, but it gets the job done. I purposely used the extremely long name of PM_TRANS_TYPE_REMOVEUPGRADE to be both clear and in the hope that someone else will figure out a better solution.
Original idea from Nagy Gabor, patch updated and cleaned for current code.
Signed-off-by: Dan McGee
I'm wondering if all the wrong requiredby entries caused by this bug is a problem or not. Anyway, I was curious about how broken my current database was, so I made a very hackish change to pacman to check it. It isn't meant for inclusion, it's just for showing that it's done very easily, and so you can run it on your own database to see how it is.
If it's useful, we might then discuss about how it could be properly implemented (probably just another query option, but which one and also in which file should that little check function go ?).
First the result here : src/pacman/pacman -Q | grep wrong wrong requiredby field ffmpeg for package amrnb wrong requiredby field libldap for package db wrong requiredby field skype for package dbus wrong requiredby field libglade for package docbook-xml wrong requiredby field gcc-gcj for package libart-lgpl wrong requiredby field gtk2 for package libjpeg wrong requiredby field pidgin for package libnetworkmanager wrong requiredby field audacious-plugins for package libsamplerate wrong requiredby field centericq for package libstdc++5 wrong requiredby field screen for package pam wrong requiredby field sshfs for package pkgconfig wrong requiredby field pycairo for package python-numeric wrong requiredby field skype for package qt wrong requiredby field openoffice-base for package ttf-bitstream-vera wrong requiredby field kazehakase for package xulrunner
I checked several of these, in each case it's dependencies that were dropped during an upgrade.
diff --git a/src/pacman/deptest.c b/src/pacman/deptest.c index 0f149b2..7dde740 100644 --- a/src/pacman/deptest.c +++ b/src/pacman/deptest.c @@ -83,4 +83,26 @@ int pacman_deptest(alpm_list_t *targets) return(retval); }
+ +int pacman_check(pmpkg_t *pkg) +{ + int retval = 0; + alpm_list_t *reqs, *deps; + + for(reqs = alpm_pkg_get_requiredby(pkg); reqs; reqs = reqs->next) { + int found = 0; + char *reqname = reqs->data; + pmpkg_t *reqpkg = alpm_db_get_pkg(alpm_option_get_localdb(), reqname); + for(deps = alpm_pkg_get_depends(reqpkg); deps && !found; deps = deps->next) { + pmdepend_t *dep = alpm_splitdep(deps->data); + found = alpm_depcmp(pkg, dep); + } + if(!found) { + printf("wrong requiredby field %s for package %s\n", reqname, alpm_pkg_get_name(pkg)); + retval++; + } + } + return(retval); +} + /* vim: set ts=2 sw=2 noet: */ diff --git a/src/pacman/query.c b/src/pacman/query.c index f6c6b5d..87b2a82 100644 --- a/src/pacman/query.c +++ b/src/pacman/query.c @@ -390,6 +390,8 @@ int pacman_query(alpm_list_t *targets) const char *pkgname = alpm_pkg_get_name(pkg); const char *pkgver = alpm_pkg_get_version(pkg);
+ pacman_check(pkg); + if(config->op_q_info) { dump_pkg_full(pkg, config->op_q_info); } @@ -433,6 +435,8 @@ int pacman_query(alpm_list_t *targets) continue; }
+ pacman_check(pkg); + /* find a target */ if(config->op_q_info) { dump_pkg_full(pkg, config->op_q_info);
You could add it to the DB test function, probably in the backend part of it. I think this is a valid thing to check. -Dan
On Mon, Jul 16, 2007 at 09:11:09AM -0400, Dan McGee wrote:
You could add it to the DB test function, probably in the backend part of it. I think this is a valid thing to check.
Looks like alpm_db_test is in db.c, but _alpm_db_test is in be_files, and it suits perfectly there, since this is a low level check (it checks no files are missing). While my test is higher level, and rather belongs to deps.c maybe. So maybe alpm_db_test in db.c could first call _alpm_db_test in be_files.c then _alpm_check_requiredby or something in deps.c ? Also should it try to repair it ? It only detects the extra requiredby entries atm, which were fixed by Nagy UPGRADERM patch. But according to a recent mail from Nagy, there might be missing entries as well, so it should probably compute everything again rather. It would also make more sense to use the existing functions which do that requiredby stuff in libalpm, like trans_update_depends, once it's fixed. So the patch itself is totally useless :) It's mostly the idea that might be interesting.
participants (3)
-
Dan McGee
-
Dan McGee
-
Xavier