[pacman-dev] [PATCH 3/3] Don't prompt the user for unignore of IgnorePkg/IgnoreGroup packages

Dan McGee dpmcgee at gmail.com
Wed Feb 18 22:20:02 EST 2009


On Mon, Jan 26, 2009 at 6:48 AM, Bryan Ischo
<bji-keyword-pacman.3644cb at www.ischo.com> wrote:
> From: Bryan Ischo <bryan at ischo.com>
>
> This eliminates many unnecessary prompts when IgnorePkg/IgnoreGroup is
> used.
>
> Signed-off-by: Bryan Ischo <bryan at ischo.com>
> ---
>  lib/libalpm/deps.c         |   20 +++++++++++-------
>  lib/libalpm/deps.h         |    2 +-
>  lib/libalpm/sync.c         |    4 +-
>  pactest/tests/ignore001.py |   17 ++++++++++++++++
>  pactest/tests/ignore002.py |   35 +++++++++++++++++++++++++++++++++
>  pactest/tests/ignore003.py |   35 +++++++++++++++++++++++++++++++++
>  pactest/tests/ignore004.py |   46 ++++++++++++++++++++++++++++++++++++++++++++
>  pactest/tests/ignore005.py |   46 ++++++++++++++++++++++++++++++++++++++++++++
>  src/pacman/callback.c      |   11 +--------
>  9 files changed, 196 insertions(+), 20 deletions(-)
>  create mode 100644 pactest/tests/ignore001.py
>  create mode 100644 pactest/tests/ignore002.py
>  create mode 100644 pactest/tests/ignore003.py
>  create mode 100644 pactest/tests/ignore004.py
>  create mode 100644 pactest/tests/ignore005.py
>
> diff --git a/lib/libalpm/deps.c b/lib/libalpm/deps.c
> index 8bec4c0..313100b 100644
> --- a/lib/libalpm/deps.c
> +++ b/lib/libalpm/deps.c
> @@ -505,7 +505,7 @@ void _alpm_recursedeps(pmdb_t *db, alpm_list_t *targs, int include_explicit)
>  }
>
>  /* helper function for resolvedeps: search for dep satisfier in dbs */
> -pmpkg_t *_alpm_resolvedep(pmdepend_t *dep, alpm_list_t *dbs, alpm_list_t *excluding, pmpkg_t *tpkg)
> +pmpkg_t *_alpm_resolvedep(pmdepend_t *dep, alpm_list_t *dbs, alpm_list_t *excluding, int prompt_for_unignore)
It might be helpful if we threw some doxygen block commenting on this
guy, and then shortened the last argument to just "prompt", rather
than this rather long variable name. You can wrap the line too. :P

>  {
>        alpm_list_t *i, *j;
>        /* 1. literals */
> @@ -513,9 +513,11 @@ pmpkg_t *_alpm_resolvedep(pmdepend_t *dep, alpm_list_t *dbs, alpm_list_t *exclud
>                pmpkg_t *pkg = _alpm_db_get_pkgfromcache(i->data, dep->name);
>                if(pkg && alpm_depcmp(pkg, dep) && !_alpm_pkg_find(excluding, pkg->name)) {
>                        if(_alpm_pkg_should_ignore(pkg)) {
> -                               int install;
> -                               QUESTION(handle->trans, PM_TRANS_CONV_INSTALL_IGNOREPKG, pkg,
> -                                        tpkg, NULL, &install);
> +                               int install = 0;
> +                               if (prompt_for_unignore) {
> +                                       QUESTION(handle->trans, PM_TRANS_CONV_INSTALL_IGNOREPKG, pkg,
> +                                                        NULL, NULL, &install);
> +                               }
>                                if(!install) {
>                                        continue;
>                                }
> @@ -530,9 +532,11 @@ pmpkg_t *_alpm_resolvedep(pmdepend_t *dep, alpm_list_t *dbs, alpm_list_t *exclud
>                        if(alpm_depcmp(pkg, dep) && strcmp(pkg->name, dep->name) &&
>                                     !_alpm_pkg_find(excluding, pkg->name)) {
>                                if(_alpm_pkg_should_ignore(pkg)) {
> -                                       int install;
> -                                       QUESTION(handle->trans, PM_TRANS_CONV_INSTALL_IGNOREPKG, pkg,
> -                                                tpkg, NULL, &install);
> +                                       int install = 0;
> +                                       if (prompt_for_unignore) {
> +                                               QUESTION(handle->trans, PM_TRANS_CONV_INSTALL_IGNOREPKG, pkg,
> +                                                                NULL, NULL, &install);
> +                                       }
>                                        if(!install) {
>                                                continue;
>                                        }
> @@ -605,7 +609,7 @@ int _alpm_resolvedeps(pmdb_t *local, alpm_list_t *dbs_sync, pmpkg_t *pkg,
>                                continue;
>                        }
>                        /* find a satisfier package in the given repositories */
> -                       pmpkg_t *spkg = _alpm_resolvedep(missdep, dbs_sync, *packages, tpkg);
> +                       pmpkg_t *spkg = _alpm_resolvedep(missdep, dbs_sync, *packages, 0);
>                        if(!spkg) {
>                                pm_errno = PM_ERR_UNSATISFIED_DEPS;
>                                char *missdepstring = alpm_dep_compute_string(missdep);
> diff --git a/lib/libalpm/deps.h b/lib/libalpm/deps.h
> index 0727095..97b0538 100644
> --- a/lib/libalpm/deps.h
> +++ b/lib/libalpm/deps.h
> @@ -47,7 +47,7 @@ pmdepmissing_t *_alpm_depmiss_new(const char *target, pmdepend_t *dep,
>  void _alpm_depmiss_free(pmdepmissing_t *miss);
>  alpm_list_t *_alpm_sortbydeps(alpm_list_t *targets, int reverse);
>  void _alpm_recursedeps(pmdb_t *db, alpm_list_t *targs, int include_explicit);
> -pmpkg_t *_alpm_resolvedep(pmdepend_t *dep, alpm_list_t *dbs, alpm_list_t *excluding, pmpkg_t *tpkg);
> +pmpkg_t *_alpm_resolvedep(pmdepend_t *dep, alpm_list_t *dbs, alpm_list_t *excluding, int prompt_for_unignore);
>  int _alpm_resolvedeps(pmdb_t *local, alpm_list_t *dbs_sync, pmpkg_t *pkg,
>                      alpm_list_t **packages, alpm_list_t *remove, alpm_list_t **data);
>  int _alpm_dep_edge(pmpkg_t *pkg1, pmpkg_t *pkg2);
> diff --git a/lib/libalpm/sync.c b/lib/libalpm/sync.c
> index ea903f4..6e7c709 100644
> --- a/lib/libalpm/sync.c
> +++ b/lib/libalpm/sync.c
> @@ -285,12 +285,12 @@ int _alpm_sync_addtarget(pmtrans_t *trans, pmdb_t *db_local, alpm_list_t *dbs_sy
>                        RET_ERR(PM_ERR_PKG_REPO_NOT_FOUND, -1);
>                }
>                dep = _alpm_splitdep(targ);
> -               spkg = _alpm_resolvedep(dep, dbs, NULL, NULL);
> +               spkg = _alpm_resolvedep(dep, dbs, NULL, 1);
>                _alpm_dep_free(dep);
>                alpm_list_free(dbs);
>        } else {
>                dep = _alpm_splitdep(targline);
> -               spkg = _alpm_resolvedep(dep, dbs_sync, NULL, NULL);
> +               spkg = _alpm_resolvedep(dep, dbs_sync, NULL, 1);
>                _alpm_dep_free(dep);
>        }
>        FREE(targline);
> diff --git a/pactest/tests/ignore001.py b/pactest/tests/ignore001.py
> new file mode 100644
> index 0000000..bf8e8c6
> --- /dev/null
> +++ b/pactest/tests/ignore001.py
> @@ -0,0 +1,17 @@
> +self.description = "Sync with irrelevent ignored packages"
s/relevent/relevant/g in your descriptions. Spelling.
> +
> +package1 = pmpkg("package1")
> +self.addpkg2db("local", package1)
> +
> +package2 = pmpkg("package2")
> +self.addpkg2db("local", package2)
> +
> +package2up = pmpkg("package2", "2.0-1")
> +self.addpkg2db("sync", package2up)
> +
> +self.option["IgnorePkg"] = ["irrelevent"]
> +self.args = "-Su"
> +
> +self.addrule("PACMAN_RETCODE=0")
> +self.addrule("PKG_VERSION=package1|1.0-1")
> +self.addrule("PKG_VERSION=package2|2.0-1")
> diff --git a/pactest/tests/ignore002.py b/pactest/tests/ignore002.py
> new file mode 100644
> index 0000000..b64b70a
> --- /dev/null
> +++ b/pactest/tests/ignore002.py
> @@ -0,0 +1,35 @@
> +self.description = "Sync with relevent ignored packages"
> +
> +package1 = pmpkg("package1")
> +self.addpkg2db("local", package1)
> +
> +package2 = pmpkg("package2")
> +self.addpkg2db("local", package2)
> +
> +package3 = pmpkg("package3")
> +package3.depends = ["package2=1.0-1"]
> +self.addpkg2db("local", package3)
> +
> +package4 = pmpkg("package4")
> +package4.depends = ["package3=1.0-1"]
> +self.addpkg2db("local", package4)
> +
> +package2up = pmpkg("package2", "2.0-1")
> +self.addpkg2db("sync", package2up)
> +
> +package3up = pmpkg("package3", "2.0-1")
> +package3up.depends = ["package2=2.0-1"]
> +self.addpkg2db("sync", package3up)
> +
> +package4up = pmpkg("package4", "2.0-1")
> +package4up.depends = ["package3=2.0-1"]
> +self.addpkg2db("sync", package4up)
> +
> +self.option["IgnorePkg"] = ["package2"]
> +self.args = "-Su"
> +
> +self.addrule("PACMAN_RETCODE=0")
> +self.addrule("PKG_VERSION=package1|1.0-1")
> +self.addrule("PKG_VERSION=package2|1.0-1")
> +self.addrule("PKG_VERSION=package3|1.0-1")
> +self.addrule("PKG_VERSION=package4|1.0-1")
> diff --git a/pactest/tests/ignore003.py b/pactest/tests/ignore003.py
> new file mode 100644
> index 0000000..f7c1658
> --- /dev/null
> +++ b/pactest/tests/ignore003.py
> @@ -0,0 +1,35 @@
> +self.description = "Sync with relevent ignored packages and dependency loop"
> +
> +package1 = pmpkg("package1")
> +self.addpkg2db("local", package1)
> +
> +package2 = pmpkg("package2")
> +self.addpkg2db("local", package2)
> +
> +package3 = pmpkg("package3")
> +package3.depends = ["package2=1.0-1"]
> +self.addpkg2db("local", package3)
> +
> +package4 = pmpkg("package4")
> +package4.depends = ["package3=1.0-1"]
> +self.addpkg2db("local", package4)
> +
> +package2up = pmpkg("package2", "2.0-1")
> +self.addpkg2db("sync", package2up)
> +
> +package3up = pmpkg("package3", "2.0-1")
> +package3up.depends = ["package2=2.0-1", "package4=2.0-1"]
> +self.addpkg2db("sync", package3up)
> +
> +package4up = pmpkg("package4", "2.0-1")
> +package4up.depends = ["package3=2.0-1"]
> +self.addpkg2db("sync", package4up)
> +
> +self.option["IgnorePkg"] = ["package2"]
> +self.args = "-Su"
> +
> +self.addrule("PACMAN_RETCODE=0")
> +self.addrule("PKG_VERSION=package1|1.0-1")
> +self.addrule("PKG_VERSION=package2|1.0-1")
> +self.addrule("PKG_VERSION=package3|1.0-1")
> +self.addrule("PKG_VERSION=package4|1.0-1")
> diff --git a/pactest/tests/ignore004.py b/pactest/tests/ignore004.py
> new file mode 100644
> index 0000000..fff12f6
> --- /dev/null
> +++ b/pactest/tests/ignore004.py
> @@ -0,0 +1,46 @@
> +self.description = "Sync with ignore causing top-level to be ignored"
> +
> +packageA1 = pmpkg("packageA1")
> +packageA1.depends = ["packageA2=1.0-1", "packageA3=1.0-1"];
> +self.addpkg2db("local", packageA1)
> +
> +packageA2 = pmpkg("packageA2")
> +packageA2.depends = ["packageA4=1.0-1", "packageA5=1.0-1"];
> +self.addpkg2db("local", packageA2)
> +
> +packageA3 = pmpkg("packageA3")
> +self.addpkg2db("local", packageA3)
> +
> +packageA4 = pmpkg("packageA4")
> +self.addpkg2db("local", packageA4)
> +
> +packageA5 = pmpkg("packageA5")
> +self.addpkg2db("local", packageA5)
> +
> +packageA1up = pmpkg("packageA1", "2.0-1")
> +packageA1up.depends = ["packageA2=2.0-1", "packageA3=2.0-1"];
> +self.addpkg2db("sync", packageA1up)
> +
> +packageA2up = pmpkg("packageA2", "2.0-1")
> +packageA2up.depends = ["packageA4=2.0-1", "packageA5=2.0-1"];
> +self.addpkg2db("sync", packageA2up)
> +
> +packageA3up = pmpkg("packageA3", "2.0-1")
> +self.addpkg2db("sync", packageA3up)
> +
> +packageA4up = pmpkg("packageA4", "2.0-1")
> +self.addpkg2db("sync", packageA4up)
> +
> +packageA5up = pmpkg("packageA5", "2.0-1")
> +self.addpkg2db("sync", packageA5up)
> +
> +
> +self.option["IgnorePkg"] = ["packageA3"]
> +self.args = "-S packageA1"
> +
> +self.addrule("PACMAN_RETCODE=0")
> +self.addrule("PKG_VERSION=packageA1|1.0-1")
> +self.addrule("PKG_VERSION=packageA2|1.0-1")
> +self.addrule("PKG_VERSION=packageA3|1.0-1")
> +self.addrule("PKG_VERSION=packageA4|1.0-1")
> +self.addrule("PKG_VERSION=packageA5|1.0-1")
> diff --git a/pactest/tests/ignore005.py b/pactest/tests/ignore005.py
> new file mode 100644
> index 0000000..1957ea4
> --- /dev/null
> +++ b/pactest/tests/ignore005.py
> @@ -0,0 +1,46 @@
> +self.description = "Sync with ignore causing top-level to be included"
> +
> +packageA1 = pmpkg("packageA1")
> +packageA1.depends = ["packageA2>=1.0-1", "packageA3=1.0-1"];
> +self.addpkg2db("local", packageA1)
> +
> +packageA2 = pmpkg("packageA2")
> +packageA2.depends = ["packageA4=1.0-1", "packageA5=1.0-1"];
> +self.addpkg2db("local", packageA2)
> +
> +packageA3 = pmpkg("packageA3")
> +self.addpkg2db("local", packageA3)
> +
> +packageA4 = pmpkg("packageA4")
> +self.addpkg2db("local", packageA4)
> +
> +packageA5 = pmpkg("packageA5")
> +self.addpkg2db("local", packageA5)
> +
> +packageA1up = pmpkg("packageA1", "2.0-1")
> +packageA1up.depends = ["packageA2>=2.0-1", "packageA3=2.0-1"];
> +self.addpkg2db("sync", packageA1up)
> +
> +packageA2up = pmpkg("packageA2", "2.0-1")
> +packageA2up.depends = ["packageA4=2.0-1", "packageA5=2.0-1"];
> +self.addpkg2db("sync", packageA2up)
> +
> +packageA3up = pmpkg("packageA3", "2.0-1")
> +self.addpkg2db("sync", packageA3up)
> +
> +packageA4up = pmpkg("packageA4", "2.0-1")
> +self.addpkg2db("sync", packageA4up)
> +
> +packageA5up = pmpkg("packageA5", "2.0-1")
> +self.addpkg2db("sync", packageA5up)
> +
> +
> +self.option["IgnorePkg"] = ["packageA3"]
> +self.args = "-S packageA1 packageA2"
> +
> +self.addrule("PACMAN_RETCODE=0")
> +self.addrule("PKG_VERSION=packageA1|1.0-1")
> +self.addrule("PKG_VERSION=packageA2|2.0-1")
> +self.addrule("PKG_VERSION=packageA3|1.0-1")
> +self.addrule("PKG_VERSION=packageA4|2.0-1")
> +self.addrule("PKG_VERSION=packageA5|2.0-1")

Are there any pactests that could be written that have pacman
returning 1? Or does that just not happen anymore with this new
machinery (or at least isn't pactest-able)?

> diff --git a/src/pacman/callback.c b/src/pacman/callback.c
> index 1e2bff3..65b5ab7 100644
> --- a/src/pacman/callback.c
> +++ b/src/pacman/callback.c
> @@ -248,15 +248,8 @@ void cb_trans_conv(pmtransconv_t event, void *data1, void *data2,
>  {
>        switch(event) {
>                case PM_TRANS_CONV_INSTALL_IGNOREPKG:
> -                       if(data2) {
> -                               /* TODO we take this route based on data2 being not null? WTF */
> -                               *response = yesno(_(":: %s requires installing %s from IgnorePkg/IgnoreGroup. Install anyway?"),
> -                                               alpm_pkg_get_name(data2),
> -                                               alpm_pkg_get_name(data1));
> -                       } else {
> -                               *response = yesno(_(":: %s is in IgnorePkg/IgnoreGroup. Install anyway?"),
> -                                               alpm_pkg_get_name(data1));
> -                       }
> +                       *response = yesno(_(":: %s is in IgnorePkg/IgnoreGroup. Install anyway?"),
> +                                                         alpm_pkg_get_name(data1));
Nice, you killed one of my longstanding comments!

>                        break;
>                case PM_TRANS_CONV_REPLACE_PKG:
>                        *response = yesno(_(":: Replace %s with %s/%s?"),
> --
> 1.6.1


More information about the pacman-dev mailing list