summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/Makefile.am20
-rw-r--r--lib/libalpm/deps.c49
-rw-r--r--pactest/README22
-rwxr-xr-xpactest/pmrule.py3
-rw-r--r--pactest/tests/upgrade052.py1
-rw-r--r--pactest/tests/upgrade053.py1
-rw-r--r--pactest/tests/upgrade054.py1
-rw-r--r--pactest/tests/upgrade055.py2
-rw-r--r--pactest/tests/upgrade056.py2
-rw-r--r--pactest/tests/upgrade057.py23
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")