diff options
-rw-r--r-- | doc/Makefile.am | 20 | ||||
-rw-r--r-- | lib/libalpm/deps.c | 49 | ||||
-rw-r--r-- | pactest/README | 22 | ||||
-rwxr-xr-x | pactest/pmrule.py | 3 | ||||
-rw-r--r-- | pactest/tests/upgrade052.py | 1 | ||||
-rw-r--r-- | pactest/tests/upgrade053.py | 1 | ||||
-rw-r--r-- | pactest/tests/upgrade054.py | 1 | ||||
-rw-r--r-- | pactest/tests/upgrade055.py | 2 | ||||
-rw-r--r-- | pactest/tests/upgrade056.py | 2 | ||||
-rw-r--r-- | pactest/tests/upgrade057.py | 23 |
10 files changed, 68 insertions, 56 deletions
diff --git a/doc/Makefile.am b/doc/Makefile.am index ead359c3..f748ee6b 100644 --- a/doc/Makefile.am +++ b/doc/Makefile.am @@ -12,26 +12,6 @@ endif EXTRA_DIST = $(man_MANS) -MAN2HTML=man2html -r -SUFFIXES=.3 .5 .8 .3.html .5.html .8.html - -# targets for each man section, sed removes a weird artifact left by man2html -.3.3.html: - $(RM) $@ - -${MAN2HTML} $< | sed '1,2d' > $@ - -.5.5.html: - $(RM) $@ - -${MAN2HTML} $< | sed '1,2d' > $@ - -.8.8.html: - $(RM) $@ - -${MAN2HTML} $< | sed '1,2d' > $@ - -man2html: pacman.8.html makepkg.8.html PKGBUILD.5.html makepkg.conf.5.html pacman.conf.5.html libalpm.3.html - clean-local: - $(RM) *.html $(RM) man3/*.3 -.PHONY: man2html diff --git a/lib/libalpm/deps.c b/lib/libalpm/deps.c index d1d79db4..d3195d39 100644 --- a/lib/libalpm/deps.c +++ b/lib/libalpm/deps.c @@ -187,10 +187,12 @@ alpm_list_t *_alpm_sortbydeps(alpm_list_t *targets, pmtranstype_t mode) return(newtargs); } -/* Returns a alpm_list_t* of missing_t pointers. - * - * dependencies can include versions with depmod operators. - * +/** Checks dependencies and returns missing ones in a list. Dependencies can include versions with depmod operators. + * @param trans pointer to the transaction object + * @param db pointer to the local package database + * @param op transaction type + * @param packages an alpm_list_t* of packages to be checked + * @return an alpm_list_t* of missing_t pointers. */ alpm_list_t *_alpm_checkdeps(pmtrans_t *trans, pmdb_t *db, pmtranstype_t op, alpm_list_t *packages) @@ -236,32 +238,19 @@ alpm_list_t *_alpm_checkdeps(pmtrans_t *trans, pmdb_t *db, pmtranstype_t op, continue; } _alpm_db_read(db, p, INFRQ_DEPENDS); - for(k = p->depends; k && !found; k = k->next) { - /* find the dependency info in p->depends */ - _alpm_splitdep(k->data, &depend); - if(!strcmp(depend.name, oldpkg->name)) { - found = 1; - } - } - if(found == 0) { - /* look for packages that list depend.name as a "provide" */ - alpm_list_t *provides = _alpm_db_whatprovides(db, depend.name); - if(provides == NULL) { - /* not found */ - continue; - } - /* we found an installed package that provides depend.name */ - FREELISTPTR(provides); - } - if(!_alpm_depcmp(tp, &depend)) { - _alpm_log(PM_LOG_DEBUG, _("checkdeps: found %s as required by %s"), - depend.name, p->name); - miss = _alpm_depmiss_new(p->name, PM_DEP_TYPE_REQUIRED, depend.mod, - depend.name, depend.version); - if(!_alpm_depmiss_isin(miss, baddeps)) { - baddeps = alpm_list_add(baddeps, miss); - } else { - FREE(miss); + for(k = p->depends; k; k = k->next) { + /* don't break any existing dependencies (possible provides) */ + _alpm_splitdep(k->data, &depend); + if(_alpm_depcmp(oldpkg, &depend) && !_alpm_depcmp(tp, &depend)) { + _alpm_log(PM_LOG_DEBUG, _("checkdeps: updated '%s' won't satisfy a dependency of '%s'"), + oldpkg->name, p->name); + miss = _alpm_depmiss_new(p->name, PM_DEP_TYPE_REQUIRED, depend.mod, + depend.name, depend.version); + if(!_alpm_depmiss_isin(miss, baddeps)) { + baddeps = alpm_list_add(baddeps, miss); + } else { + FREE(miss); + } } } } diff --git a/pactest/README b/pactest/README index 7ef24b1d..b995edc1 100644 --- a/pactest/README +++ b/pactest/README @@ -102,7 +102,7 @@ Example: option ------ -A dictionnary that holds the data used in the pacman configuration file. +A dictionary that holds the data used in the pacman configuration file. It has 3 keys, each one of them pointing at a list of strings: - noupgrade - noextract @@ -269,9 +269,8 @@ Possible rules are: PACMAN_RETCODE=value PACMAN_OUTPUT=value -For the RETCODE one, pactest will compare pacman return code with the value -provided as an item. -For the OUTPUT one, pactest will grep pacman outputs for the given value. +For RETCODE, pactest will ensure the pacman return code is the value given. +For OUTPUT, pactest will grep pacman outputs for the given value. Note: PACMAN_OUTPUT should not be used. Pacman outputs are likely to change from one release to another, so that it's reliability is quite low. @@ -286,14 +285,19 @@ Possible rules are: PKG_EXIST=name PKG_MODIFIED=name PKG_VERSION=name|version + PKG_GROUPS=name|group + PKG_PROVIDES=name|providename PKG_DEPENDS=name|depname PKG_REQUIREDBY=name|reqbyname + PKG_REASON=name|intvalue + PKG_FILES=name|filename + PKG_BACKUP=name|backupname Example: PKG_DEPENDS=ncurses|glibc -pactest will test the local database entry "ncurses" has "glibc" in its -DEPENDS field. +pactest will test to ensure the local database entry "ncurses" has "glibc" in +its DEPENDS field. . FILE rules @@ -302,3 +306,9 @@ DEPENDS field. FILE_PACNEW=path/to/file FILE_PACSAVE=path/to/file FILE_PACORIG=path/to/file + +Example: + FILE_EXIST=etc/test.conf + +pactest will ensure the file /etc/test.conf exists in the filesystem. + diff --git a/pactest/pmrule.py b/pactest/pmrule.py index 78811957..33a29f0e 100755 --- a/pactest/pmrule.py +++ b/pactest/pmrule.py @@ -76,6 +76,9 @@ class pmrule: elif case == "GROUPS": if not value in newpkg.groups: success = 0 + elif case == "PROVIDES": + if not value in newpkg.provides: + success = 0 elif case == "DEPENDS": if not value in newpkg.depends: success = 0 diff --git a/pactest/tests/upgrade052.py b/pactest/tests/upgrade052.py index 5579edb1..7db85df9 100644 --- a/pactest/tests/upgrade052.py +++ b/pactest/tests/upgrade052.py @@ -18,3 +18,4 @@ self.args = "-U %s" % p.filename() self.addrule("PACMAN_RETCODE=1") self.addrule("PKG_EXIST=pkg1") self.addrule("PKG_VERSION=pkg2|1.0-1") +self.addrule("PKG_PROVIDES=pkg2|imaginary") diff --git a/pactest/tests/upgrade053.py b/pactest/tests/upgrade053.py index 78de0b5e..4cbaa1f8 100644 --- a/pactest/tests/upgrade053.py +++ b/pactest/tests/upgrade053.py @@ -17,3 +17,4 @@ self.args = "-U %s" % p.filename() self.addrule("PACMAN_RETCODE=0") self.addrule("PKG_VERSION=pkg1|1.0-2") self.addrule("PKG_EXIST=pkg2") +self.addrule("PKG_REQUIREDBY=pkg2|pkg1") diff --git a/pactest/tests/upgrade054.py b/pactest/tests/upgrade054.py index 817d1b3d..b60f15f4 100644 --- a/pactest/tests/upgrade054.py +++ b/pactest/tests/upgrade054.py @@ -17,3 +17,4 @@ self.args = "-U %s" % p.filename() self.addrule("PACMAN_RETCODE=0") self.addrule("PKG_VERSION=pkg1|1.0-2") self.addrule("PKG_EXIST=pkg2") +self.addrule("PKG_REQUIREDBY=pkg2|pkg1") diff --git a/pactest/tests/upgrade055.py b/pactest/tests/upgrade055.py index c70c08da..7cdf6b5d 100644 --- a/pactest/tests/upgrade055.py +++ b/pactest/tests/upgrade055.py @@ -24,3 +24,5 @@ self.addrule("PACMAN_RETCODE=0") self.addrule("PKG_EXIST=pkg1") self.addrule("PKG_VERSION=pkg2|1.0-2") self.addrule("PKG_EXIST=pkg3") +self.addrule("PKG_REQUIREDBY=pkg2|pkg1") +self.addrule("PKG_DEPENDS=pkg1|imaginary") diff --git a/pactest/tests/upgrade056.py b/pactest/tests/upgrade056.py index 74394b36..db34266b 100644 --- a/pactest/tests/upgrade056.py +++ b/pactest/tests/upgrade056.py @@ -22,3 +22,5 @@ self.addrule("PACMAN_RETCODE=0") self.addrule("PKG_EXIST=pkg1") self.addrule("PKG_VERSION=pkg2|1.0-2") self.addrule("PKG_EXIST=pkg3") +self.addrule("!PKG_REQUIREDBY=pkg1|pkg2") +self.addrule("PKG_REQUIREDBY=pkg1|pkg3") diff --git a/pactest/tests/upgrade057.py b/pactest/tests/upgrade057.py new file mode 100644 index 00000000..fd3e7138 --- /dev/null +++ b/pactest/tests/upgrade057.py @@ -0,0 +1,23 @@ +self.description = "Upgrade a package that both provides and is a dependency" + +lp1 = pmpkg("pkg1") +lp1.depends = ["pkg2", "imag3"] +self.addpkg2db("local", lp1) + +lp2 = pmpkg("pkg2") +lp2.provides = ["imag3"] +lp2.requiredby = ["pkg1"] +self.addpkg2db("local", lp2) + +p = pmpkg("pkg2", "1.0-2") +p.provides = ["imag3"] +self.addpkg(p) + +self.args = "-U %s" % p.filename() + +self.addrule("PACMAN_RETCODE=0") +self.addrule("PKG_EXIST=pkg1") +self.addrule("PKG_VERSION=pkg2|1.0-2") +self.addrule("PKG_REQUIREDBY=pkg2|pkg1") +self.addrule("PKG_DEPENDS=pkg1|pkg2") +self.addrule("PKG_DEPENDS=pkg1|imag3") |