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:
parent
820fae9d75
commit
bd7eb9475c
@ -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
|
|
||||||
|
@ -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);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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.
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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")
|
||||||
|
@ -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")
|
||||||
|
@ -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")
|
||||||
|
@ -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")
|
||||||
|
@ -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")
|
||||||
|
23
pactest/tests/upgrade057.py
Normal file
23
pactest/tests/upgrade057.py
Normal 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")
|
Loading…
x
Reference in New Issue
Block a user