1
0
mirror of https://github.com/moparisthebest/pacman synced 2025-02-28 09:21:53 -05:00

* Added another test as suggested by Nagy on the ML- a package both provides

for and is a dependency of another package. (upgrade057)
* Removed man2html stuff from doc/Makefile.am.
* Patch: improved depends checking in _alpm_checkdeps
  Nagy Gabor <ngaba@petra.hos.u-szeged.hu>
* Slight revisions to pmrule.py to allow for a PKG_PROVIDES test.
* Very quick updates to the pactest README.
* Added rules to some of the newer upgrade tests. Note: upgrade055 now fails
  due to requiredby entries not being written packages that are dependencies
  in a provides role.
This commit is contained in:
Dan McGee 2007-02-28 04:00:21 +00:00
parent 820fae9d75
commit bd7eb9475c
10 changed files with 68 additions and 56 deletions

View File

@ -12,26 +12,6 @@ endif
EXTRA_DIST = $(man_MANS) 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: clean-local:
$(RM) *.html
$(RM) man3/*.3 $(RM) man3/*.3
.PHONY: man2html

View File

@ -187,10 +187,12 @@ alpm_list_t *_alpm_sortbydeps(alpm_list_t *targets, pmtranstype_t mode)
return(newtargs); return(newtargs);
} }
/* Returns a alpm_list_t* of missing_t pointers. /** Checks dependencies and returns missing ones in a list. Dependencies can include versions with depmod operators.
* * @param trans pointer to the transaction object
* dependencies can include versions with depmod operators. * @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 *_alpm_checkdeps(pmtrans_t *trans, pmdb_t *db, pmtranstype_t op,
alpm_list_t *packages) alpm_list_t *packages)
@ -236,32 +238,19 @@ alpm_list_t *_alpm_checkdeps(pmtrans_t *trans, pmdb_t *db, pmtranstype_t op,
continue; continue;
} }
_alpm_db_read(db, p, INFRQ_DEPENDS); _alpm_db_read(db, p, INFRQ_DEPENDS);
for(k = p->depends; k && !found; k = k->next) { for(k = p->depends; k; k = k->next) {
/* find the dependency info in p->depends */ /* don't break any existing dependencies (possible provides) */
_alpm_splitdep(k->data, &depend); _alpm_splitdep(k->data, &depend);
if(!strcmp(depend.name, oldpkg->name)) { if(_alpm_depcmp(oldpkg, &depend) && !_alpm_depcmp(tp, &depend)) {
found = 1; _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,
if(found == 0) { depend.name, depend.version);
/* look for packages that list depend.name as a "provide" */ if(!_alpm_depmiss_isin(miss, baddeps)) {
alpm_list_t *provides = _alpm_db_whatprovides(db, depend.name); baddeps = alpm_list_add(baddeps, miss);
if(provides == NULL) { } else {
/* not found */ FREE(miss);
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);
} }
} }
} }

View File

@ -102,7 +102,7 @@ Example:
option 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: It has 3 keys, each one of them pointing at a list of strings:
- noupgrade - noupgrade
- noextract - noextract
@ -269,9 +269,8 @@ Possible rules are:
PACMAN_RETCODE=value PACMAN_RETCODE=value
PACMAN_OUTPUT=value PACMAN_OUTPUT=value
For the RETCODE one, pactest will compare pacman return code with the value For RETCODE, pactest will ensure the pacman return code is the value given.
provided as an item. For OUTPUT, pactest will grep pacman outputs for the given value.
For the OUTPUT one, pactest will grep pacman outputs for the given value.
Note: PACMAN_OUTPUT should not be used. Pacman outputs are likely to change 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. from one release to another, so that it's reliability is quite low.
@ -286,14 +285,19 @@ Possible rules are:
PKG_EXIST=name PKG_EXIST=name
PKG_MODIFIED=name PKG_MODIFIED=name
PKG_VERSION=name|version PKG_VERSION=name|version
PKG_GROUPS=name|group
PKG_PROVIDES=name|providename
PKG_DEPENDS=name|depname PKG_DEPENDS=name|depname
PKG_REQUIREDBY=name|reqbyname PKG_REQUIREDBY=name|reqbyname
PKG_REASON=name|intvalue
PKG_FILES=name|filename
PKG_BACKUP=name|backupname
Example: Example:
PKG_DEPENDS=ncurses|glibc PKG_DEPENDS=ncurses|glibc
pactest will test the local database entry "ncurses" has "glibc" in its pactest will test to ensure the local database entry "ncurses" has "glibc" in
DEPENDS field. its DEPENDS field.
. FILE rules . FILE rules
@ -302,3 +306,9 @@ DEPENDS field.
FILE_PACNEW=path/to/file FILE_PACNEW=path/to/file
FILE_PACSAVE=path/to/file FILE_PACSAVE=path/to/file
FILE_PACORIG=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.

View File

@ -76,6 +76,9 @@ class pmrule:
elif case == "GROUPS": elif case == "GROUPS":
if not value in newpkg.groups: if not value in newpkg.groups:
success = 0 success = 0
elif case == "PROVIDES":
if not value in newpkg.provides:
success = 0
elif case == "DEPENDS": elif case == "DEPENDS":
if not value in newpkg.depends: if not value in newpkg.depends:
success = 0 success = 0

View File

@ -18,3 +18,4 @@ self.args = "-U %s" % p.filename()
self.addrule("PACMAN_RETCODE=1") self.addrule("PACMAN_RETCODE=1")
self.addrule("PKG_EXIST=pkg1") self.addrule("PKG_EXIST=pkg1")
self.addrule("PKG_VERSION=pkg2|1.0-1") self.addrule("PKG_VERSION=pkg2|1.0-1")
self.addrule("PKG_PROVIDES=pkg2|imaginary")

View File

@ -17,3 +17,4 @@ self.args = "-U %s" % p.filename()
self.addrule("PACMAN_RETCODE=0") self.addrule("PACMAN_RETCODE=0")
self.addrule("PKG_VERSION=pkg1|1.0-2") self.addrule("PKG_VERSION=pkg1|1.0-2")
self.addrule("PKG_EXIST=pkg2") self.addrule("PKG_EXIST=pkg2")
self.addrule("PKG_REQUIREDBY=pkg2|pkg1")

View File

@ -17,3 +17,4 @@ self.args = "-U %s" % p.filename()
self.addrule("PACMAN_RETCODE=0") self.addrule("PACMAN_RETCODE=0")
self.addrule("PKG_VERSION=pkg1|1.0-2") self.addrule("PKG_VERSION=pkg1|1.0-2")
self.addrule("PKG_EXIST=pkg2") self.addrule("PKG_EXIST=pkg2")
self.addrule("PKG_REQUIREDBY=pkg2|pkg1")

View File

@ -24,3 +24,5 @@ self.addrule("PACMAN_RETCODE=0")
self.addrule("PKG_EXIST=pkg1") self.addrule("PKG_EXIST=pkg1")
self.addrule("PKG_VERSION=pkg2|1.0-2") self.addrule("PKG_VERSION=pkg2|1.0-2")
self.addrule("PKG_EXIST=pkg3") self.addrule("PKG_EXIST=pkg3")
self.addrule("PKG_REQUIREDBY=pkg2|pkg1")
self.addrule("PKG_DEPENDS=pkg1|imaginary")

View File

@ -22,3 +22,5 @@ self.addrule("PACMAN_RETCODE=0")
self.addrule("PKG_EXIST=pkg1") self.addrule("PKG_EXIST=pkg1")
self.addrule("PKG_VERSION=pkg2|1.0-2") self.addrule("PKG_VERSION=pkg2|1.0-2")
self.addrule("PKG_EXIST=pkg3") self.addrule("PKG_EXIST=pkg3")
self.addrule("!PKG_REQUIREDBY=pkg1|pkg2")
self.addrule("PKG_REQUIREDBY=pkg1|pkg3")

View File

@ -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")