Git-Url: http://git.frugalware.org/gitweb/gitweb.cgi?p=pacman-g2.git;a=commitdiff;h=0a36ade1edc01fa4dc3a0cc5d176388803bfe0ff
commit 0a36ade1edc01fa4dc3a0cc5d176388803bfe0ff Author: Michel Hermier <[email protected]> Date: Tue Apr 29 16:48:05 2014 +0200 libpacman: Add Package::provides accessor and interogator. diff --git a/lib/libpacman/db/localdb.cpp b/lib/libpacman/db/localdb.cpp index 1d2c623..5ba268f 100644 --- a/lib/libpacman/db/localdb.cpp +++ b/lib/libpacman/db/localdb.cpp @@ -436,7 +436,7 @@ int LocalDatabase::write(Package *info, unsigned int inforeq) _pacman_localdb_write_stringlist("DEPENDS", info->depends, fp); _pacman_localdb_write_stringlist("REQUIREDBY", info->requiredby, fp); _pacman_localdb_write_stringlist("CONFLICTS", info->conflicts, fp); - _pacman_localdb_write_stringlist("PROVIDES", info->provides, fp); + _pacman_localdb_write_stringlist("PROVIDES", info->provides(), fp); fclose(fp); fp = NULL; } diff --git a/lib/libpacman/db/localdb_files.cpp b/lib/libpacman/db/localdb_files.cpp index 4b56bf4..e5fcc24 100644 --- a/lib/libpacman/db/localdb_files.cpp +++ b/lib/libpacman/db/localdb_files.cpp @@ -200,7 +200,7 @@ int _pacman_localdb_depends_fread(Package *info, FILE *fp) } else if(!strcmp(line, "%CONFLICTS%")) { _pacman_db_read_lines(&info->conflicts, line, sline, fp); } else if(!strcmp(line, "%PROVIDES%")) { - _pacman_db_read_lines(&info->provides, line, sline, fp); + _pacman_db_read_lines(&info->m_provides, line, sline, fp); } else if(!strcmp(line, "%REPLACES%")) { /* the REPLACES tag is special -- it only appears in sync repositories, * not the local one. */ diff --git a/lib/libpacman/deps.cpp b/lib/libpacman/deps.cpp index e98a185..7aea416 100644 --- a/lib/libpacman/deps.cpp +++ b/lib/libpacman/deps.cpp @@ -358,9 +358,9 @@ pmlist_t *_pacman_checkdeps(pmtrans_t *trans, unsigned char op, pmlist_t *packag for(k = packages; k && !found; k = k->next) { Package *p = (Package *)k->data; /* see if the package names match OR if p provides depend.name */ - if(!strcmp(p->name, depend.name) || _pacman_list_is_strin(depend.name, p->getinfo(PM_PKG_PROVIDES))) { + if(!strcmp(p->name, depend.name) || p->provides(depend.name)) { if(depend.mod == PM_DEP_MOD_ANY || - _pacman_list_is_strin(depend.name, p->getinfo(PM_PKG_PROVIDES))) { + p->provides(depend.name)) { /* depend accepts any version or p provides depend (provides - by * definition - is for all versions) */ found = 1; @@ -414,7 +414,7 @@ pmlist_t *_pacman_checkdeps(pmtrans_t *trans, unsigned char op, pmlist_t *packag for(k=trans->packages; !found && k; k=k->next) { Package *spkg = k->data; - if(spkg && _pacman_list_is_strin(tp->name, spkg->getinfo(PM_PKG_PROVIDES))) { + if(spkg && spkg->provides(tp->name)) { found=1; } } @@ -422,7 +422,7 @@ pmlist_t *_pacman_checkdeps(pmtrans_t *trans, unsigned char op, pmlist_t *packag pmsyncpkg_t *ps = k->data; Package *spkg = ps->pkg; - if(spkg && _pacman_list_is_strin(tp->name, spkg->getinfo(PM_PKG_PROVIDES))) { + if(spkg && spkg->provides(tp->name)) { found=1; } } @@ -598,7 +598,7 @@ int _pacman_resolvedeps(pmtrans_t *trans, Package *syncpkg, pmlist_t *list, /* check if one of the packages in *list already provides this dependency */ for(j = list; j && !found; j = j->next) { Package *sp = (Package *)j->data; - if(_pacman_list_is_strin(miss->depend.name, sp->getinfo(PM_PKG_PROVIDES))) { + if(sp->provides(miss->depend.name)) { _pacman_log(PM_LOG_DEBUG, _("%s provides dependency %s -- skipping"), sp->name, miss->depend.name); found = 1; @@ -695,7 +695,7 @@ int _pacman_depcmp(Package *pkg, pmdepend_t *dep) const char *mod = "~="; if(strcmp(pkg->name, dep->name) == 0 - || _pacman_list_is_strin(dep->name, pkg->getinfo(PM_PKG_PROVIDES))) { + || pkg->provides(dep->name)) { if(dep->mod == PM_DEP_MOD_ANY) { equal = 1; } else { diff --git a/lib/libpacman/package.cpp b/lib/libpacman/package.cpp index d864656..855cf5f 100644 --- a/lib/libpacman/package.cpp +++ b/lib/libpacman/package.cpp @@ -93,7 +93,7 @@ Package::Package(const libpacman::Package &other) depends = _pacman_list_strdup(other.depends); removes = _pacman_list_strdup(other.removes); groups = _pacman_list_strdup(other.groups); - provides = _pacman_list_strdup(other.provides); + m_provides = _pacman_list_strdup(other.m_provides); replaces = _pacman_list_strdup(other.replaces); triggers = _pacman_list_strdup(other.triggers); @@ -114,7 +114,7 @@ Package::~Package() FREELIST(conflicts); FREELIST(requiredby); FREELIST(groups); - FREELIST(provides); + FREELIST(m_provides); FREELIST(replaces); FREELIST(triggers); if(origin == PKG_FROM_FILE) { @@ -204,7 +204,7 @@ int _pacman_pkg_fini(Package *self) FREELIST(self->conflicts); FREELIST(self->requiredby); FREELIST(self->groups); - FREELIST(self->provides); + FREELIST(self->m_provides); FREELIST(self->replaces); FREELIST(self->triggers); if(self->origin == PKG_FROM_FILE) { @@ -438,7 +438,7 @@ void *Package::getinfo(unsigned char parm) case PM_PKG_DEPENDS: data = depends; break; case PM_PKG_REMOVES: data = removes; break; case PM_PKG_REQUIREDBY: data = requiredby; break; - case PM_PKG_PROVIDES: data = provides; break; + case PM_PKG_PROVIDES: data = m_provides; break; case PM_PKG_CONFLICTS: data = conflicts; break; case PM_PKG_FILES: data = files; break; case PM_PKG_BACKUP: data = backup; break; @@ -539,6 +539,16 @@ char *Package::fileneedbackup(const char *file) const return(NULL); } +FStringList *Package::provides() const +{ + return m_provides; +} + +bool Package::provides(const char *pkgname) +{ + return _pacman_list_is_strin(pkgname, getinfo(PM_PKG_PROVIDES)); +} + typedef struct FPackageStrMatcher FPackageStrMatcher; struct FPackageStrMatcher @@ -595,7 +605,7 @@ int _pacman_packagestrmatcher_match(const void *ptr, const void *matcher_data) { ((flags & PM_PACKAGE_FLAG_REMOVES) && f_stringlist_any_match(pkg->removes, strmatcher)) || ((flags & PM_PACKAGE_FLAG_REQUIREDBY) && f_stringlist_any_match(pkg->requiredby, strmatcher)) || ((flags & PM_PACKAGE_FLAG_CONFLITS) && f_stringlist_any_match(pkg->conflicts, strmatcher)) || - ((flags & PM_PACKAGE_FLAG_PROVIDES) && f_stringlist_any_match(pkg->provides, strmatcher)) || + ((flags & PM_PACKAGE_FLAG_PROVIDES) && f_stringlist_any_match(pkg->m_provides, strmatcher)) || ((flags & PM_PACKAGE_FLAG_TRIGGERS) && f_stringlist_any_match(pkg->triggers, strmatcher))) { return 1; } diff --git a/lib/libpacman/package.h b/lib/libpacman/package.h index 4729e8d..3a50c95 100644 --- a/lib/libpacman/package.h +++ b/lib/libpacman/package.h @@ -110,6 +110,9 @@ public: bool set_filename(const char *filename, int witharch); static bool splitname(const char *target, char *name, char *version, int witharch); + FStringList *provides() const; + bool provides(const char *pkgname); + libpacman::Database *database; unsigned int flags; @@ -141,7 +144,7 @@ public: FStringList *removes; FStringList *requiredby; FStringList *conflicts; - FStringList *provides; + FStringList *m_provides; FStringList *triggers; /* internal */ unsigned char origin; diff --git a/lib/libpacman/package/fpmpackage.cpp b/lib/libpacman/package/fpmpackage.cpp index ef5c2c5..4e654dc 100644 --- a/lib/libpacman/package/fpmpackage.cpp +++ b/lib/libpacman/package/fpmpackage.cpp @@ -120,7 +120,7 @@ int _pacman_pkginfo_fread(FILE *descfile, Package *info, int output) } else if(!strcmp(key, "REPLACES")) { info->replaces = f_stringlist_append(info->replaces, ptr); } else if(!strcmp(key, "PROVIDES")) { - info->provides = f_stringlist_append(info->provides, ptr); + info->m_provides = f_stringlist_append(info->m_provides, ptr); } else if(!strcmp(key, "BACKUP")) { info->backup = f_stringlist_append(info->backup, ptr); } else if(!strcmp(key, "TRIGGER")) { diff --git a/lib/libpacman/sync.cpp b/lib/libpacman/sync.cpp index 52c351b..0417641 100644 --- a/lib/libpacman/sync.cpp +++ b/lib/libpacman/sync.cpp @@ -369,7 +369,7 @@ int _pacman_sync_prepare(pmtrans_t *trans, pmlist_t **data) local = _pacman_db_get_pkgfromcache(db_local, miss->depend.name); /* check if this package also "provides" the package it's conflicting with */ - if(_pacman_list_is_strin(miss->depend.name, ps->pkg->provides)) { + if(ps->pkg->provides(miss->depend.name)) { /* so just treat it like a "replaces" item so the REQUIREDBY * fields are inherited properly. */ @@ -544,7 +544,7 @@ int _pacman_sync_prepare(pmtrans_t *trans, pmlist_t **data) * to a provisio from the package we want to remove */ for(k = conflictp->depends; k && !pfound; k = k->next) { pmlist_t *m; - for(m = leavingp->provides; m && !pfound; m = m->next) { + for(m = leavingp->provides(); m && !pfound; m = m->next) { if(!strcmp(k->data, m->data)) { /* Found a match -- now look through final for a package that * provides the same thing. If none are found, then it truly @@ -552,7 +552,7 @@ int _pacman_sync_prepare(pmtrans_t *trans, pmlist_t **data) pmlist_t *n, *o; for(n = trans->syncpkgs; n && !pfound; n = n->next) { pmsyncpkg_t *sp = n->data; - for(o = sp->pkg->provides; o && !pfound; o = o->next) { + for(o = sp->pkg->provides(); o && !pfound; o = o->next) { if(!strcmp(m->data, o->data)) { /* found matching provisio -- we're good to go */ _pacman_log(PM_LOG_FLOW2, _("found '%s' as a provision for '%s' -- conflict aborted"), diff --git a/lib/libpacman/trans.cpp b/lib/libpacman/trans.cpp index 6ac4abb..b73aa39 100644 --- a/lib/libpacman/trans.cpp +++ b/lib/libpacman/trans.cpp @@ -1167,7 +1167,7 @@ int _pacman_add_commit(pmtrans_t *trans, pmlist_t **data) if(_pacman_splitdep(tmppm->data, &depend)) { continue; } - if(tmppm->data && (!strcmp(depend.name, pkg_new->name) || _pacman_list_is_strin(depend.name, pkg_new->provides))) { + if(tmppm->data && (!strcmp(depend.name, pkg_new->name) || pkg_new->provides(depend.name))) { _pacman_log(PM_LOG_DEBUG, _("adding '%s' in requiredby field for '%s'"), tmpp->name, pkg_new->name); pkg_new->requiredby = _pacman_stringlist_append(pkg_new->requiredby, tmpp->name); } _______________________________________________ Frugalware-git mailing list [email protected] http://frugalware.org/mailman/listinfo/frugalware-git
